From ba3cb79bed4ead1a23a831790988d4919d27bc5c Mon Sep 17 00:00:00 2001 From: batphonghan Date: Fri, 9 Jun 2023 22:21:29 +0700 Subject: [PATCH 01/90] WIP --- go.mod | 1 + go.sum | 3 +- stader/stader.go | 4 ++ testing/setup_test.go | 98 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 testing/setup_test.go diff --git a/go.mod b/go.mod index 014d6960d..fa1259333 100644 --- a/go.mod +++ b/go.mod @@ -35,6 +35,7 @@ require ( github.com/shirou/gopsutil/v3 v3.23.1 github.com/stader-labs/ethcli-ui/configuration v0.0.0-20230602142021-378099c5eca8 github.com/stader-labs/ethcli-ui/wizard v0.0.0-20230602142021-378099c5eca8 + github.com/stretchr/testify v1.8.4 github.com/tyler-smith/go-bip39 v1.1.0 github.com/urfave/cli v1.22.10 github.com/wealdtech/go-eth2-types/v2 v2.7.0 diff --git a/go.sum b/go.sum index 2a1f89847..18d0e9b2f 100644 --- a/go.sum +++ b/go.sum @@ -1272,8 +1272,9 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344 h1:m+8fKfQwCAy1QjzINvKe/pYtLjo2dl59x2w9YSEJxuY= github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= diff --git a/stader/stader.go b/stader/stader.go index e4ae08479..437308c7d 100644 --- a/stader/stader.go +++ b/stader/stader.go @@ -33,7 +33,11 @@ import ( ) // Run + func main() { + Run() +} +func Run() { // Initialise application app := cli.NewApp() diff --git a/testing/setup_test.go b/testing/setup_test.go new file mode 100644 index 000000000..4ddefaf9d --- /dev/null +++ b/testing/setup_test.go @@ -0,0 +1,98 @@ +package testing + +import ( + "log" + "os" + "testing" + "time" + + "github.com/stader-labs/stader-node/stader/api" + "github.com/stader-labs/stader-node/stader/node" + "github.com/stretchr/testify/suite" + "github.com/urfave/cli" +) + +// Define the suite, and absorb the built-in basic suite +// functionality from testify - including a T() method which +// returns the current testing context +type ExampleTestSuite struct { + suite.Suite + VariableThatShouldStartAtFive int +} + +// Make sure that VariableThatShouldStartAtFive is set to five +// before each test +// func (suite *ExampleTestSuite) SetupSuite() { +// // Initialise application + +// } + +type MyTestSuite struct { + suite.Suite +} + +// listen for 'go test' command --> run test methods +func TestMyTestSuite(t *testing.T) { + suite.Run(t, new(MyTestSuite)) +} + +// run once, before test suite methods +func (s *MyTestSuite) SetupSuite() { + log.Println("SetupSuite()") + + app := cli.NewApp() + // Register commands + api.RegisterCommands(app, "api", []string{"a"}) + node.RegisterCommands(app, "node", []string{"n"}) + + // Run application + go func() { + a := os.Args + if err := app.Run([]string{ + a[0], + "--settings=/Users/batphonghan/.stader/user-settings.yml", + "node", + }); err != nil { + panic(err) + } + }() + + log.Println("Done SetupSuite()") + // connect the database, save to 's.db' +} + +// run once, after test suite methods +func (s *MyTestSuite) TearDownSuite() { + log.Println("TearDownSuite()") + + // delete the created database +} + +// run before each test +func (s *MyTestSuite) SetupTest() { + log.Println("SetupTest()") +} + +// run after each test +func (s *MyTestSuite) TearDownTest() { + log.Println("TearDownTest()") +} + +// run before each test +func (s *MyTestSuite) BeforeTest(suiteName, testName string) { + log.Println("BeforeTest()", suiteName, testName) +} + +// run after each test +func (s *MyTestSuite) AfterTest(suiteName, testName string) { + log.Println("AfterTest()", suiteName, testName) +} + +func (s *MyTestSuite) TestExample1() { + time.Sleep(time.Minute) + s.Equal(true, true) +} + +func (s *MyTestSuite) TestExample2() { + s.Equal(true, true) +} From 7001c89c9e6cb14247155ef527f4b59ac8463a2a Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 13 Jun 2023 13:27:00 +0700 Subject: [PATCH 02/90] Config testing --- go.mod | 13 +- go.sum | 1069 ++++++++++++++- shared/types/config/types.go | 1 + stader-lib/api/ELContract.go | 307 +++++ stader-lib/api/ELContractFactory.go | 317 +++++ stader-lib/api/ETHX.go | 1941 +++++++++++++++++++++++++++ testing/config_test.go | 227 ++++ testing/deploy.go | 114 ++ testing/node_test.go | 64 + testing/setup_test.go | 98 -- 10 files changed, 4035 insertions(+), 116 deletions(-) create mode 100644 stader-lib/api/ELContract.go create mode 100644 stader-lib/api/ELContractFactory.go create mode 100644 stader-lib/api/ETHX.go create mode 100644 testing/config_test.go create mode 100644 testing/deploy.go create mode 100644 testing/node_test.go delete mode 100644 testing/setup_test.go diff --git a/go.mod b/go.mod index fa1259333..dfac8c33d 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/stader-labs/stader-node go 1.13 require ( + github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect github.com/a8m/envsubst v1.3.0 github.com/alessio/shellescape v1.4.1 @@ -21,6 +22,11 @@ require ( github.com/herumi/bls-eth-go-binary v1.28.1 // indirect github.com/imdario/mergo v0.3.13 github.com/klauspost/cpuid/v2 v2.1.1 + github.com/kurtosis-tech/kurtosis-portal/api/golang v0.0.0-20230411133558-b983d9bebe4f // indirect + github.com/kurtosis-tech/kurtosis/api/golang v0.78.0 + github.com/kurtosis-tech/kurtosis/grpc-file-transfer/golang v0.0.0-20230609162710-10b6b91dc9e8 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/mitchellh/go-homedir v1.1.0 github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae // indirect github.com/morikuni/aec v1.0.0 // indirect @@ -33,19 +39,24 @@ require ( github.com/rivo/tview v0.0.0-20230530133550-8bd761dda819 // indirect github.com/sethvargo/go-password v0.2.0 github.com/shirou/gopsutil/v3 v3.23.1 + github.com/sirupsen/logrus v1.9.3 github.com/stader-labs/ethcli-ui/configuration v0.0.0-20230602142021-378099c5eca8 github.com/stader-labs/ethcli-ui/wizard v0.0.0-20230602142021-378099c5eca8 github.com/stretchr/testify v1.8.4 github.com/tyler-smith/go-bip39 v1.1.0 + github.com/ulikunitz/xz v0.5.11 // indirect github.com/urfave/cli v1.22.10 github.com/wealdtech/go-eth2-types/v2 v2.7.0 github.com/wealdtech/go-eth2-util v1.7.0 github.com/wealdtech/go-eth2-wallet-encryptor-keystorev4 v1.3.0 go.uber.org/atomic v1.11.0 // indirect golang.org/x/crypto v0.7.0 + golang.org/x/net v0.10.0 // indirect golang.org/x/sync v0.1.0 golang.org/x/term v0.8.0 - google.golang.org/grpc v1.49.0 // indirect + google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect gopkg.in/yaml.v2 v2.4.0 gotest.tools/v3 v3.3.0 // indirect ) diff --git a/go.sum b/go.sum index 18d0e9b2f..86e2f5e36 100644 --- a/go.sum +++ b/go.sum @@ -7,6 +7,7 @@ cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSR cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= @@ -18,25 +19,585 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= +cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= +cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= +cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k= +cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M= +cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= +cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= +cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= +cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= +cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= +cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= +cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= +cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= +cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= +cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A= +cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY= +cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI= +cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= +cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI= +cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= +cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg= +cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= +cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= +cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= +cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= +cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= +cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= +cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= +cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q= +cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= +cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= +cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= +cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= +cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= +cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= +cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= +cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= +cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= +cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= +cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= +cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM= +cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= +cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= +cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= +cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= +cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= +cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= +cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= +cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= +cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= +cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= +cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= +cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= +cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= +cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= +cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= +cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= +cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= +cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= +cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= +cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= +cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA= +cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= +cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= +cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= +cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= +cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo= +cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= +cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= +cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= +cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= +cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= +cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg= +cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= +cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24= +cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= +cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= +cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= +cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= +cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= +cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= +cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= +cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= +cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= +cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= +cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= +cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= +cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= +cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= +cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= +cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= +cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= +cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= +cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo= +cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= +cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= +cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= +cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= +cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= +cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= +cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= +cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= +cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= +cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= +cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= +cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= +cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= +cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= +cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= +cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= +cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= +cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= +cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= +cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= +cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= +cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= +cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= +cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= +cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= +cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= +cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= +cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= +cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= +cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= +cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= +cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= +cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= contrib.go.opencensus.io/exporter/jaeger v0.2.1/go.mod h1:Y8IsLgdxqh1QxYxPC5IgXVmBaeLUeQFfBeBi9PbeZd0= dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= @@ -44,7 +605,9 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7 dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= @@ -68,10 +631,14 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/MariusVanDerWijden/FuzzyVM v0.0.0-20210904205340-da82a0d3e27a/go.mod h1:iKT2vQyFJT+f8rXja6l58k8hv0gLvNx9C23FITcSP8E= github.com/MariusVanDerWijden/FuzzyVM v0.0.0-20220304110512-764253afa8c2/go.mod h1:qYFcGVF7YKFUu5h6mrzKnO+e68utHbeS3a0SlZK0bZQ= github.com/MariusVanDerWijden/tx-fuzz v0.0.0-20220321065247-ebb195301a27/go.mod h1:C9h4QFtD/axTvWBeBAy3ApnMRiIXK2Rt0JvkABgd2qI= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= +github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= @@ -93,7 +660,10 @@ github.com/a8m/envsubst v1.3.0 h1:GmXKmVssap0YtlU3E230W98RWtWCyIZzjtf1apWWyAg= github.com/a8m/envsubst v1.3.0/go.mod h1:MVUTQNGQ3tsjOOtKCNd+fl8RzhsXcDvvAEzkhGtlsbY= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= +github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -105,11 +675,15 @@ github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= +github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= +github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= github.com/aristanetworks/fsnotify v1.4.2/go.mod h1:D/rtu7LpjYM8tRJphJ0hUBYpjai8SfX+aSNsWDTq/Ks= github.com/aristanetworks/glog v0.0.0-20191112221043-67e8567f59f3/go.mod h1:KASm+qXFKs/xjSoWn30NrWBBvdTTQq+UjkhjEJHfSFA= github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= @@ -149,6 +723,8 @@ github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= github.com/bradfitz/gomemcache v0.0.0-20170208213004-1952afaa557d/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= @@ -188,14 +764,17 @@ github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOC github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/cp v1.1.1 h1:nCb6ZLdB7NRaqsm91JtQTAme2SKJzXVsdPIPkyJr1MU= github.com/cespare/cp v1.1.1/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -207,12 +786,18 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/consensys/bavard v0.1.8-0.20210105233146-c16790d2aa8b/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= @@ -289,10 +874,14 @@ github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5Xh github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= +github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q= +github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= +github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= @@ -314,10 +903,18 @@ github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4s 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.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= +github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= github.com/ethereum/go-ethereum v1.10.1/go.mod h1:E5e/zvdfUVr91JZ0AwjyuJM3x+no51zZJRz61orLLSk= github.com/ethereum/go-ethereum v1.10.4/go.mod h1:nEE0TP5MtxGzOMd7egIrbPJMQBnhVU3ELNxhBglIzhg= @@ -344,12 +941,15 @@ github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+ github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.3-0.20170329110642-4da3e2cfbabc/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= @@ -378,6 +978,11 @@ github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= +github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -387,6 +992,8 @@ github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= @@ -406,6 +1013,8 @@ github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1 github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= @@ -418,7 +1027,9 @@ github.com/go-stack/stack v1.6.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-yaml/yaml v2.1.0+incompatible h1:RYi2hDdss1u4YE7GwixGzWwVo47T8UQwnTLB6vQiq+o= github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -435,8 +1046,10 @@ github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/gddo v0.0.0-20200528160355-8d077c1d8f4c/go.mod h1:sam69Hju0uq+5uvLJUMDlsKlQ21Vrs1Kd/1YFPNYdOU= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -451,6 +1064,7 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -468,8 +1082,10 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -481,6 +1097,7 @@ github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGS github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.1.1-0.20171103154506-982329095285/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -494,6 +1111,7 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -507,6 +1125,9 @@ github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8v github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -514,7 +1135,15 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -523,12 +1152,28 @@ github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= @@ -556,8 +1201,10 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.0.1 h1:X2vfSnm1WC8HEo0MBHZg2TcuDUHJj6kd1TmEAQncnSA= github.com/grpc-ecosystem/grpc-gateway/v2 v2.0.1/go.mod h1:oVMjMN64nzEcepv1kdZKgx1qNYt4Ro0Gqefiq2JWdis= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= github.com/hamidraza/tview v1.0.0 h1:CB0XRmXopZvAyNCEyGfK4VSijYSZBdK9S4QsULYIc/U= @@ -613,6 +1260,7 @@ github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSa github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/cgosymbolizer v0.0.0-20200424224625-be1b05b0b279/go.mod h1:a5aratAVTWyz+nJMmDsN8O4XTfaLfdAsB1ysCmZX5Bw= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -688,6 +1336,7 @@ github.com/juju/ansiterm v0.0.0-20180109212912-720a0952cc2a/go.mod h1:UJSiEoRfvx github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw= @@ -695,6 +1344,7 @@ github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2vi github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/karalabe/usb v0.0.0-20211005121534-4c5740d64559/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kevinms/leakybucket-go v0.0.0-20200115003610-082473db97ca/go.mod h1:ph+C5vpnCcQvKBwJwKLTK3JLNGnBXYlG7m7JjoC/zYA= github.com/kilic/bls12-381 v0.0.0-20201226121925-69dacb279461/go.mod h1:vDTTHJONJ6G+P2R74EhnyotQDTliQDnFEwhdmfzw1ig= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= @@ -702,13 +1352,17 @@ github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQL github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.8/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.1/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.7/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.3 h1:CCtW0xUnWGVINKvE/WWOYKdsPV6mawAtvQuSl8guwQs= github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= @@ -726,6 +1380,7 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= github.com/koron/go-ssdp v0.0.3/go.mod h1:b2MxI6yh02pKrsyNoQUsk4+YNikaGhe4894J+Q5lDvA= github.com/korovkin/limiter v0.0.0-20190919045942-dac5a6b2a536/go.mod h1:bttpekv26JrhFNCYlxnxn8a1jw8Q0gi8iHe0RC4JLBg= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -737,6 +1392,16 @@ github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kurtosis-tech/kurtosis-portal/api/golang v0.0.0-20230328194643-b4dea3081e25/go.mod h1:YjVghnKmmELgH8DmIKBFxwArWbtLUYqwnol9DAWnBM8= +github.com/kurtosis-tech/kurtosis-portal/api/golang v0.0.0-20230411133558-b983d9bebe4f h1:Ce/lB+f7ulcaEvYM03DvpwVZ/0kQhz9p49CVBsukuJw= +github.com/kurtosis-tech/kurtosis-portal/api/golang v0.0.0-20230411133558-b983d9bebe4f/go.mod h1:YjVghnKmmELgH8DmIKBFxwArWbtLUYqwnol9DAWnBM8= +github.com/kurtosis-tech/kurtosis/api/golang v0.78.0 h1:e4MJK35fEofaQqnGb+rUBuYryKTVXd9y4AMgRB+94HU= +github.com/kurtosis-tech/kurtosis/api/golang v0.78.0/go.mod h1:rNZqlwD7O5ThA4Wx7yHtzF5b1nYNlOgDd8Od4d0kp1o= +github.com/kurtosis-tech/kurtosis/grpc-file-transfer/golang v0.0.0-20230427135111-ee2492059d06/go.mod h1:Dw7pqbZWNdjGEYO6B+xzfaQrtXsLNDpYLhHfXirbzTs= +github.com/kurtosis-tech/kurtosis/grpc-file-transfer/golang v0.0.0-20230609162710-10b6b91dc9e8 h1:tsZDLmOsR5QXUysm158+avIP3RvBEcnVm7FbQbjuzUo= +github.com/kurtosis-tech/kurtosis/grpc-file-transfer/golang v0.0.0-20230609162710-10b6b91dc9e8/go.mod h1:JXsmXLmtsbUPEeAPitkTxPl4R7Lk1anUaZBW99B2Zgk= +github.com/kurtosis-tech/stacktrace v0.0.0-20211028211901-1c67a77b5409 h1:YQTATifMUwZEtZYb0LVA7DK2pj8s71iY8rzweuUQ5+g= +github.com/kurtosis-tech/stacktrace v0.0.0-20211028211901-1c67a77b5409/go.mod h1:y5weVs5d9wXXHcDA1awRxkIhhHC1xxYJN8a7aXnE6S8= github.com/kylelemons/godebug v0.0.0-20170224010052-a616ab194758/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= @@ -820,6 +1485,9 @@ github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lunixbochs/vtclean v0.0.0-20180621232353-2d01aacdc34a/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= +github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.7.4-0.20170902060319-8d7837e64d3c/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -849,8 +1517,9 @@ github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-isatty v0.0.2/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= @@ -862,8 +1531,10 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= @@ -871,10 +1542,13 @@ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/mholt/archiver v3.1.1+incompatible h1:1dCVxuqs0dJseYEhi5pl7MYPH9zDa1wBi7mF09cbNkU= +github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= @@ -883,7 +1557,9 @@ github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7Xn github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= @@ -981,6 +1657,8 @@ github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= +github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= +github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -1059,15 +1737,23 @@ github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHu github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/peterh/liner v1.2.0/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= +github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.4.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= +github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -1094,8 +1780,9 @@ github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1: github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -1149,6 +1836,7 @@ github.com/raulk/clock v1.1.0/go.mod h1:3MpVxdZ/ODBQDxbN+kzshf5OSZwPjtMDx6BBXBmO github.com/raulk/go-watchdog v1.2.0/go.mod h1:lzSbAl5sh4rtI8tYHU01BWIDzgzqaQLj6RcA1i4mlqI= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= @@ -1160,8 +1848,9 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= 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.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= @@ -1171,6 +1860,8 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= @@ -1214,8 +1905,9 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= @@ -1230,6 +1922,9 @@ github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2 github.com/spf13/afero v0.0.0-20170901052352-ee1bd8ee15a1/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.1.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= @@ -1307,6 +2002,10 @@ github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2n github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= @@ -1345,6 +2044,8 @@ github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+m github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= @@ -1361,6 +2062,8 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= @@ -1373,8 +2076,12 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= @@ -1423,6 +2130,7 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -1438,11 +2146,13 @@ 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-20210220033148-5ea612d1eb83/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-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210505212654-3497b51f5e64/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -1457,6 +2167,7 @@ golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= @@ -1465,9 +2176,20 @@ golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EH golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= +golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -1479,8 +2201,9 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5 h1:2M3HP5CCK1Si9FQhwnzYhXdG6DXeebvUHFpre8QvbyI= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mobile v0.0.0-20200801112145-973feb4309de/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= @@ -1491,13 +2214,17 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1545,7 +2272,10 @@ golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= @@ -1553,21 +2283,34 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/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-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/oauth2 v0.0.0-20170912212905-13449ad91cb2/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1577,8 +2320,28 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20170517211232-f52d1811a629/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1594,6 +2357,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/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.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1669,13 +2434,19 @@ golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210105210732-16f7687f5001/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1685,27 +2456,49 @@ golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210426080607-c94f62235c83/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210503173754-0981d6026fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/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-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211214234402-4825e8c3871d/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-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/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-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220731174439-a90be440212d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1715,6 +2508,9 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= @@ -1730,6 +2526,10 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 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.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= @@ -1740,8 +2540,11 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1766,6 +2569,7 @@ golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1803,31 +2607,50 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= +gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= +gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= google.golang.org/api v0.0.0-20170921000349-586095a6e407/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= @@ -1850,6 +2673,47 @@ google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= google.golang.org/api v0.34.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= +google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= +google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= +google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1902,8 +2766,119 @@ google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210426193834-eac7f76ac494 h1:KMgpo2lWy1vfrYjtxPAzR0aNWeAR1UdQykt6sj/hpBY= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210426193834-eac7f76ac494/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= +google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230525234025-438c736192d0/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc h1:8DyZCyvI8mE1IdLy/60bS+52xfymkE72wv1asokgtao= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8= +google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc h1:kVKPf/IiYSBWEWtkIn6wZXwWGCnLKcC8oWfZvXjsGnM= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234015-3fc162c6f38a/go.mod h1:xURIpW9ES5+/GZhnV6beoEtxQrnkRGIfP5VQG2tCBLc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1:XSJ8Vk1SWuNr8S18z1NZSziL0CPIXLCCMDOEFtHBOFc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/grpc v1.2.1-0.20170921194603-d4b75ebd4f9f/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= @@ -1928,12 +2903,36 @@ google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.49.0 h1:WTLtQzmQori5FUH25Pq4WT22oCsv8USpQ+F6rqtsmxw= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= +google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.0.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1948,8 +2947,10 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/bsm/ratelimit.v1 v1.0.0-20160220154919-db14e161995a/go.mod h1:KF9sEfUPAXdG8Oev9e99iLGnl2uJMjc5B+4y3O7x610= gopkg.in/cenkalti/backoff.v1 v1.1.0/go.mod h1:J6Vskwqd+OMVJl8C33mmtxTBs2gyzfv7UDAkHu8BrjI= @@ -2025,6 +3026,40 @@ k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl k8s.io/utils v0.0.0-20200520001619-278ece378a50/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= lukechampine.com/blake3 v1.1.6/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= +modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= +modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= +modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= +modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= +modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= +modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= +modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= diff --git a/shared/types/config/types.go b/shared/types/config/types.go index ef56a7d4f..b1ebd9d07 100644 --- a/shared/types/config/types.go +++ b/shared/types/config/types.go @@ -54,6 +54,7 @@ const ( Network_Prater Network = "prater" Network_Devnet Network = "devnet" Network_Zhejiang Network = "zhejiang" + Network_Local Network = "local" ) // Enum to describe the mode for a client - local (Docker Mode) or external (Hybrid Mode) diff --git a/stader-lib/api/ELContract.go b/stader-lib/api/ELContract.go new file mode 100644 index 000000000..aa7e76f15 --- /dev/null +++ b/stader-lib/api/ELContract.go @@ -0,0 +1,307 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contracts + +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 +) + +// ELContractMetaData contains all meta data concerning the ELContract contract. +var ELContractMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_storageContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"elContractDelegateKey\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"storageContract\",\"outputs\":[{\"internalType\":\"contractIStorage\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60c060405234801561000f575f80fd5b506040516102df3803806102df83398101604081905261002e91610096565b6001600160a01b03811660a0526040516f636f6e74726163742e6164647265737360801b602082015271454c436f6e747261637444656c656761746560701b603082015260420160408051601f198184030181529190528051602090910120608052506100c3565b5f602082840312156100a6575f80fd5b81516001600160a01b03811681146100bc575f80fd5b9392505050565b60805160a0516101ef6100f05f395f8181606a015261010c01525f81816042015261015c01526101ef5ff3fe60806040526004361061002c575f3560e01c806311ce0267146100fb578063638927951461014b57610033565b3661003357005b6040516321f8a72160e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906321f8a72190602401602060405180830381865afa1580156100b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100db919061018c565b9050365f80375f80365f845af43d5f803e8080156100f7573d5ff35b3d5ffd5b348015610106575f80fd5b5061012e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610156575f80fd5b5061017e7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610142565b5f6020828403121561019c575f80fd5b81516001600160a01b03811681146101b2575f80fd5b939250505056fea2646970667358221220d756c64b850292594ad4eb5deb84983dac4e9ece2dff895b5ef38ce2efe23f7664736f6c63430008140033", +} + +// ELContractABI is the input ABI used to generate the binding from. +// Deprecated: Use ELContractMetaData.ABI instead. +var ELContractABI = ELContractMetaData.ABI + +// ELContractBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ELContractMetaData.Bin instead. +var ELContractBin = ELContractMetaData.Bin + +// DeployELContract deploys a new Ethereum contract, binding an instance of ELContract to it. +func DeployELContract(auth *bind.TransactOpts, backend bind.ContractBackend, _storageContract common.Address) (common.Address, *types.Transaction, *ELContract, error) { + parsed, err := ELContractMetaData.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(ELContractBin), backend, _storageContract) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ELContract{ELContractCaller: ELContractCaller{contract: contract}, ELContractTransactor: ELContractTransactor{contract: contract}, ELContractFilterer: ELContractFilterer{contract: contract}}, nil +} + +// ELContract is an auto generated Go binding around an Ethereum contract. +type ELContract struct { + ELContractCaller // Read-only binding to the contract + ELContractTransactor // Write-only binding to the contract + ELContractFilterer // Log filterer for contract events +} + +// ELContractCaller is an auto generated read-only Go binding around an Ethereum contract. +type ELContractCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ELContractTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ELContractTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ELContractFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ELContractFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ELContractSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ELContractSession struct { + Contract *ELContract // 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 +} + +// ELContractCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ELContractCallerSession struct { + Contract *ELContractCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ELContractTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ELContractTransactorSession struct { + Contract *ELContractTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ELContractRaw is an auto generated low-level Go binding around an Ethereum contract. +type ELContractRaw struct { + Contract *ELContract // Generic contract binding to access the raw methods on +} + +// ELContractCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ELContractCallerRaw struct { + Contract *ELContractCaller // Generic read-only contract binding to access the raw methods on +} + +// ELContractTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ELContractTransactorRaw struct { + Contract *ELContractTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewELContract creates a new instance of ELContract, bound to a specific deployed contract. +func NewELContract(address common.Address, backend bind.ContractBackend) (*ELContract, error) { + contract, err := bindELContract(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ELContract{ELContractCaller: ELContractCaller{contract: contract}, ELContractTransactor: ELContractTransactor{contract: contract}, ELContractFilterer: ELContractFilterer{contract: contract}}, nil +} + +// NewELContractCaller creates a new read-only instance of ELContract, bound to a specific deployed contract. +func NewELContractCaller(address common.Address, caller bind.ContractCaller) (*ELContractCaller, error) { + contract, err := bindELContract(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ELContractCaller{contract: contract}, nil +} + +// NewELContractTransactor creates a new write-only instance of ELContract, bound to a specific deployed contract. +func NewELContractTransactor(address common.Address, transactor bind.ContractTransactor) (*ELContractTransactor, error) { + contract, err := bindELContract(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ELContractTransactor{contract: contract}, nil +} + +// NewELContractFilterer creates a new log filterer instance of ELContract, bound to a specific deployed contract. +func NewELContractFilterer(address common.Address, filterer bind.ContractFilterer) (*ELContractFilterer, error) { + contract, err := bindELContract(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ELContractFilterer{contract: contract}, nil +} + +// bindELContract binds a generic wrapper to an already deployed contract. +func bindELContract(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ELContractMetaData.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 (_ELContract *ELContractRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ELContract.Contract.ELContractCaller.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 (_ELContract *ELContractRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ELContract.Contract.ELContractTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ELContract *ELContractRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ELContract.Contract.ELContractTransactor.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 (_ELContract *ELContractCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ELContract.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 (_ELContract *ELContractTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ELContract.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ELContract *ELContractTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ELContract.Contract.contract.Transact(opts, method, params...) +} + +// ElContractDelegateKey is a free data retrieval call binding the contract method 0x63892795. +// +// Solidity: function elContractDelegateKey() view returns(bytes32) +func (_ELContract *ELContractCaller) ElContractDelegateKey(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ELContract.contract.Call(opts, &out, "elContractDelegateKey") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ElContractDelegateKey is a free data retrieval call binding the contract method 0x63892795. +// +// Solidity: function elContractDelegateKey() view returns(bytes32) +func (_ELContract *ELContractSession) ElContractDelegateKey() ([32]byte, error) { + return _ELContract.Contract.ElContractDelegateKey(&_ELContract.CallOpts) +} + +// ElContractDelegateKey is a free data retrieval call binding the contract method 0x63892795. +// +// Solidity: function elContractDelegateKey() view returns(bytes32) +func (_ELContract *ELContractCallerSession) ElContractDelegateKey() ([32]byte, error) { + return _ELContract.Contract.ElContractDelegateKey(&_ELContract.CallOpts) +} + +// StorageContract is a free data retrieval call binding the contract method 0x11ce0267. +// +// Solidity: function storageContract() view returns(address) +func (_ELContract *ELContractCaller) StorageContract(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ELContract.contract.Call(opts, &out, "storageContract") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StorageContract is a free data retrieval call binding the contract method 0x11ce0267. +// +// Solidity: function storageContract() view returns(address) +func (_ELContract *ELContractSession) StorageContract() (common.Address, error) { + return _ELContract.Contract.StorageContract(&_ELContract.CallOpts) +} + +// StorageContract is a free data retrieval call binding the contract method 0x11ce0267. +// +// Solidity: function storageContract() view returns(address) +func (_ELContract *ELContractCallerSession) StorageContract() (common.Address, error) { + return _ELContract.Contract.StorageContract(&_ELContract.CallOpts) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_ELContract *ELContractTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _ELContract.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_ELContract *ELContractSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _ELContract.Contract.Fallback(&_ELContract.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_ELContract *ELContractTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _ELContract.Contract.Fallback(&_ELContract.TransactOpts, calldata) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_ELContract *ELContractTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ELContract.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 (_ELContract *ELContractSession) Receive() (*types.Transaction, error) { + return _ELContract.Contract.Receive(&_ELContract.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_ELContract *ELContractTransactorSession) Receive() (*types.Transaction, error) { + return _ELContract.Contract.Receive(&_ELContract.TransactOpts) +} diff --git a/stader-lib/api/ELContractFactory.go b/stader-lib/api/ELContractFactory.go new file mode 100644 index 000000000..acf17811e --- /dev/null +++ b/stader-lib/api/ELContractFactory.go @@ -0,0 +1,317 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contracts + +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 +) + +// ELContractFactoryMetaData contains all meta data concerning the ELContractFactory contract. +var ELContractFactoryMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"createProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"getProxyAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"getPubkeyRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b506040516104c63803806104c683398101604081905261002e9161009b565b6001600160a01b0381166100775760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640160405180910390fd5b5f80546001600160a01b0319166001600160a01b03929092169190911790556100c8565b5f602082840312156100ab575f80fd5b81516001600160a01b03811681146100c1575f80fd5b9392505050565b6103f1806100d55f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80635c60da1b1461004e5780638f295d591461007d578063c016c13714610092578063f0c418c8146100a5575b5f80fd5b5f54610060906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61009061008b3660046102e5565b6100c6565b005b6100606100a03660046102e5565b6100ef565b6100b86100b33660046102e5565b61011d565b604051908152602001610074565b5f6100d1838361011d565b5f549091506100e9906001600160a01b0316826101e2565b50505050565b5f806100fb848461011d565b5f54909150610113906001600160a01b031682610280565b9150505b92915050565b5f6030821461016b5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e0eac4d6caf240d8cadccee8d605b1b60448201526064015b60405180910390fd5b60405160029061018390859085905f90602001610351565b60408051601f198184030181529082905261019d91610378565b602060405180830381855afa1580156101b8573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906101db91906103a4565b9392505050565b5f604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528360601b60148201526e5af43d82803e903d91602b57fd5bf360881b6028820152826037825ff59150506001600160a01b0381166101175760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401610162565b5f6101db838330604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b8152606093841b60148201526f5af43d82803e903d91602b57fd5bf3ff60801b6028820152921b6038830152604c8201526037808220606c830152605591012090565b5f80602083850312156102f6575f80fd5b823567ffffffffffffffff8082111561030d575f80fd5b818501915085601f830112610320575f80fd5b81358181111561032e575f80fd5b86602082850101111561033f575f80fd5b60209290920196919550909350505050565b828482376fffffffffffffffffffffffffffffffff19919091169101908152601001919050565b5f82515f5b81811015610397576020818601810151858301520161037d565b505f920191825250919050565b5f602082840312156103b4575f80fd5b505191905056fea26469706673582212206d63d55da23c642bc1b07e2a4533f3e313fd9945346808e0424993d9b0a2ab4c64736f6c63430008140033", +} + +// ELContractFactoryABI is the input ABI used to generate the binding from. +// Deprecated: Use ELContractFactoryMetaData.ABI instead. +var ELContractFactoryABI = ELContractFactoryMetaData.ABI + +// ELContractFactoryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ELContractFactoryMetaData.Bin instead. +var ELContractFactoryBin = ELContractFactoryMetaData.Bin + +// DeployELContractFactory deploys a new Ethereum contract, binding an instance of ELContractFactory to it. +func DeployELContractFactory(auth *bind.TransactOpts, backend bind.ContractBackend, _implementation common.Address) (common.Address, *types.Transaction, *ELContractFactory, error) { + parsed, err := ELContractFactoryMetaData.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(ELContractFactoryBin), backend, _implementation) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ELContractFactory{ELContractFactoryCaller: ELContractFactoryCaller{contract: contract}, ELContractFactoryTransactor: ELContractFactoryTransactor{contract: contract}, ELContractFactoryFilterer: ELContractFactoryFilterer{contract: contract}}, nil +} + +// ELContractFactory is an auto generated Go binding around an Ethereum contract. +type ELContractFactory struct { + ELContractFactoryCaller // Read-only binding to the contract + ELContractFactoryTransactor // Write-only binding to the contract + ELContractFactoryFilterer // Log filterer for contract events +} + +// ELContractFactoryCaller is an auto generated read-only Go binding around an Ethereum contract. +type ELContractFactoryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ELContractFactoryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ELContractFactoryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ELContractFactoryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ELContractFactoryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ELContractFactorySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ELContractFactorySession struct { + Contract *ELContractFactory // 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 +} + +// ELContractFactoryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ELContractFactoryCallerSession struct { + Contract *ELContractFactoryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ELContractFactoryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ELContractFactoryTransactorSession struct { + Contract *ELContractFactoryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ELContractFactoryRaw is an auto generated low-level Go binding around an Ethereum contract. +type ELContractFactoryRaw struct { + Contract *ELContractFactory // Generic contract binding to access the raw methods on +} + +// ELContractFactoryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ELContractFactoryCallerRaw struct { + Contract *ELContractFactoryCaller // Generic read-only contract binding to access the raw methods on +} + +// ELContractFactoryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ELContractFactoryTransactorRaw struct { + Contract *ELContractFactoryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewELContractFactory creates a new instance of ELContractFactory, bound to a specific deployed contract. +func NewELContractFactory(address common.Address, backend bind.ContractBackend) (*ELContractFactory, error) { + contract, err := bindELContractFactory(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ELContractFactory{ELContractFactoryCaller: ELContractFactoryCaller{contract: contract}, ELContractFactoryTransactor: ELContractFactoryTransactor{contract: contract}, ELContractFactoryFilterer: ELContractFactoryFilterer{contract: contract}}, nil +} + +// NewELContractFactoryCaller creates a new read-only instance of ELContractFactory, bound to a specific deployed contract. +func NewELContractFactoryCaller(address common.Address, caller bind.ContractCaller) (*ELContractFactoryCaller, error) { + contract, err := bindELContractFactory(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ELContractFactoryCaller{contract: contract}, nil +} + +// NewELContractFactoryTransactor creates a new write-only instance of ELContractFactory, bound to a specific deployed contract. +func NewELContractFactoryTransactor(address common.Address, transactor bind.ContractTransactor) (*ELContractFactoryTransactor, error) { + contract, err := bindELContractFactory(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ELContractFactoryTransactor{contract: contract}, nil +} + +// NewELContractFactoryFilterer creates a new log filterer instance of ELContractFactory, bound to a specific deployed contract. +func NewELContractFactoryFilterer(address common.Address, filterer bind.ContractFilterer) (*ELContractFactoryFilterer, error) { + contract, err := bindELContractFactory(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ELContractFactoryFilterer{contract: contract}, nil +} + +// bindELContractFactory binds a generic wrapper to an already deployed contract. +func bindELContractFactory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ELContractFactoryMetaData.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 (_ELContractFactory *ELContractFactoryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ELContractFactory.Contract.ELContractFactoryCaller.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 (_ELContractFactory *ELContractFactoryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ELContractFactory.Contract.ELContractFactoryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ELContractFactory *ELContractFactoryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ELContractFactory.Contract.ELContractFactoryTransactor.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 (_ELContractFactory *ELContractFactoryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ELContractFactory.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 (_ELContractFactory *ELContractFactoryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ELContractFactory.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ELContractFactory *ELContractFactoryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ELContractFactory.Contract.contract.Transact(opts, method, params...) +} + +// GetProxyAddress is a free data retrieval call binding the contract method 0xc016c137. +// +// Solidity: function getProxyAddress(bytes _pubkey) view returns(address) +func (_ELContractFactory *ELContractFactoryCaller) GetProxyAddress(opts *bind.CallOpts, _pubkey []byte) (common.Address, error) { + var out []interface{} + err := _ELContractFactory.contract.Call(opts, &out, "getProxyAddress", _pubkey) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetProxyAddress is a free data retrieval call binding the contract method 0xc016c137. +// +// Solidity: function getProxyAddress(bytes _pubkey) view returns(address) +func (_ELContractFactory *ELContractFactorySession) GetProxyAddress(_pubkey []byte) (common.Address, error) { + return _ELContractFactory.Contract.GetProxyAddress(&_ELContractFactory.CallOpts, _pubkey) +} + +// GetProxyAddress is a free data retrieval call binding the contract method 0xc016c137. +// +// Solidity: function getProxyAddress(bytes _pubkey) view returns(address) +func (_ELContractFactory *ELContractFactoryCallerSession) GetProxyAddress(_pubkey []byte) (common.Address, error) { + return _ELContractFactory.Contract.GetProxyAddress(&_ELContractFactory.CallOpts, _pubkey) +} + +// GetPubkeyRoot is a free data retrieval call binding the contract method 0xf0c418c8. +// +// Solidity: function getPubkeyRoot(bytes _pubkey) pure returns(bytes32) +func (_ELContractFactory *ELContractFactoryCaller) GetPubkeyRoot(opts *bind.CallOpts, _pubkey []byte) ([32]byte, error) { + var out []interface{} + err := _ELContractFactory.contract.Call(opts, &out, "getPubkeyRoot", _pubkey) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetPubkeyRoot is a free data retrieval call binding the contract method 0xf0c418c8. +// +// Solidity: function getPubkeyRoot(bytes _pubkey) pure returns(bytes32) +func (_ELContractFactory *ELContractFactorySession) GetPubkeyRoot(_pubkey []byte) ([32]byte, error) { + return _ELContractFactory.Contract.GetPubkeyRoot(&_ELContractFactory.CallOpts, _pubkey) +} + +// GetPubkeyRoot is a free data retrieval call binding the contract method 0xf0c418c8. +// +// Solidity: function getPubkeyRoot(bytes _pubkey) pure returns(bytes32) +func (_ELContractFactory *ELContractFactoryCallerSession) GetPubkeyRoot(_pubkey []byte) ([32]byte, error) { + return _ELContractFactory.Contract.GetPubkeyRoot(&_ELContractFactory.CallOpts, _pubkey) +} + +// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. +// +// Solidity: function implementation() view returns(address) +func (_ELContractFactory *ELContractFactoryCaller) Implementation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ELContractFactory.contract.Call(opts, &out, "implementation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. +// +// Solidity: function implementation() view returns(address) +func (_ELContractFactory *ELContractFactorySession) Implementation() (common.Address, error) { + return _ELContractFactory.Contract.Implementation(&_ELContractFactory.CallOpts) +} + +// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. +// +// Solidity: function implementation() view returns(address) +func (_ELContractFactory *ELContractFactoryCallerSession) Implementation() (common.Address, error) { + return _ELContractFactory.Contract.Implementation(&_ELContractFactory.CallOpts) +} + +// CreateProxy is a paid mutator transaction binding the contract method 0x8f295d59. +// +// Solidity: function createProxy(bytes _pubkey) returns() +func (_ELContractFactory *ELContractFactoryTransactor) CreateProxy(opts *bind.TransactOpts, _pubkey []byte) (*types.Transaction, error) { + return _ELContractFactory.contract.Transact(opts, "createProxy", _pubkey) +} + +// CreateProxy is a paid mutator transaction binding the contract method 0x8f295d59. +// +// Solidity: function createProxy(bytes _pubkey) returns() +func (_ELContractFactory *ELContractFactorySession) CreateProxy(_pubkey []byte) (*types.Transaction, error) { + return _ELContractFactory.Contract.CreateProxy(&_ELContractFactory.TransactOpts, _pubkey) +} + +// CreateProxy is a paid mutator transaction binding the contract method 0x8f295d59. +// +// Solidity: function createProxy(bytes _pubkey) returns() +func (_ELContractFactory *ELContractFactoryTransactorSession) CreateProxy(_pubkey []byte) (*types.Transaction, error) { + return _ELContractFactory.Contract.CreateProxy(&_ELContractFactory.TransactOpts, _pubkey) +} diff --git a/stader-lib/api/ETHX.go b/stader-lib/api/ETHX.go new file mode 100644 index 000000000..6a9983607 --- /dev/null +++ b/stader-lib/api/ETHX.go @@ -0,0 +1,1941 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contracts + +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 +) + +// ETHXMetaData contains all meta data concerning the ETHX contract. +var ETHXMetaData = &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\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"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\"},{\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINTER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"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\":[],\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"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\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":\"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\":[],\"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\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b5060408051808201825260048082526308aa890b60e31b60208084018290528451808601909552918452908301529060036200004d838262000216565b5060046200005c828262000216565b50506006805460ff1916905550620000755f33620000d3565b620000a17f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633620000d3565b620000cd7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33620000d3565b620002de565b5f8281526005602090815260408083206001600160a01b038516845290915290205460ff1662000172575f8281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001313390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200019f57607f821691505b602082108103620001be57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000211575f81815260208120601f850160051c81016020861015620001ec5750805b601f850160051c820191505b818110156200020d57828155600101620001f8565b5050505b505050565b81516001600160401b0381111562000232576200023262000176565b6200024a816200024384546200018a565b84620001c4565b602080601f83116001811462000280575f8415620002685750858301515b5f19600386901b1c1916600185901b1785556200020d565b5f85815260208120601f198616915b82811015620002b0578886015182559484019460019091019084016200028f565b5085821015620002ce57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6113fd80620002ec5f395ff3fe608060405234801561000f575f80fd5b5060043610610187575f3560e01c80635c975abb116100d9578063a217fddf11610093578063d53913931161006e578063d539139314610330578063d547741f14610357578063dd62ed3e1461036a578063e63ab1e91461037d575f80fd5b8063a217fddf14610303578063a457c2d71461030a578063a9059cbb1461031d575f80fd5b80635c975abb1461029a57806370a08231146102a557806379cc6790146102cd5780638456cb59146102e057806391d14854146102e857806395d89b41146102fb575f80fd5b80632f2ff15d11610144578063395093511161011f57806339509351146102595780633f4ba83a1461026c57806340c10f191461027457806342966c6814610287575f80fd5b80632f2ff15d14610222578063313ce5671461023757806336568abe14610246575f80fd5b806301ffc9a71461018b57806306fdde03146101b3578063095ea7b3146101c857806318160ddd146101db57806323b872dd146101ed578063248a9ca314610200575b5f80fd5b61019e610199366004611114565b6103a4565b60405190151581526020015b60405180910390f35b6101bb6103da565b6040516101aa919061115d565b61019e6101d63660046111aa565b61046a565b6002545b6040519081526020016101aa565b61019e6101fb3660046111d2565b610481565b6101df61020e36600461120b565b5f9081526005602052604090206001015490565b610235610230366004611222565b6104a4565b005b604051601281526020016101aa565b610235610254366004611222565b6104cd565b61019e6102673660046111aa565b610550565b610235610571565b6102356102823660046111aa565b6105a6565b61023561029536600461120b565b6105e2565b60065460ff1661019e565b6101df6102b336600461124c565b6001600160a01b03165f9081526020819052604090205490565b6102356102db3660046111aa565b6105ec565b610235610628565b61019e6102f6366004611222565b610662565b6101bb61068c565b6101df5f81565b61019e6103183660046111aa565b61069b565b61019e61032b3660046111aa565b610715565b6101df7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610235610365366004611222565b610722565b6101df610378366004611265565b610746565b6101df7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b5f6001600160e01b03198216637965db0b60e01b14806103d457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600380546103e99061128d565b80601f01602080910402602001604051908101604052809291908181526020018280546104159061128d565b80156104605780601f1061043757610100808354040283529160200191610460565b820191905f5260205f20905b81548152906001019060200180831161044357829003601f168201915b5050505050905090565b5f33610477818585610770565b5060019392505050565b5f3361048e858285610893565b61049985858561090b565b506001949350505050565b5f828152600560205260409020600101546104be81610ad7565b6104c88383610ae1565b505050565b6001600160a01b03811633146105425760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61054c8282610b66565b5050565b5f336104778185856105628383610746565b61056c91906112d9565b610770565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61059b81610ad7565b6105a3610bcc565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66105d081610ad7565b6105d8610c1e565b6104c88383610c66565b6105a33382610d42565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661061681610ad7565b61061e610c1e565b6104c88383610d42565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61065281610ad7565b61065a610c1e565b6105a3610e8d565b5f9182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600480546103e99061128d565b5f33816106a88286610746565b9050838110156107085760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610539565b6104998286868403610770565b5f3361047781858561090b565b5f8281526005602052604090206001015461073c81610ad7565b6104c88383610b66565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166107d25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610539565b6001600160a01b0382166108335760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610539565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61089e8484610746565b90505f19811461090557818110156108f85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610539565b6109058484848403610770565b50505050565b6001600160a01b03831661096f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610539565b6001600160a01b0382166109d15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610539565b6001600160a01b0383165f9081526020819052604090205481811015610a485760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610539565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290610a7e9084906112d9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610aca91815260200190565b60405180910390a3610905565b6105a38133610eca565b610aeb8282610662565b61054c575f8281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610b223390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610b708282610662565b1561054c575f8281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610bd4610f2e565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60065460ff1615610c645760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610539565b565b6001600160a01b038216610cbc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610539565b8060025f828254610ccd91906112d9565b90915550506001600160a01b0382165f9081526020819052604081208054839290610cf99084906112d9565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610da25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610539565b6001600160a01b0382165f9081526020819052604090205481811015610e155760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610539565b6001600160a01b0383165f908152602081905260408120838303905560028054849290610e439084906112ec565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b610e95610c1e565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c013390565b610ed48282610662565b61054c57610eec816001600160a01b03166014610f77565b610ef7836020610f77565b604051602001610f089291906112ff565b60408051601f198184030181529082905262461bcd60e51b82526105399160040161115d565b60065460ff16610c645760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610539565b60605f610f85836002611373565b610f909060026112d9565b67ffffffffffffffff811115610fa857610fa861138a565b6040519080825280601f01601f191660200182016040528015610fd2576020820181803683370190505b509050600360fc1b815f81518110610fec57610fec61139e565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061101a5761101a61139e565b60200101906001600160f81b03191690815f1a9053505f61103c846002611373565b6110479060016112d9565b90505b60018111156110be576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061107b5761107b61139e565b1a60f81b8282815181106110915761109161139e565b60200101906001600160f81b03191690815f1a90535060049490941c936110b7816113b2565b905061104a565b50831561110d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610539565b9392505050565b5f60208284031215611124575f80fd5b81356001600160e01b03198116811461110d575f80fd5b5f5b8381101561115557818101518382015260200161113d565b50505f910152565b602081525f825180602084015261117b81604085016020870161113b565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146111a5575f80fd5b919050565b5f80604083850312156111bb575f80fd5b6111c48361118f565b946020939093013593505050565b5f805f606084860312156111e4575f80fd5b6111ed8461118f565b92506111fb6020850161118f565b9150604084013590509250925092565b5f6020828403121561121b575f80fd5b5035919050565b5f8060408385031215611233575f80fd5b823591506112436020840161118f565b90509250929050565b5f6020828403121561125c575f80fd5b61110d8261118f565b5f8060408385031215611276575f80fd5b61127f8361118f565b91506112436020840161118f565b600181811c908216806112a157607f821691505b6020821081036112bf57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156103d4576103d46112c5565b818103818111156103d4576103d46112c5565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161133681601785016020880161113b565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161136781602884016020880161113b565b01602801949350505050565b80820281158282048414176103d4576103d46112c5565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f816113c0576113c06112c5565b505f19019056fea2646970667358221220cec0465279bd2cd96cebf6de8a0a09a0963196f26dfd27f9a774e00cf578ba5c64736f6c63430008140033", +} + +// ETHXABI is the input ABI used to generate the binding from. +// Deprecated: Use ETHXMetaData.ABI instead. +var ETHXABI = ETHXMetaData.ABI + +// ETHXBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ETHXMetaData.Bin instead. +var ETHXBin = ETHXMetaData.Bin + +// DeployETHX deploys a new Ethereum contract, binding an instance of ETHX to it. +func DeployETHX(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ETHX, error) { + parsed, err := ETHXMetaData.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(ETHXBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, ÐX{ETHXCaller: ETHXCaller{contract: contract}, ETHXTransactor: ETHXTransactor{contract: contract}, ETHXFilterer: ETHXFilterer{contract: contract}}, nil +} + +// ETHX is an auto generated Go binding around an Ethereum contract. +type ETHX struct { + ETHXCaller // Read-only binding to the contract + ETHXTransactor // Write-only binding to the contract + ETHXFilterer // Log filterer for contract events +} + +// ETHXCaller is an auto generated read-only Go binding around an Ethereum contract. +type ETHXCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ETHXTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ETHXTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ETHXFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ETHXFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ETHXSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ETHXSession struct { + Contract *ETHX // 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 +} + +// ETHXCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ETHXCallerSession struct { + Contract *ETHXCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ETHXTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ETHXTransactorSession struct { + Contract *ETHXTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ETHXRaw is an auto generated low-level Go binding around an Ethereum contract. +type ETHXRaw struct { + Contract *ETHX // Generic contract binding to access the raw methods on +} + +// ETHXCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ETHXCallerRaw struct { + Contract *ETHXCaller // Generic read-only contract binding to access the raw methods on +} + +// ETHXTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ETHXTransactorRaw struct { + Contract *ETHXTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewETHX creates a new instance of ETHX, bound to a specific deployed contract. +func NewETHX(address common.Address, backend bind.ContractBackend) (*ETHX, error) { + contract, err := bindETHX(address, backend, backend, backend) + if err != nil { + return nil, err + } + return ÐX{ETHXCaller: ETHXCaller{contract: contract}, ETHXTransactor: ETHXTransactor{contract: contract}, ETHXFilterer: ETHXFilterer{contract: contract}}, nil +} + +// NewETHXCaller creates a new read-only instance of ETHX, bound to a specific deployed contract. +func NewETHXCaller(address common.Address, caller bind.ContractCaller) (*ETHXCaller, error) { + contract, err := bindETHX(address, caller, nil, nil) + if err != nil { + return nil, err + } + return ÐXCaller{contract: contract}, nil +} + +// NewETHXTransactor creates a new write-only instance of ETHX, bound to a specific deployed contract. +func NewETHXTransactor(address common.Address, transactor bind.ContractTransactor) (*ETHXTransactor, error) { + contract, err := bindETHX(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return ÐXTransactor{contract: contract}, nil +} + +// NewETHXFilterer creates a new log filterer instance of ETHX, bound to a specific deployed contract. +func NewETHXFilterer(address common.Address, filterer bind.ContractFilterer) (*ETHXFilterer, error) { + contract, err := bindETHX(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return ÐXFilterer{contract: contract}, nil +} + +// bindETHX binds a generic wrapper to an already deployed contract. +func bindETHX(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ETHXMetaData.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 (_ETHX *ETHXRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ETHX.Contract.ETHXCaller.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 (_ETHX *ETHXRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ETHX.Contract.ETHXTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ETHX *ETHXRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ETHX.Contract.ETHXTransactor.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 (_ETHX *ETHXCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ETHX.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 (_ETHX *ETHXTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ETHX.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ETHX *ETHXTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ETHX.Contract.contract.Transact(opts, method, params...) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ETHX *ETHXCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ETHX.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ETHX *ETHXSession) DEFAULTADMINROLE() ([32]byte, error) { + return _ETHX.Contract.DEFAULTADMINROLE(&_ETHX.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ETHX *ETHXCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _ETHX.Contract.DEFAULTADMINROLE(&_ETHX.CallOpts) +} + +// MINTERROLE is a free data retrieval call binding the contract method 0xd5391393. +// +// Solidity: function MINTER_ROLE() view returns(bytes32) +func (_ETHX *ETHXCaller) MINTERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ETHX.contract.Call(opts, &out, "MINTER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MINTERROLE is a free data retrieval call binding the contract method 0xd5391393. +// +// Solidity: function MINTER_ROLE() view returns(bytes32) +func (_ETHX *ETHXSession) MINTERROLE() ([32]byte, error) { + return _ETHX.Contract.MINTERROLE(&_ETHX.CallOpts) +} + +// MINTERROLE is a free data retrieval call binding the contract method 0xd5391393. +// +// Solidity: function MINTER_ROLE() view returns(bytes32) +func (_ETHX *ETHXCallerSession) MINTERROLE() ([32]byte, error) { + return _ETHX.Contract.MINTERROLE(&_ETHX.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ETHX *ETHXCaller) PAUSERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ETHX.contract.Call(opts, &out, "PAUSER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ETHX *ETHXSession) PAUSERROLE() ([32]byte, error) { + return _ETHX.Contract.PAUSERROLE(&_ETHX.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ETHX *ETHXCallerSession) PAUSERROLE() ([32]byte, error) { + return _ETHX.Contract.PAUSERROLE(&_ETHX.CallOpts) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_ETHX *ETHXCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var out []interface{} + err := _ETHX.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 (_ETHX *ETHXSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _ETHX.Contract.Allowance(&_ETHX.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 (_ETHX *ETHXCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _ETHX.Contract.Allowance(&_ETHX.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_ETHX *ETHXCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _ETHX.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 (_ETHX *ETHXSession) BalanceOf(account common.Address) (*big.Int, error) { + return _ETHX.Contract.BalanceOf(&_ETHX.CallOpts, account) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_ETHX *ETHXCallerSession) BalanceOf(account common.Address) (*big.Int, error) { + return _ETHX.Contract.BalanceOf(&_ETHX.CallOpts, account) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_ETHX *ETHXCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _ETHX.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 (_ETHX *ETHXSession) Decimals() (uint8, error) { + return _ETHX.Contract.Decimals(&_ETHX.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_ETHX *ETHXCallerSession) Decimals() (uint8, error) { + return _ETHX.Contract.Decimals(&_ETHX.CallOpts) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ETHX *ETHXCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _ETHX.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ETHX *ETHXSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _ETHX.Contract.GetRoleAdmin(&_ETHX.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ETHX *ETHXCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _ETHX.Contract.GetRoleAdmin(&_ETHX.CallOpts, role) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ETHX *ETHXCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _ETHX.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ETHX *ETHXSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _ETHX.Contract.HasRole(&_ETHX.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ETHX *ETHXCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _ETHX.Contract.HasRole(&_ETHX.CallOpts, role, account) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_ETHX *ETHXCaller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ETHX.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 (_ETHX *ETHXSession) Name() (string, error) { + return _ETHX.Contract.Name(&_ETHX.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_ETHX *ETHXCallerSession) Name() (string, error) { + return _ETHX.Contract.Name(&_ETHX.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_ETHX *ETHXCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ETHX.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 (_ETHX *ETHXSession) Paused() (bool, error) { + return _ETHX.Contract.Paused(&_ETHX.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_ETHX *ETHXCallerSession) Paused() (bool, error) { + return _ETHX.Contract.Paused(&_ETHX.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ETHX *ETHXCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _ETHX.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 (_ETHX *ETHXSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _ETHX.Contract.SupportsInterface(&_ETHX.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ETHX *ETHXCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _ETHX.Contract.SupportsInterface(&_ETHX.CallOpts, interfaceId) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_ETHX *ETHXCaller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ETHX.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 (_ETHX *ETHXSession) Symbol() (string, error) { + return _ETHX.Contract.Symbol(&_ETHX.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_ETHX *ETHXCallerSession) Symbol() (string, error) { + return _ETHX.Contract.Symbol(&_ETHX.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_ETHX *ETHXCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ETHX.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 (_ETHX *ETHXSession) TotalSupply() (*big.Int, error) { + return _ETHX.Contract.TotalSupply(&_ETHX.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_ETHX *ETHXCallerSession) TotalSupply() (*big.Int, error) { + return _ETHX.Contract.TotalSupply(&_ETHX.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_ETHX *ETHXTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.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 (_ETHX *ETHXSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.Approve(&_ETHX.TransactOpts, spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_ETHX *ETHXTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.Approve(&_ETHX.TransactOpts, spender, amount) +} + +// Burn is a paid mutator transaction binding the contract method 0x42966c68. +// +// Solidity: function burn(uint256 amount) returns() +func (_ETHX *ETHXTransactor) Burn(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { + return _ETHX.contract.Transact(opts, "burn", amount) +} + +// Burn is a paid mutator transaction binding the contract method 0x42966c68. +// +// Solidity: function burn(uint256 amount) returns() +func (_ETHX *ETHXSession) Burn(amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.Burn(&_ETHX.TransactOpts, amount) +} + +// Burn is a paid mutator transaction binding the contract method 0x42966c68. +// +// Solidity: function burn(uint256 amount) returns() +func (_ETHX *ETHXTransactorSession) Burn(amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.Burn(&_ETHX.TransactOpts, amount) +} + +// BurnFrom is a paid mutator transaction binding the contract method 0x79cc6790. +// +// Solidity: function burnFrom(address account, uint256 amount) returns() +func (_ETHX *ETHXTransactor) BurnFrom(opts *bind.TransactOpts, account common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.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 (_ETHX *ETHXSession) BurnFrom(account common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.BurnFrom(&_ETHX.TransactOpts, account, amount) +} + +// BurnFrom is a paid mutator transaction binding the contract method 0x79cc6790. +// +// Solidity: function burnFrom(address account, uint256 amount) returns() +func (_ETHX *ETHXTransactorSession) BurnFrom(account common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.BurnFrom(&_ETHX.TransactOpts, account, amount) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_ETHX *ETHXTransactor) DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _ETHX.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 (_ETHX *ETHXSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.DecreaseAllowance(&_ETHX.TransactOpts, spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_ETHX *ETHXTransactorSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.DecreaseAllowance(&_ETHX.TransactOpts, spender, subtractedValue) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ETHX *ETHXTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ETHX *ETHXSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.Contract.GrantRole(&_ETHX.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ETHX *ETHXTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.Contract.GrantRole(&_ETHX.TransactOpts, role, account) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_ETHX *ETHXTransactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _ETHX.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 (_ETHX *ETHXSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.IncreaseAllowance(&_ETHX.TransactOpts, spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_ETHX *ETHXTransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.IncreaseAllowance(&_ETHX.TransactOpts, spender, addedValue) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address to, uint256 amount) returns() +func (_ETHX *ETHXTransactor) Mint(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.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 (_ETHX *ETHXSession) Mint(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.Mint(&_ETHX.TransactOpts, to, amount) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address to, uint256 amount) returns() +func (_ETHX *ETHXTransactorSession) Mint(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.Mint(&_ETHX.TransactOpts, to, amount) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ETHX *ETHXTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ETHX.contract.Transact(opts, "pause") +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ETHX *ETHXSession) Pause() (*types.Transaction, error) { + return _ETHX.Contract.Pause(&_ETHX.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ETHX *ETHXTransactorSession) Pause() (*types.Transaction, error) { + return _ETHX.Contract.Pause(&_ETHX.TransactOpts) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_ETHX *ETHXTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.contract.Transact(opts, "renounceRole", role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_ETHX *ETHXSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.Contract.RenounceRole(&_ETHX.TransactOpts, role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_ETHX *ETHXTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.Contract.RenounceRole(&_ETHX.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ETHX *ETHXTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ETHX *ETHXSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.Contract.RevokeRole(&_ETHX.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ETHX *ETHXTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.Contract.RevokeRole(&_ETHX.TransactOpts, role, account) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_ETHX *ETHXTransactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.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 (_ETHX *ETHXSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.Transfer(&_ETHX.TransactOpts, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_ETHX *ETHXTransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.Transfer(&_ETHX.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 (_ETHX *ETHXTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.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 (_ETHX *ETHXSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.TransferFrom(&_ETHX.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 (_ETHX *ETHXTransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.TransferFrom(&_ETHX.TransactOpts, from, to, amount) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ETHX *ETHXTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ETHX.contract.Transact(opts, "unpause") +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ETHX *ETHXSession) Unpause() (*types.Transaction, error) { + return _ETHX.Contract.Unpause(&_ETHX.TransactOpts) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ETHX *ETHXTransactorSession) Unpause() (*types.Transaction, error) { + return _ETHX.Contract.Unpause(&_ETHX.TransactOpts) +} + +// ETHXApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ETHX contract. +type ETHXApprovalIterator struct { + Event *ETHXApproval // 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 *ETHXApprovalIterator) 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(ETHXApproval) + if err := 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(ETHXApproval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXApproval represents a Approval event raised by the ETHX contract. +type ETHXApproval 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 (_ETHX *ETHXFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*ETHXApprovalIterator, 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 := _ETHX.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return ÐXApprovalIterator{contract: _ETHX.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 (_ETHX *ETHXFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ETHXApproval, 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 := _ETHX.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(ETHXApproval) + if err := _ETHX.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 (_ETHX *ETHXFilterer) ParseApproval(log types.Log) (*ETHXApproval, error) { + event := new(ETHXApproval) + if err := _ETHX.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ETHXPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ETHX contract. +type ETHXPausedIterator struct { + Event *ETHXPaused // 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 *ETHXPausedIterator) 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(ETHXPaused) + if err := 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(ETHXPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXPaused represents a Paused event raised by the ETHX contract. +type ETHXPaused 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 (_ETHX *ETHXFilterer) FilterPaused(opts *bind.FilterOpts) (*ETHXPausedIterator, error) { + + logs, sub, err := _ETHX.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return ÐXPausedIterator{contract: _ETHX.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 (_ETHX *ETHXFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *ETHXPaused) (event.Subscription, error) { + + logs, sub, err := _ETHX.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(ETHXPaused) + if err := _ETHX.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 (_ETHX *ETHXFilterer) ParsePaused(log types.Log) (*ETHXPaused, error) { + event := new(ETHXPaused) + if err := _ETHX.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ETHXRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the ETHX contract. +type ETHXRoleAdminChangedIterator struct { + Event *ETHXRoleAdminChanged // 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 *ETHXRoleAdminChangedIterator) 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(ETHXRoleAdminChanged) + if err := 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(ETHXRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXRoleAdminChanged represents a RoleAdminChanged event raised by the ETHX contract. +type ETHXRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ETHX *ETHXFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*ETHXRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _ETHX.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return ÐXRoleAdminChangedIterator{contract: _ETHX.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ETHX *ETHXFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *ETHXRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _ETHX.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(ETHXRoleAdminChanged) + if err := _ETHX.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ETHX *ETHXFilterer) ParseRoleAdminChanged(log types.Log) (*ETHXRoleAdminChanged, error) { + event := new(ETHXRoleAdminChanged) + if err := _ETHX.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ETHXRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the ETHX contract. +type ETHXRoleGrantedIterator struct { + Event *ETHXRoleGranted // 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 *ETHXRoleGrantedIterator) 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(ETHXRoleGranted) + if err := 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(ETHXRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXRoleGranted represents a RoleGranted event raised by the ETHX contract. +type ETHXRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ETHX *ETHXFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ETHXRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ETHX.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return ÐXRoleGrantedIterator{contract: _ETHX.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ETHX *ETHXFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *ETHXRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ETHX.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, 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(ETHXRoleGranted) + if err := _ETHX.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ETHX *ETHXFilterer) ParseRoleGranted(log types.Log) (*ETHXRoleGranted, error) { + event := new(ETHXRoleGranted) + if err := _ETHX.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ETHXRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the ETHX contract. +type ETHXRoleRevokedIterator struct { + Event *ETHXRoleRevoked // 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 *ETHXRoleRevokedIterator) 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(ETHXRoleRevoked) + if err := 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(ETHXRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXRoleRevoked represents a RoleRevoked event raised by the ETHX contract. +type ETHXRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ETHX *ETHXFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ETHXRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ETHX.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return ÐXRoleRevokedIterator{contract: _ETHX.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ETHX *ETHXFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *ETHXRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ETHX.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, 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(ETHXRoleRevoked) + if err := _ETHX.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ETHX *ETHXFilterer) ParseRoleRevoked(log types.Log) (*ETHXRoleRevoked, error) { + event := new(ETHXRoleRevoked) + if err := _ETHX.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ETHXTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ETHX contract. +type ETHXTransferIterator struct { + Event *ETHXTransfer // 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 *ETHXTransferIterator) 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(ETHXTransfer) + if err := 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(ETHXTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXTransfer represents a Transfer event raised by the ETHX contract. +type ETHXTransfer 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 (_ETHX *ETHXFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ETHXTransferIterator, 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 := _ETHX.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return ÐXTransferIterator{contract: _ETHX.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 (_ETHX *ETHXFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ETHXTransfer, 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 := _ETHX.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(ETHXTransfer) + if err := _ETHX.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 (_ETHX *ETHXFilterer) ParseTransfer(log types.Log) (*ETHXTransfer, error) { + event := new(ETHXTransfer) + if err := _ETHX.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ETHXUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the ETHX contract. +type ETHXUnpausedIterator struct { + Event *ETHXUnpaused // 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 *ETHXUnpausedIterator) 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(ETHXUnpaused) + if err := 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(ETHXUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXUnpaused represents a Unpaused event raised by the ETHX contract. +type ETHXUnpaused 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 (_ETHX *ETHXFilterer) FilterUnpaused(opts *bind.FilterOpts) (*ETHXUnpausedIterator, error) { + + logs, sub, err := _ETHX.contract.FilterLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return ÐXUnpausedIterator{contract: _ETHX.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 (_ETHX *ETHXFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ETHXUnpaused) (event.Subscription, error) { + + logs, sub, err := _ETHX.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(ETHXUnpaused) + if err := _ETHX.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 (_ETHX *ETHXFilterer) ParseUnpaused(log types.Log) (*ETHXUnpaused, error) { + event := new(ETHXUnpaused) + if err := _ETHX.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/testing/config_test.go b/testing/config_test.go new file mode 100644 index 000000000..8c3cea866 --- /dev/null +++ b/testing/config_test.go @@ -0,0 +1,227 @@ +package testing + +import ( + "context" + "fmt" + "time" + + "github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context" + "github.com/sirupsen/logrus" + "github.com/stader-labs/stader-node/shared/services/stader" + cfgtypes "github.com/stader-labs/stader-node/shared/types/config" + "github.com/stader-labs/stader-node/stader/api" + "github.com/stader-labs/stader-node/stader/node" + "github.com/stretchr/testify/assert" + "github.com/urfave/cli" + + "github.com/stader-labs/stader-node/shared/services/config" +) + +const ( + enclaveIdPrefix = "stader" + + remotePackage = "github.com/kurtosis-tech/eth-network-package" + + noDryRun = false + + emptyPackageParams = "{}" + clClientBeacon = "cl-client-0-beacon" + clClientValidator = "cl-client-0-validator" + elCient = "el-client-0" + + contentType = "application/json" + + useDefaultMainFile = "" + useDefaultFunctionName = "" + + emptyParams = "{}" + isPartitioningEnabled = false + emptyRunParams = "{}" + defaultDryRun = false + defaultParallelism = 4 +) + +var ( + ConfigPath = "/Users/batphonghan/.stader/user-settings.yml" +) +var cf = []byte(`{ + "participants": [ + { + "el_client_type": "geth", + "el_client_image": "ethereum/client-go:v1.11.5", + "el_client_log_level": "", + "cl_client_type": "lighthouse", + "cl_client_image": "sigp/lighthouse:v3.5.0", + "cl_client_log_level": "", + "beacon_extra_params": [], + "el_extra_params": ["--http"], + "validator_extra_params": [], + "builder_network_params": null + } + ], + "network_params": { + "preregistered_validator_keys_mnemonic": "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete", + "num_validator_keys_per_node": 40, + "network_id": "3151908", + "deposit_contract_address": "0x4242424242424242424242424242424242424242", + "seconds_per_slot": 2, + "genesis_delay": 120, + "capella_fork_epoch": 5 + } +}`) + +func newApp() *cli.App { + + app := cli.NewApp() + + // Set application flags + app.Flags = []cli.Flag{ + cli.StringFlag{ + Name: "settings, s", + Usage: "Stader service user config absolute `path`", + Value: ConfigPath, + }, + cli.StringFlag{ + Name: "password, p", + Usage: "Stader wallet password file absolute `path`", + }, + cli.StringFlag{ + Name: "wallet, w", + Usage: "Stader wallet file absolute `path`", + }, + cli.StringFlag{ + Name: "validatorKeychain, k", + Usage: "Stader validator keychain absolute `path`", + }, + cli.StringFlag{ + Name: "eth1Provider, e", + Usage: "Eth 1.0 provider `address`", + }, + cli.StringFlag{ + Name: "eth2Provider, b", + Usage: "Eth 2.0 provider `address`", + }, + cli.Float64Flag{ + Name: "maxFee", + Usage: "Desired max fee in gwei", + }, + cli.Float64Flag{ + Name: "maxPrioFee", + Usage: "Desired max priority fee in gwei", + }, + cli.Uint64Flag{ + Name: "gasLimit, l", + Usage: "Desired gas limit", + }, + cli.StringFlag{ + Name: "nonce", + Usage: "Use this flag to explicitly specify the nonce that this transaction should use, so it can override an existing 'stuck' transaction", + }, + cli.StringFlag{ + Name: "metricsAddress, m", + Usage: "Address to serve metrics on if enabled", + Value: "0.0.0.0", + }, + cli.UintFlag{ + Name: "metricsPort, r", + Usage: "Port to serve metrics on if enabled", + Value: 9102, + }, + cli.BoolFlag{ + Name: "ignore-sync-check", + Usage: "Set this to true if you already checked the sync status of the execution client(s) and don't need to re-check it for this command", + }, + cli.BoolFlag{ + Name: "force-fallbacks", + Usage: "Set this to true if you know the primary EC or CC is offline and want to bypass its health checks, and just use the fallback EC and CC instead", + }, + } + + // Register commands + api.RegisterCommands(app, "api", []string{"a"}) + node.RegisterCommands(app, "node", []string{"n"}) + return app +} +func (s *StaderNodeSuite) setConfig(c *cli.Context, elURL string, clURL string) { + cfg := config.NewStaderConfig(ConfigPath, false) + + staderClient, err := stader.NewClientFromCtx(c) + assert.Nil(s.T(), err) + defer staderClient.Close() + + cfg.ExecutionClientMode.Value = cfgtypes.Mode_External + cfg.ExternalExecution.HttpUrl.Value = elURL + + cfg.ExternalConsensusClient.Value = cfgtypes.ConsensusClient_Lighthouse + cfg.ConsensusClientMode.Value = cfgtypes.Mode_External + cfg.ExternalLighthouse.HttpUrl.Value = clURL + + err = staderClient.SaveConfig(cfg) + assert.Nil(s.T(), err) +} + +func (s *StaderNodeSuite) staderConfig(ctx context.Context, cliCtx *cli.Context) { + t := s.T() + + logrus.Info("------------ CONNECTING TO KURTOSIS ENGINE ---------------") + kurtosis_context.NewKurtosisContextFromLocalEngine() + kurtosisCtx, err := kurtosis_context.NewKurtosisContextFromLocalEngine() + assert.NoError(t, err, "An error occurred connecting to the Kurtosis engine") + + enclaveId := fmt.Sprintf("%s-%d", enclaveIdPrefix, time.Now().Unix()) + + enclaveCtx, err := kurtosisCtx.CreateEnclave(ctx, enclaveId, isPartitioningEnabled) + + s.kurtosisCtx = kurtosisCtx + s.enclaveId = enclaveId + assert.NoError(t, err, "An error occurred creating the enclave") + + logrus.Info("------------ EXECUTING PACKAGE ---------------") + + starlarkRunResult, err := enclaveCtx.RunStarlarkRemotePackageBlocking(ctx, remotePackage, useDefaultMainFile, useDefaultFunctionName, emptyParams, defaultDryRun, defaultParallelism) + + assert.NoError(t, err, "An error executing loading the package") + assert.Nil(t, starlarkRunResult.InterpretationError) + assert.Empty(t, starlarkRunResult.ValidationErrors) + assert.Nil(t, starlarkRunResult.ExecutionError) + + logrus.Info("------------ EXECUTING TESTS ---------------") + beaconContext, err := enclaveCtx.GetServiceContext(clClientBeacon) + assert.Nil(t, err) + apiServicePublicPorts := beaconContext.GetPublicPorts() + assert.NotNil(t, apiServicePublicPorts) + apiServiceHttpPortSpec, found := apiServicePublicPorts["http"] + assert.True(t, found) + beaconchainPort := apiServiceHttpPortSpec.GetNumber() + + fmt.Printf("%+v", beaconchainPort) + + validatorContext, err := enclaveCtx.GetServiceContext(clClientValidator) + assert.Nil(t, err) + apiServicePublicPorts = validatorContext.GetPublicPorts() + assert.NotNil(t, apiServicePublicPorts) + apiServiceHttpPortSpec, found = apiServicePublicPorts["http"] + assert.True(t, found) + beaconchainPort = apiServiceHttpPortSpec.GetNumber() + + fmt.Printf("%+v", beaconchainPort) + + elContext, err := enclaveCtx.GetServiceContext(elCient) + assert.Nil(t, err) + elPublicPorts := elContext.GetPublicPorts() + assert.NotNil(t, apiServicePublicPorts) + apiServiceHttpPortSpec, found = elPublicPorts["rpc"] + assert.True(t, found) + elPort := apiServiceHttpPortSpec.GetNumber() + + elUrl := fmt.Sprintf("http://127.0.0.1:%+v", elPort) + s.setConfig(cliCtx, fmt.Sprintf("http://127.0.0.1:%+v", beaconchainPort), elUrl) + + deployContracts(elUrl) +} + +/* + Api contract from 0x878705ba3f8Bc32FCf7F4CAa1A35E72AF65CF766 +Api contract deployed to 0xAb2A01BC351770D09611Ac80f1DE076D56E0487d +Tx: 0xcc52c30d4d4ea67654b23beda69696485ca60577db8c2482adad82eedd199bf5 +*/ diff --git a/testing/deploy.go b/testing/deploy.go new file mode 100644 index 000000000..3b717ac7e --- /dev/null +++ b/testing/deploy.go @@ -0,0 +1,114 @@ +package testing + +import ( + "context" + "crypto/ecdsa" + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethclient" + api "github.com/stader-labs/stader-node/stader-lib/api" +) + +var PRE_FUNDED_ACCOUNTS = "ef5177cd0b6b21c87db5a0bf35d4084a8a57a9d6a064f86d51ac85f2b873a4e2" + +func deployContracts(eth1URL string) { + client, err := ethclient.Dial(eth1URL) + if err != nil { + panic(err) + } + + // private key of the deployer + privateKey, err := crypto.HexToECDSA(PRE_FUNDED_ACCOUNTS) + if err != nil { + panic(err) + } + + // extract public key of the deployer from private key + publicKey := privateKey.Public() + publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey) + if !ok { + panic("cannot assert type: publicKey is not of type *ecdsa.PublicKey") + } + + // address of the deployer + fromAddress := crypto.PubkeyToAddress(*publicKeyECDSA) + + // chain id of the network + chainID, err := client.NetworkID(context.Background()) + if err != nil { + panic(err) + } + + fmt.Printf("FROM: %+v \n ", fromAddress.Hex()) + // Get Transaction Ops to make a valid Ethereum transaction + auth, err := GetNextTransaction(client, fromAddress, privateKey, chainID) + if err != nil { + panic(err) + } + + // deploy the contract + address, tx, _, err := api.DeployETHX(auth, client) + if err != nil { + panic(err) + } + + fmt.Printf("Api contract from %s\n", auth.From.Hex()) + fmt.Printf("Api contract deployed to %s\n", address.Hex()) + fmt.Printf("Tx: %s\n", tx.Hash().Hex()) + + // // Get Favorite Number + // // Call SimpleStorage contract Retrieve function to get current favorite number + // favoriteNumber, err := simpleStorageApi.Retrieve(&bind.CallOpts{}) + // if err != nil { + // panic(err) + // } + // fmt.Printf("Favorite Number: %d\n", favoriteNumber) + + // // Set Favorite Number + // // Get Transaction Ops to make a valid Ethereum transaction + // auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + // if err != nil { + // panic(err) + // } + + // // Call SimpleStorate Store function to store favorite number + // reply, err := simpleStorageApi.Store(auth, big.NewInt(20)) + // if err != nil { + // panic(err) + // } + // fmt.Printf("Reply: %s\n", reply.Hash().Hex()) + + // // Get Favorite Number + // // P.S. Retrieve is a Gas Free function hence no need to get Transaction Ops + // newfavoriteNumber, err := simpleStorageApi.Retrieve(&bind.CallOpts{}) + // if err != nil { + // panic(err) + // } + // fmt.Printf("Favorite Number: %d\n", newfavoriteNumber) +} + +// GetNextTransaction returns the next transaction in the pending transaction queue +// NOTE: this is not an optimized way +func GetNextTransaction(client *ethclient.Client, fromAddress common.Address, privateKey *ecdsa.PrivateKey, chainID *big.Int) (*bind.TransactOpts, error) { + // nonce + nonce, err := client.PendingNonceAt(context.Background(), fromAddress) + if err != nil { + return nil, err + } + + // sign the transaction + auth, err := bind.NewKeyedTransactorWithChainID(privateKey, chainID) + if err != nil { + return nil, err + } + auth.Nonce = big.NewInt(int64(nonce)) + auth.Value = big.NewInt(0) // in wei + auth.GasLimit = uint64(3000000) // in units + auth.GasPrice = big.NewInt(1000000000) // in wei + + return auth, nil +} diff --git a/testing/node_test.go b/testing/node_test.go new file mode 100644 index 000000000..22eb7e694 --- /dev/null +++ b/testing/node_test.go @@ -0,0 +1,64 @@ +package testing + +import ( + "context" + "flag" + "fmt" + "log" + "os" + "testing" + "time" + + // store "github.com/stader-labs/stader-node/stader-lib/contracts" + "github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context" + "github.com/stretchr/testify/suite" + "github.com/urfave/cli" +) + +type StaderNodeSuite struct { + suite.Suite + kurtosisCtx *kurtosis_context.KurtosisContext + enclaveId string +} + +func TestNodeSuite(t *testing.T) { + suite.Run(t, new(StaderNodeSuite)) +} + +func (s *StaderNodeSuite) TestExample1() { + time.Sleep(time.Minute) + s.Equal(true, true) +} + +// run once, before test suite methods +func (s *StaderNodeSuite) SetupSuite() { + ctx, cancelCtxFunc := context.WithCancel(context.Background()) + defer cancelCtxFunc() + + log.Println("SetupSuite()") + + app := newApp() + + cliCtx := cli.NewContext(app, flag.NewFlagSet("node_testing", flag.PanicOnError), nil) + s.staderConfig(ctx, cliCtx) + // Run application + go func() { + a := os.Args + if err := app.Run([]string{ + a[0], + "node", + }); err != nil { + fmt.Printf("ERROR RUN NODE %+v", err) + } + }() + + log.Println("Done SetupSuite()") + // connect the database, save to 's.db' +} + +// run once, after test suite methods +func (s *StaderNodeSuite) TearDownSuite() { + log.Println("TearDown StaderNodeSuite") + + defer s.kurtosisCtx.DestroyEnclave(context.Background(), s.enclaveId) +} diff --git a/testing/setup_test.go b/testing/setup_test.go deleted file mode 100644 index 4ddefaf9d..000000000 --- a/testing/setup_test.go +++ /dev/null @@ -1,98 +0,0 @@ -package testing - -import ( - "log" - "os" - "testing" - "time" - - "github.com/stader-labs/stader-node/stader/api" - "github.com/stader-labs/stader-node/stader/node" - "github.com/stretchr/testify/suite" - "github.com/urfave/cli" -) - -// Define the suite, and absorb the built-in basic suite -// functionality from testify - including a T() method which -// returns the current testing context -type ExampleTestSuite struct { - suite.Suite - VariableThatShouldStartAtFive int -} - -// Make sure that VariableThatShouldStartAtFive is set to five -// before each test -// func (suite *ExampleTestSuite) SetupSuite() { -// // Initialise application - -// } - -type MyTestSuite struct { - suite.Suite -} - -// listen for 'go test' command --> run test methods -func TestMyTestSuite(t *testing.T) { - suite.Run(t, new(MyTestSuite)) -} - -// run once, before test suite methods -func (s *MyTestSuite) SetupSuite() { - log.Println("SetupSuite()") - - app := cli.NewApp() - // Register commands - api.RegisterCommands(app, "api", []string{"a"}) - node.RegisterCommands(app, "node", []string{"n"}) - - // Run application - go func() { - a := os.Args - if err := app.Run([]string{ - a[0], - "--settings=/Users/batphonghan/.stader/user-settings.yml", - "node", - }); err != nil { - panic(err) - } - }() - - log.Println("Done SetupSuite()") - // connect the database, save to 's.db' -} - -// run once, after test suite methods -func (s *MyTestSuite) TearDownSuite() { - log.Println("TearDownSuite()") - - // delete the created database -} - -// run before each test -func (s *MyTestSuite) SetupTest() { - log.Println("SetupTest()") -} - -// run after each test -func (s *MyTestSuite) TearDownTest() { - log.Println("TearDownTest()") -} - -// run before each test -func (s *MyTestSuite) BeforeTest(suiteName, testName string) { - log.Println("BeforeTest()", suiteName, testName) -} - -// run after each test -func (s *MyTestSuite) AfterTest(suiteName, testName string) { - log.Println("AfterTest()", suiteName, testName) -} - -func (s *MyTestSuite) TestExample1() { - time.Sleep(time.Minute) - s.Equal(true, true) -} - -func (s *MyTestSuite) TestExample2() { - s.Equal(true, true) -} From 4a87715c48956f43b895c69ccd8e74e5e087fc36 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 13 Jun 2023 20:31:12 +0700 Subject: [PATCH 03/90] Fix path not corect --- shared/services/gas/gas.go | 2 +- shared/services/services.go | 5 +++-- testing/config_test.go | 16 ++++++++++++---- testing/node_test.go | 13 +++++++------ 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/shared/services/gas/gas.go b/shared/services/gas/gas.go index 99897f852..e9bf58a8a 100644 --- a/shared/services/gas/gas.go +++ b/shared/services/gas/gas.go @@ -220,7 +220,7 @@ func handleEtherchainGasPrices(gasSuggestion etherchain.GasFeeSuggestion, gasInf desiredPriceFloat, err := strconv.ParseFloat(desiredPrice, 64) if err != nil { - fmt.Println("Not a valid gas price (%s), try again.", err.Error()) + fmt.Printf("Not a valid gas price (%+v), try again. \n", err.Error()) continue } if desiredPriceFloat <= 0 { diff --git a/shared/services/services.go b/shared/services/services.go index 35d1d54a7..474accae3 100644 --- a/shared/services/services.go +++ b/shared/services/services.go @@ -21,12 +21,13 @@ package services import ( "fmt" - "github.com/ethereum/go-ethereum/common" - stader_config "github.com/stader-labs/stader-node/stader-lib/stader-config" "math/big" "os" "sync" + "github.com/ethereum/go-ethereum/common" + stader_config "github.com/stader-labs/stader-node/stader-lib/stader-config" + "github.com/docker/docker/client" "github.com/stader-labs/stader-node/stader-lib/stader" "github.com/stader-labs/stader-node/stader-lib/utils/eth" diff --git a/testing/config_test.go b/testing/config_test.go index 8c3cea866..1860567b1 100644 --- a/testing/config_test.go +++ b/testing/config_test.go @@ -7,6 +7,7 @@ import ( "github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context" "github.com/sirupsen/logrus" + "github.com/stader-labs/stader-node/shared/services" "github.com/stader-labs/stader-node/shared/services/stader" cfgtypes "github.com/stader-labs/stader-node/shared/types/config" "github.com/stader-labs/stader-node/stader/api" @@ -42,7 +43,7 @@ const ( ) var ( - ConfigPath = "/Users/batphonghan/.stader/user-settings.yml" + ConfigPath = "/Users/batphonghan/.stader_testing/user-settings.yml" ) var cf = []byte(`{ "participants": [ @@ -77,7 +78,7 @@ func newApp() *cli.App { // Set application flags app.Flags = []cli.Flag{ cli.StringFlag{ - Name: "settings, s", + Name: "settings", Usage: "Stader service user config absolute `path`", Value: ConfigPath, }, @@ -160,7 +161,8 @@ func (s *StaderNodeSuite) setConfig(c *cli.Context, elURL string, clURL string) assert.Nil(s.T(), err) } -func (s *StaderNodeSuite) staderConfig(ctx context.Context, cliCtx *cli.Context) { +func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { + t := s.T() logrus.Info("------------ CONNECTING TO KURTOSIS ENGINE ---------------") @@ -215,9 +217,15 @@ func (s *StaderNodeSuite) staderConfig(ctx context.Context, cliCtx *cli.Context) elPort := apiServiceHttpPortSpec.GetNumber() elUrl := fmt.Sprintf("http://127.0.0.1:%+v", elPort) - s.setConfig(cliCtx, fmt.Sprintf("http://127.0.0.1:%+v", beaconchainPort), elUrl) + + s.setConfig(c, fmt.Sprintf("http://127.0.0.1:%+v", beaconchainPort), elUrl) deployContracts(elUrl) + + _, err = services.GetWallet(c) + + assert.Nil(s.T(), err) + } /* diff --git a/testing/node_test.go b/testing/node_test.go index 22eb7e694..52645a8ea 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -35,13 +35,15 @@ func (s *StaderNodeSuite) SetupSuite() { ctx, cancelCtxFunc := context.WithCancel(context.Background()) defer cancelCtxFunc() - log.Println("SetupSuite()") - app := newApp() - cliCtx := cli.NewContext(app, flag.NewFlagSet("node_testing", flag.PanicOnError), nil) - s.staderConfig(ctx, cliCtx) - // Run application + flagSet := flag.NewFlagSet("node_testing", flag.PanicOnError) + var p string + flagSet.StringVar(&p, "settings", ConfigPath, "settings") + c := cli.NewContext(app, flagSet, nil) + + s.staderConfig(ctx, c) + go func() { a := os.Args if err := app.Run([]string{ @@ -53,7 +55,6 @@ func (s *StaderNodeSuite) SetupSuite() { }() log.Println("Done SetupSuite()") - // connect the database, save to 's.db' } // run once, after test suite methods From 85acd4e98ed2d6b639accba22bb036d35e2cb814 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 13 Jun 2023 21:04:27 +0700 Subject: [PATCH 04/90] Fix config path --- shared/services/config/stadernode-config.go | 2 +- testing/config_test.go | 10 +++++++--- testing/node_test.go | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/shared/services/config/stadernode-config.go b/shared/services/config/stadernode-config.go index b0b9bb210..1ba23f525 100644 --- a/shared/services/config/stadernode-config.go +++ b/shared/services/config/stadernode-config.go @@ -430,7 +430,7 @@ func (cfg *StaderNodeConfig) GetSpRewardCyclePath(cycle int64, daemon bool) stri } func (cfg *StaderNodeConfig) GetFeeRecipientFilePath() string { - if !cfg.parent.IsNativeMode { + if cfg.parent != nil && cfg.parent.IsNativeMode { return filepath.Join(DaemonDataPath, "validators", FeeRecipientFilename) } diff --git a/testing/config_test.go b/testing/config_test.go index 1860567b1..67502c4b3 100644 --- a/testing/config_test.go +++ b/testing/config_test.go @@ -43,7 +43,8 @@ const ( ) var ( - ConfigPath = "/Users/batphonghan/.stader_testing/user-settings.yml" + UserSettingPath = fmt.Sprintf("%s/user-settings.yml", ConfigPath) + ConfigPath = "~/.stader_testing" ) var cf = []byte(`{ "participants": [ @@ -80,7 +81,7 @@ func newApp() *cli.App { cli.StringFlag{ Name: "settings", Usage: "Stader service user config absolute `path`", - Value: ConfigPath, + Value: UserSettingPath, }, cli.StringFlag{ Name: "password, p", @@ -144,9 +145,10 @@ func newApp() *cli.App { return app } func (s *StaderNodeSuite) setConfig(c *cli.Context, elURL string, clURL string) { - cfg := config.NewStaderConfig(ConfigPath, false) + cfg := config.NewStaderConfig(UserSettingPath, false) staderClient, err := stader.NewClientFromCtx(c) + staderClient.GetContractsInfo() assert.Nil(s.T(), err) defer staderClient.Close() @@ -157,6 +159,8 @@ func (s *StaderNodeSuite) setConfig(c *cli.Context, elURL string, clURL string) cfg.ConsensusClientMode.Value = cfgtypes.Mode_External cfg.ExternalLighthouse.HttpUrl.Value = clURL + cfg.StaderNode.DataPath.Value = ConfigPath + err = staderClient.SaveConfig(cfg) assert.Nil(s.T(), err) } diff --git a/testing/node_test.go b/testing/node_test.go index 52645a8ea..794f0802f 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -26,7 +26,7 @@ func TestNodeSuite(t *testing.T) { } func (s *StaderNodeSuite) TestExample1() { - time.Sleep(time.Minute) + time.Sleep(time.Second * 5) s.Equal(true, true) } @@ -39,7 +39,9 @@ func (s *StaderNodeSuite) SetupSuite() { flagSet := flag.NewFlagSet("node_testing", flag.PanicOnError) var p string - flagSet.StringVar(&p, "settings", ConfigPath, "settings") + flagSet.StringVar(&p, "settings", UserSettingPath, "settings") + var cp string + flagSet.StringVar(&cp, "config-path", ConfigPath, "config-path") c := cli.NewContext(app, flagSet, nil) s.staderConfig(ctx, c) From de669ea8da4653699d266267d188136fa0bad903 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 13 Jun 2023 22:01:13 +0700 Subject: [PATCH 05/90] Refactor --- testing/deploy.go | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/testing/deploy.go b/testing/deploy.go index 3b717ac7e..e09f202c4 100644 --- a/testing/deploy.go +++ b/testing/deploy.go @@ -60,35 +60,6 @@ func deployContracts(eth1URL string) { fmt.Printf("Api contract deployed to %s\n", address.Hex()) fmt.Printf("Tx: %s\n", tx.Hash().Hex()) - // // Get Favorite Number - // // Call SimpleStorage contract Retrieve function to get current favorite number - // favoriteNumber, err := simpleStorageApi.Retrieve(&bind.CallOpts{}) - // if err != nil { - // panic(err) - // } - // fmt.Printf("Favorite Number: %d\n", favoriteNumber) - - // // Set Favorite Number - // // Get Transaction Ops to make a valid Ethereum transaction - // auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) - // if err != nil { - // panic(err) - // } - - // // Call SimpleStorate Store function to store favorite number - // reply, err := simpleStorageApi.Store(auth, big.NewInt(20)) - // if err != nil { - // panic(err) - // } - // fmt.Printf("Reply: %s\n", reply.Hash().Hex()) - - // // Get Favorite Number - // // P.S. Retrieve is a Gas Free function hence no need to get Transaction Ops - // newfavoriteNumber, err := simpleStorageApi.Retrieve(&bind.CallOpts{}) - // if err != nil { - // panic(err) - // } - // fmt.Printf("Favorite Number: %d\n", newfavoriteNumber) } // GetNextTransaction returns the next transaction in the pending transaction queue From 500c589ef65afdb010a830d7c49e3d5eb074362a Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 13 Jun 2023 22:24:19 +0700 Subject: [PATCH 06/90] Add action --- .github/workflows/go_test.yml | 23 +++++++++++++++++++++++ install_kurtosis.sh | 5 +++++ 2 files changed, 28 insertions(+) create mode 100644 .github/workflows/go_test.yml create mode 100644 install_kurtosis.sh diff --git a/.github/workflows/go_test.yml b/.github/workflows/go_test.yml new file mode 100644 index 000000000..088c4679f --- /dev/null +++ b/.github/workflows/go_test.yml @@ -0,0 +1,23 @@ +name: Go +on: [push] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + + - name: Install and start kurtosis + run: | + ./install_kurtosis.sh + + + - uses: actions/checkout@v3 + - name: Setup Go + uses: actions/setup-go@v4 + with: + go-version: '1.19.x' + - name: Install dependencies + run: go get . + - name: Test with the Go CLI + run: go test ./... -v \ No newline at end of file diff --git a/install_kurtosis.sh b/install_kurtosis.sh new file mode 100644 index 000000000..da721f212 --- /dev/null +++ b/install_kurtosis.sh @@ -0,0 +1,5 @@ +echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list +sudo apt update +sudo apt install kurtosis-cli + +kurtosis engine start \ No newline at end of file From bf6fe5373dece6ec96590aec6f3240e7161ea016 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 13 Jun 2023 22:28:40 +0700 Subject: [PATCH 07/90] Update steps --- .github/workflows/go_test.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/go_test.yml b/.github/workflows/go_test.yml index 088c4679f..078d12361 100644 --- a/.github/workflows/go_test.yml +++ b/.github/workflows/go_test.yml @@ -9,7 +9,10 @@ jobs: - name: Install and start kurtosis run: | - ./install_kurtosis.sh + echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list + sudo apt update + sudo apt install kurtosis-cli + kurtosis engine restart - uses: actions/checkout@v3 From 59820dce18daa764a1dbf94db41cd27b4963c456 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 13 Jun 2023 22:30:54 +0700 Subject: [PATCH 08/90] Update go download --- .github/workflows/go_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/go_test.yml b/.github/workflows/go_test.yml index 078d12361..098c308c6 100644 --- a/.github/workflows/go_test.yml +++ b/.github/workflows/go_test.yml @@ -21,6 +21,6 @@ jobs: with: go-version: '1.19.x' - name: Install dependencies - run: go get . + run: go mod download all - name: Test with the Go CLI run: go test ./... -v \ No newline at end of file From 7965a80ec2baaf98546dc1a10a9abec1c8fce6a0 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 13 Jun 2023 23:30:59 +0700 Subject: [PATCH 09/90] Fix test failed --- .github/workflows/go_test.yml | 2 +- testing/config_test.go | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/.github/workflows/go_test.yml b/.github/workflows/go_test.yml index 098c308c6..2ed53e4b1 100644 --- a/.github/workflows/go_test.yml +++ b/.github/workflows/go_test.yml @@ -1,4 +1,4 @@ -name: Go +name: Go_test on: [push] jobs: diff --git a/testing/config_test.go b/testing/config_test.go index 67502c4b3..5ef781b29 100644 --- a/testing/config_test.go +++ b/testing/config_test.go @@ -3,9 +3,12 @@ package testing import ( "context" "fmt" + "os" + "path/filepath" "time" "github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context" + "github.com/mitchellh/go-homedir" "github.com/sirupsen/logrus" "github.com/stader-labs/stader-node/shared/services" "github.com/stader-labs/stader-node/shared/services/stader" @@ -13,6 +16,7 @@ import ( "github.com/stader-labs/stader-node/stader/api" "github.com/stader-labs/stader-node/stader/node" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/urfave/cli" "github.com/stader-labs/stader-node/shared/services/config" @@ -43,8 +47,8 @@ const ( ) var ( - UserSettingPath = fmt.Sprintf("%s/user-settings.yml", ConfigPath) - ConfigPath = "~/.stader_testing" + UserSettingPath = filepath.Join(ConfigPath, "user-settings.yml") + ConfigPath, _ = homedir.Expand("~/.stader_testing") ) var cf = []byte(`{ "participants": [ @@ -149,7 +153,7 @@ func (s *StaderNodeSuite) setConfig(c *cli.Context, elURL string, clURL string) staderClient, err := stader.NewClientFromCtx(c) staderClient.GetContractsInfo() - assert.Nil(s.T(), err) + require.Nil(s.T(), err) defer staderClient.Close() cfg.ExecutionClientMode.Value = cfgtypes.Mode_External @@ -161,8 +165,13 @@ func (s *StaderNodeSuite) setConfig(c *cli.Context, elURL string, clURL string) cfg.StaderNode.DataPath.Value = ConfigPath + path, err := homedir.Expand(ConfigPath) + require.Nil(s.T(), err) + + _ = os.Mkdir(path, os.ModePerm) + err = staderClient.SaveConfig(cfg) - assert.Nil(s.T(), err) + require.Nil(s.T(), err) } func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { @@ -224,12 +233,12 @@ func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { s.setConfig(c, fmt.Sprintf("http://127.0.0.1:%+v", beaconchainPort), elUrl) + logrus.Info("------------ DEPLOYING CONTRACT ---------------") deployContracts(elUrl) _, err = services.GetWallet(c) assert.Nil(s.T(), err) - } /* From 0300f9fc46270162aeff8f8d3cb77fe0ca458b27 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 14 Jun 2023 00:04:31 +0700 Subject: [PATCH 10/90] Refactor --- shared/services/gas/gas.go | 2 +- shared/services/requirements.go | 5 +++-- shared/services/stader/client.go | 2 +- stader-cli/node/claim-sp-rewards.go | 9 +++++---- stader-cli/service/service.go | 10 +++++----- stader-cli/wallet/export.go | 2 +- 6 files changed, 16 insertions(+), 14 deletions(-) diff --git a/shared/services/gas/gas.go b/shared/services/gas/gas.go index e9bf58a8a..c0d333efe 100644 --- a/shared/services/gas/gas.go +++ b/shared/services/gas/gas.go @@ -298,7 +298,7 @@ func handleEtherscanGasPrices(gasSuggestion etherscan.GasFeeSuggestion, gasInfo desiredPriceFloat, err := strconv.ParseFloat(desiredPrice, 64) if err != nil { - fmt.Println("Not a valid gas price (%s), try again.", err.Error()) + fmt.Printf("Not a valid gas price (%s), try again.\n", err.Error()) continue } if desiredPriceFloat <= 0 { diff --git a/shared/services/requirements.go b/shared/services/requirements.go index 9067f3d96..65c75becb 100644 --- a/shared/services/requirements.go +++ b/shared/services/requirements.go @@ -23,12 +23,13 @@ import ( "context" "errors" "fmt" - "github.com/ethereum/go-ethereum/common" "log" "math/big" "sync" "time" + "github.com/ethereum/go-ethereum/common" + "github.com/stader-labs/stader-node/shared/services/config" "github.com/stader-labs/stader-node/stader-lib/node" "github.com/stader-labs/stader-node/stader-lib/stader" @@ -498,7 +499,7 @@ func waitBeaconClientSynced(c *cli.Context, verbose bool, timeout int64) (bool, // Check sync status if syncStatus.Syncing { if verbose { - log.Println("Eth 2.0 node syncing: %.2f%%\n", syncStatus.Progress*100) + log.Printf("Eth 2.0 node syncing: %.2f%% \n", syncStatus.Progress*100) } } else { return true, nil diff --git a/shared/services/stader/client.go b/shared/services/stader/client.go index b166e1802..83ec529c9 100644 --- a/shared/services/stader/client.go +++ b/shared/services/stader/client.go @@ -293,7 +293,7 @@ func (c *Client) UpdatePrometheusConfiguration(settings map[string]string) error } err = os.Chmod(prometheusConfigPath, 0664) if err != nil { - return fmt.Errorf("Could not set Prometheus config file permissions: %w", shellescape.Quote(prometheusConfigPath), err) + return fmt.Errorf("Could not set Prometheus config file permissions: %s %w", shellescape.Quote(prometheusConfigPath), err) } return nil diff --git a/stader-cli/node/claim-sp-rewards.go b/stader-cli/node/claim-sp-rewards.go index 68ec2a4b3..fb2f7fb9c 100644 --- a/stader-cli/node/claim-sp-rewards.go +++ b/stader-cli/node/claim-sp-rewards.go @@ -2,15 +2,16 @@ package node import ( "fmt" + "math/big" + "strconv" + "strings" + "github.com/stader-labs/stader-node/shared/services/gas" "github.com/stader-labs/stader-node/shared/services/stader" cliutils "github.com/stader-labs/stader-node/shared/utils/cli" "github.com/stader-labs/stader-node/shared/utils/math" "github.com/stader-labs/stader-node/stader-lib/utils/eth" "github.com/urfave/cli" - "math/big" - "strconv" - "strings" ) func ClaimSpRewards(c *cli.Context) error { @@ -65,7 +66,7 @@ func ClaimSpRewards(c *cli.Context) error { cycleIndexes = append(cycleIndexes, big.NewInt(cycleInfo.MerkleProofInfo.Cycle)) } - fmt.Println("Following are the unclaimed cycles, Please enter in a comma seperated string the cycles you want to claim rewards for:\n") + fmt.Println("Following are the unclaimed cycles, Please enter in a comma seperated string the cycles you want to claim rewards for:") fmt.Printf("%-18s%-14.30s%-14.10s%-10s\n", "Cycle Number", "Cycle Date", "ETH Rewards", "SD Rewards") cyclesToClaim := map[int64]bool{} diff --git a/stader-cli/service/service.go b/stader-cli/service/service.go index 185cbb7b4..b5cdf6db7 100644 --- a/stader-cli/service/service.go +++ b/stader-cli/service/service.go @@ -659,8 +659,8 @@ func startService(c *cli.Context, ignoreConfigSuggestion bool) error { fmt.Printf("%sWarning: couldn't verify that the validator container can be safely restarted:\n\t%s\n", colorYellow, err.Error()) fmt.Println("If you are changing to a different ETH2 client, it may resubmit an attestation you have already submitted.") fmt.Println("This will slash your validator!") - fmt.Println("To prevent slashing, you must wait 15 minutes from the time you stopped the clients before starting them again.\n") - fmt.Println("**If you did NOT change clients, you can safely ignore this warning.**\n") + fmt.Println("To prevent slashing, you must wait 15 minutes from the time you stopped the clients before starting them again.") + fmt.Println("**If you did NOT change clients, you can safely ignore this warning.**") if !cliutils.Confirm(fmt.Sprintf("Press y when you understand the above warning, have waited, and are ready to start Stader:%s", colorReset)) { fmt.Println("Cancelled.") return nil @@ -890,7 +890,7 @@ func pruneExecutionClient(c *cli.Context) error { } fmt.Println("This will shut down your main execution client and prune its database, freeing up disk space.") - fmt.Println("Once pruning is complete, your execution client will restart automatically.\n") + fmt.Println("Once pruning is complete, your execution client will restart automatically.") if selectedEc == cfgtypes.ExecutionClient_Geth { if cfg.UseFallbackClients.Value == false { @@ -1460,7 +1460,7 @@ func exportEcData(c *cli.Context, targetDir string) error { fmt.Println("This will export your execution client's chain data to an external directory, such as a portable hard drive.") fmt.Println("If your execution client is running, it will be shut down.") - fmt.Println("Once the export is complete, your execution client will restart automatically.\n") + fmt.Println("Once the export is complete, your execution client will restart automatically.") // Get the container prefix prefix, err := getContainerPrefix(staderClient) @@ -1578,7 +1578,7 @@ func importEcData(c *cli.Context, sourceDir string) error { fmt.Println("This will import execution layer chain data that you previously exported into your execution client.") fmt.Println("If your execution client is running, it will be shut down.") - fmt.Println("Once the import is complete, your execution client will restart automatically.\n") + fmt.Println("Once the import is complete, your execution client will restart automatically.") // Get the volume to import into executionContainerName := prefix + ExecutionContainerSuffix diff --git a/stader-cli/wallet/export.go b/stader-cli/wallet/export.go index 4b618e74d..28c193b25 100644 --- a/stader-cli/wallet/export.go +++ b/stader-cli/wallet/export.go @@ -51,7 +51,7 @@ func exportWallet(c *cli.Context) error { // Check if stdout is interactive stat, err := os.Stdout.Stat() if err != nil { - fmt.Fprintf(os.Stderr, "An error occured while determining whether or not the output is a tty: %w\n"+ + fmt.Fprintf(os.Stderr, "An error occured while determining whether or not the output is a tty: %+v\n"+ "Use \"stader-cli --secure-session wallet export\" to bypass.\n", err) os.Exit(1) } From caee1aa0b874291f2ca36061b2002a27296be490 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 14 Jun 2023 17:25:25 +0700 Subject: [PATCH 11/90] Config local --- shared/services/config/besu-params.go | 1 + shared/services/config/external-configs.go | 4 +++ shared/services/config/geth-params.go | 1 + shared/services/config/lighthouse-config.go | 1 + shared/services/config/mev-boost-config.go | 2 ++ shared/services/config/nethermind-params.go | 1 + shared/services/config/nimbus-config.go | 2 ++ shared/services/config/prysm-config.go | 2 ++ shared/services/config/stadernode-config.go | 5 +++ shared/services/config/teku-config.go | 1 + shared/services/services.go | 5 +++ testing/config_test.go | 40 +++++++++++++-------- testing/node_test.go | 15 ++++++++ 13 files changed, 66 insertions(+), 14 deletions(-) diff --git a/shared/services/config/besu-params.go b/shared/services/config/besu-params.go index e7d671451..926d08244 100644 --- a/shared/services/config/besu-params.go +++ b/shared/services/config/besu-params.go @@ -123,6 +123,7 @@ func NewBesuConfig(cfg *StaderConfig) *BesuConfig { config.Network_Prater: besuTagTest, config.Network_Devnet: besuTagTest, config.Network_Zhejiang: besuTagTest, + config.Network_Local: besuTagTest, }, AffectsContainers: []config.ContainerID{config.ContainerID_Eth1}, EnvironmentVariables: []string{"EC_CONTAINER_TAG"}, diff --git a/shared/services/config/external-configs.go b/shared/services/config/external-configs.go index 01fc61b0a..c8162db87 100644 --- a/shared/services/config/external-configs.go +++ b/shared/services/config/external-configs.go @@ -197,6 +197,7 @@ func NewExternalLighthouseConfig(cfg *StaderConfig) *ExternalLighthouseConfig { config.Network_Prater: getLighthouseTagTest(), config.Network_Devnet: getLighthouseTagTest(), config.Network_Zhejiang: getLighthouseTagTest(), + config.Network_Local: getLighthouseTagTest(), }, AffectsContainers: []config.ContainerID{config.ContainerID_Validator}, EnvironmentVariables: []string{"VC_CONTAINER_TAG"}, @@ -282,6 +283,7 @@ func NewExternalPrysmConfig(cfg *StaderConfig) *ExternalPrysmConfig { config.Network_Prater: getPrysmVcTestTag(), config.Network_Devnet: getPrysmVcTestTag(), config.Network_Zhejiang: getLighthouseTagTest(), + config.Network_Local: getLighthouseTagTest(), }, AffectsContainers: []config.ContainerID{config.ContainerID_Validator}, EnvironmentVariables: []string{"VC_CONTAINER_TAG"}, @@ -356,6 +358,7 @@ func NewExternalNimbusConfig(cfg *StaderConfig) *ExternalNimbusConfig { config.Network_Prater: nimbusVcTagTest, config.Network_Devnet: nimbusVcTagTest, config.Network_Zhejiang: nimbusVcTagTest, + config.Network_Local: nimbusVcTagTest, }, AffectsContainers: []config.ContainerID{config.ContainerID_Validator}, EnvironmentVariables: []string{"VC_CONTAINER_TAG"}, @@ -417,6 +420,7 @@ func NewExternalTekuConfig(cfg *StaderConfig) *ExternalTekuConfig { config.Network_Prater: tekuTagTest, config.Network_Devnet: tekuTagTest, config.Network_Zhejiang: tekuTagTest, + config.Network_Local: tekuTagTest, }, AffectsContainers: []config.ContainerID{config.ContainerID_Validator}, EnvironmentVariables: []string{"VC_CONTAINER_TAG"}, diff --git a/shared/services/config/geth-params.go b/shared/services/config/geth-params.go index ed6664363..9b3955984 100644 --- a/shared/services/config/geth-params.go +++ b/shared/services/config/geth-params.go @@ -124,6 +124,7 @@ func NewGethConfig(cfg *StaderConfig) *GethConfig { config.Network_Prater: gethTagTest, config.Network_Devnet: gethTagTest, config.Network_Zhejiang: gethTagTest, + config.Network_Local: gethTagTest, }, AffectsContainers: []config.ContainerID{config.ContainerID_Eth1}, EnvironmentVariables: []string{"EC_CONTAINER_TAG"}, diff --git a/shared/services/config/lighthouse-config.go b/shared/services/config/lighthouse-config.go index 4169d791a..eb3d785c5 100644 --- a/shared/services/config/lighthouse-config.go +++ b/shared/services/config/lighthouse-config.go @@ -79,6 +79,7 @@ func NewLighthouseConfig(cfg *StaderConfig) *LighthouseConfig { config.Network_Prater: getLighthouseTagTest(), config.Network_Devnet: getLighthouseTagTest(), config.Network_Zhejiang: getLighthouseTagTest(), + config.Network_Local: getLighthouseTagTest(), }, AffectsContainers: []config.ContainerID{config.ContainerID_Eth2, config.ContainerID_Validator}, EnvironmentVariables: []string{"BN_CONTAINER_TAG", "VC_CONTAINER_TAG"}, diff --git a/shared/services/config/mev-boost-config.go b/shared/services/config/mev-boost-config.go index ebd87957b..968cff05b 100644 --- a/shared/services/config/mev-boost-config.go +++ b/shared/services/config/mev-boost-config.go @@ -417,6 +417,7 @@ func createDefaultRelays() []config.MevRelay { config.Network_Mainnet: "https://0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae@boost-relay.flashbots.net?id=staderlabs", config.Network_Prater: "https://0xafa4c6985aa049fb79dd37010438cfebeb0f2bd42b115b89dd678dab0670c1de38da0c4e9138c9290a398ecd9a0b3110@builder-relay-goerli.flashbots.net?id=staderlabs", config.Network_Devnet: "https://0xafa4c6985aa049fb79dd37010438cfebeb0f2bd42b115b89dd678dab0670c1de38da0c4e9138c9290a398ecd9a0b3110@builder-relay-goerli.flashbots.net?id=staderlabs", + config.Network_Local: "https://0xafa4c6985aa049fb79dd37010438cfebeb0f2bd42b115b89dd678dab0670c1de38da0c4e9138c9290a398ecd9a0b3110@builder-relay-goerli.flashbots.net?id=staderlabs", }, Regulated: true, NoSandwiching: false, @@ -568,6 +569,7 @@ func generateProfileParameter(id string, relays []config.MevRelay, regulated boo DescriptionsByNetwork: map[config.Network]string{ config.Network_Mainnet: mainnetDescription, config.Network_Prater: praterDescription, + config.Network_Local: praterDescription, }, } } diff --git a/shared/services/config/nethermind-params.go b/shared/services/config/nethermind-params.go index bc42b7c7d..de8d2a507 100644 --- a/shared/services/config/nethermind-params.go +++ b/shared/services/config/nethermind-params.go @@ -155,6 +155,7 @@ func NewNethermindConfig(cfg *StaderConfig) *NethermindConfig { config.Network_Prater: nethermindTagTest, config.Network_Devnet: nethermindTagTest, config.Network_Zhejiang: nethermindTagTest, + config.Network_Local: nethermindTagTest, }, AffectsContainers: []config.ContainerID{config.ContainerID_Eth1}, EnvironmentVariables: []string{"EC_CONTAINER_TAG"}, diff --git a/shared/services/config/nimbus-config.go b/shared/services/config/nimbus-config.go index f46722cf7..57479d8e8 100644 --- a/shared/services/config/nimbus-config.go +++ b/shared/services/config/nimbus-config.go @@ -91,6 +91,7 @@ func NewNimbusConfig(cfg *StaderConfig) *NimbusConfig { config.Network_Prater: nimbusBnTagTest, config.Network_Devnet: nimbusBnTagTest, config.Network_Zhejiang: nimbusBnTagTest, + config.Network_Local: nimbusBnTagTest, }, AffectsContainers: []config.ContainerID{config.ContainerID_Eth2}, EnvironmentVariables: []string{"BN_CONTAINER_TAG"}, @@ -108,6 +109,7 @@ func NewNimbusConfig(cfg *StaderConfig) *NimbusConfig { config.Network_Prater: nimbusVcTagTest, config.Network_Devnet: nimbusVcTagTest, config.Network_Zhejiang: nimbusVcTagTest, + config.Network_Local: nimbusVcTagTest, }, AffectsContainers: []config.ContainerID{config.ContainerID_Validator}, EnvironmentVariables: []string{"VC_CONTAINER_TAG"}, diff --git a/shared/services/config/prysm-config.go b/shared/services/config/prysm-config.go index ae4ef4793..fd2a62731 100644 --- a/shared/services/config/prysm-config.go +++ b/shared/services/config/prysm-config.go @@ -120,6 +120,7 @@ func NewPrysmConfig(cfg *StaderConfig) *PrysmConfig { config.Network_Prater: getPrysmBnTestTag(), config.Network_Devnet: getPrysmBnTestTag(), config.Network_Zhejiang: getPrysmBnTestTag(), + config.Network_Local: getPrysmBnTestTag(), }, AffectsContainers: []config.ContainerID{config.ContainerID_Eth2}, EnvironmentVariables: []string{"BN_CONTAINER_TAG"}, @@ -137,6 +138,7 @@ func NewPrysmConfig(cfg *StaderConfig) *PrysmConfig { config.Network_Prater: getPrysmVcTestTag(), config.Network_Devnet: getPrysmVcTestTag(), config.Network_Zhejiang: getPrysmVcTestTag(), + config.Network_Local: getPrysmVcTestTag(), }, AffectsContainers: []config.ContainerID{config.ContainerID_Validator}, EnvironmentVariables: []string{"VC_CONTAINER_TAG"}, diff --git a/shared/services/config/stadernode-config.go b/shared/services/config/stadernode-config.go index 1ba23f525..aa1715ed1 100644 --- a/shared/services/config/stadernode-config.go +++ b/shared/services/config/stadernode-config.go @@ -222,6 +222,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Mainnet: "https://beaconcha.in", config.Network_Prater: "https://prater.beaconcha.in", config.Network_Devnet: "https://prater.beaconcha.in", + config.Network_Local: "https://prater.beaconcha.in", }, txWatchUrl: map[config.Network]string{ @@ -235,6 +236,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Prater: 5, // Goerli config.Network_Devnet: 5, // Also goerli config.Network_Zhejiang: 1337803, // Zhejiang + config.Network_Local: 1337809, // Zhejiang }, ethxTokenAddress: map[config.Network]string{ @@ -242,6 +244,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Devnet: "0x38DE8Df722B4032Cc6987F00bCA0d9B37d9F9438", config.Network_Mainnet: "0x38DE8Df722B4032Cc6987F00bCA0d9B37d9F9438", config.Network_Zhejiang: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", + config.Network_Local: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", }, staderConfigAddress: map[config.Network]string{ @@ -249,6 +252,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Devnet: "0x749Ed651c4F41E0D705960e815A58815ffFd3afe", config.Network_Mainnet: "0x749Ed651c4F41E0D705960e815A58815ffFd3afe", config.Network_Zhejiang: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", + config.Network_Local: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", }, baseStaderBackendUrl: map[config.Network]string{ @@ -256,6 +260,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Devnet: "https://1r6l0g1nkd.execute-api.us-east-1.amazonaws.com/prod", config.Network_Mainnet: "https://1r6l0g1nkd.execute-api.us-east-1.amazonaws.com/prod", config.Network_Zhejiang: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", + config.Network_Local: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", }, } } diff --git a/shared/services/config/teku-config.go b/shared/services/config/teku-config.go index b65188bf5..4b1305cee 100644 --- a/shared/services/config/teku-config.go +++ b/shared/services/config/teku-config.go @@ -111,6 +111,7 @@ func NewTekuConfig(cfg *StaderConfig) *TekuConfig { config.Network_Prater: tekuTagTest, config.Network_Devnet: tekuTagTest, config.Network_Zhejiang: tekuTagTest, + config.Network_Local: tekuTagTest, }, AffectsContainers: []config.ContainerID{config.ContainerID_Eth2, config.ContainerID_Validator}, EnvironmentVariables: []string{"BN_CONTAINER_TAG", "VC_CONTAINER_TAG"}, diff --git a/shared/services/services.go b/shared/services/services.go index 474accae3..c16f06018 100644 --- a/shared/services/services.go +++ b/shared/services/services.go @@ -26,6 +26,7 @@ import ( "sync" "github.com/ethereum/go-ethereum/common" + cftypes "github.com/stader-labs/stader-node/shared/types/config" stader_config "github.com/stader-labs/stader-node/stader-lib/stader-config" "github.com/docker/docker/client" @@ -445,6 +446,10 @@ func getConfig(c *cli.Context) (*config.StaderConfig, error) { err = fmt.Errorf("Settings file [%s] not found.", settingsFile) } }) + if cfg != nil { + + cfg.IsNativeMode = cfg.StaderNode.Network.Value == cftypes.Network_Local + } return cfg, err } diff --git a/testing/config_test.go b/testing/config_test.go index 5ef781b29..0f7e1c148 100644 --- a/testing/config_test.go +++ b/testing/config_test.go @@ -11,7 +11,9 @@ import ( "github.com/mitchellh/go-homedir" "github.com/sirupsen/logrus" "github.com/stader-labs/stader-node/shared/services" + "github.com/stader-labs/stader-node/shared/services/passwords" "github.com/stader-labs/stader-node/shared/services/stader" + "github.com/stader-labs/stader-node/shared/services/wallet" cfgtypes "github.com/stader-labs/stader-node/shared/types/config" "github.com/stader-labs/stader-node/stader/api" "github.com/stader-labs/stader-node/stader/node" @@ -49,6 +51,7 @@ const ( var ( UserSettingPath = filepath.Join(ConfigPath, "user-settings.yml") ConfigPath, _ = homedir.Expand("~/.stader_testing") + PasswordPath = filepath.Join(ConfigPath, "password") ) var cf = []byte(`{ "participants": [ @@ -165,6 +168,7 @@ func (s *StaderNodeSuite) setConfig(c *cli.Context, elURL string, clURL string) cfg.StaderNode.DataPath.Value = ConfigPath + cfg.ChangeNetwork(cfgtypes.Network_Local) path, err := homedir.Expand(ConfigPath) require.Nil(s.T(), err) @@ -209,18 +213,6 @@ func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { assert.True(t, found) beaconchainPort := apiServiceHttpPortSpec.GetNumber() - fmt.Printf("%+v", beaconchainPort) - - validatorContext, err := enclaveCtx.GetServiceContext(clClientValidator) - assert.Nil(t, err) - apiServicePublicPorts = validatorContext.GetPublicPorts() - assert.NotNil(t, apiServicePublicPorts) - apiServiceHttpPortSpec, found = apiServicePublicPorts["http"] - assert.True(t, found) - beaconchainPort = apiServiceHttpPortSpec.GetNumber() - - fmt.Printf("%+v", beaconchainPort) - elContext, err := enclaveCtx.GetServiceContext(elCient) assert.Nil(t, err) elPublicPorts := elContext.GetPublicPorts() @@ -232,13 +224,33 @@ func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { elUrl := fmt.Sprintf("http://127.0.0.1:%+v", elPort) s.setConfig(c, fmt.Sprintf("http://127.0.0.1:%+v", beaconchainPort), elUrl) + s.setupWallet(ctx, c) logrus.Info("------------ DEPLOYING CONTRACT ---------------") deployContracts(elUrl) - _, err = services.GetWallet(c) +} + +func (s *StaderNodeSuite) setupWallet(ctx context.Context, c *cli.Context) { + + // Get services + pm := passwords.NewPasswordManager(PasswordPath) - assert.Nil(s.T(), err) + // Set password + err := pm.SetPassword("stader_testing_pass") + require.Nil(s.T(), err) + + w, err := services.GetWallet(c) + require.Nil(s.T(), err) + + mn, err := w.Initialize(wallet.DefaultNodeKeyPath, 0) + logrus.Info("------------ MNENOMIC TEST ---------------") + logrus.Info(mn) + + require.Nil(s.T(), err) + + err = w.Save() + require.Nil(s.T(), err) } /* diff --git a/testing/node_test.go b/testing/node_test.go index 794f0802f..197ace45c 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -11,6 +11,9 @@ import ( // store "github.com/stader-labs/stader-node/stader-lib/contracts" "github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context" + "github.com/mitchellh/go-homedir" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" "github.com/urfave/cli" ) @@ -32,6 +35,14 @@ func (s *StaderNodeSuite) TestExample1() { // run once, before test suite methods func (s *StaderNodeSuite) SetupSuite() { + + defer func() { + r := recover() + + s.TearDownSuite() + assert.Nil(s.T(), r, "------------ Recovered TESTS ---------------") + }() + ctx, cancelCtxFunc := context.WithCancel(context.Background()) defer cancelCtxFunc() @@ -64,4 +75,8 @@ func (s *StaderNodeSuite) TearDownSuite() { log.Println("TearDown StaderNodeSuite") defer s.kurtosisCtx.DestroyEnclave(context.Background(), s.enclaveId) + + path, err := homedir.Expand(ConfigPath) + require.Nil(s.T(), err) + _ = os.RemoveAll(path) } From 39df63d68b8638c07b770d175e46e0e7ee340d61 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 14 Jun 2023 18:31:35 +0700 Subject: [PATCH 12/90] Config native --- shared/services/config/stadernode-config.go | 2 +- testing/config_test.go | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/shared/services/config/stadernode-config.go b/shared/services/config/stadernode-config.go index aa1715ed1..6edf4671c 100644 --- a/shared/services/config/stadernode-config.go +++ b/shared/services/config/stadernode-config.go @@ -435,7 +435,7 @@ func (cfg *StaderNodeConfig) GetSpRewardCyclePath(cycle int64, daemon bool) stri } func (cfg *StaderNodeConfig) GetFeeRecipientFilePath() string { - if cfg.parent != nil && cfg.parent.IsNativeMode { + if cfg.parent != nil && !cfg.parent.IsNativeMode { return filepath.Join(DaemonDataPath, "validators", FeeRecipientFilename) } diff --git a/testing/config_test.go b/testing/config_test.go index 0f7e1c148..cc8606aef 100644 --- a/testing/config_test.go +++ b/testing/config_test.go @@ -168,6 +168,9 @@ func (s *StaderNodeSuite) setConfig(c *cli.Context, elURL string, clURL string) cfg.StaderNode.DataPath.Value = ConfigPath + cfg.Native.EcHttpUrl.Value = elURL + cfg.Native.ConsensusClient.Value = clURL + cfg.ChangeNetwork(cfgtypes.Network_Local) path, err := homedir.Expand(ConfigPath) require.Nil(s.T(), err) @@ -222,8 +225,9 @@ func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { elPort := apiServiceHttpPortSpec.GetNumber() elUrl := fmt.Sprintf("http://127.0.0.1:%+v", elPort) + clUrl := fmt.Sprintf("http://127.0.0.1:%+v", beaconchainPort) - s.setConfig(c, fmt.Sprintf("http://127.0.0.1:%+v", beaconchainPort), elUrl) + s.setConfig(c, elUrl, clUrl) s.setupWallet(ctx, c) logrus.Info("------------ DEPLOYING CONTRACT ---------------") From 1c930ee4dde17cbc27741c5cdf5e7286fa2065b0 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 14 Jun 2023 18:52:13 +0700 Subject: [PATCH 13/90] Assert node run --- testing/node_test.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/testing/node_test.go b/testing/node_test.go index 197ace45c..0a212102c 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -3,7 +3,6 @@ package testing import ( "context" "flag" - "fmt" "log" "os" "testing" @@ -59,12 +58,12 @@ func (s *StaderNodeSuite) SetupSuite() { go func() { a := os.Args - if err := app.Run([]string{ + err := app.Run([]string{ a[0], "node", - }); err != nil { - fmt.Printf("ERROR RUN NODE %+v", err) - } + }) + + assert.Nil(s.T(), err) }() log.Println("Done SetupSuite()") From d6ab0af3ce7d927c138933ac73fe37ccf5657612 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 14 Jun 2023 21:51:17 +0700 Subject: [PATCH 14/90] Update contract --- shared/services/config/stadernode-config.go | 12 ++--- testing/config_test.go | 6 +-- testing/node_test.go | 56 +++++++++++++++------ 3 files changed, 51 insertions(+), 23 deletions(-) diff --git a/shared/services/config/stadernode-config.go b/shared/services/config/stadernode-config.go index 6edf4671c..ac69365cf 100644 --- a/shared/services/config/stadernode-config.go +++ b/shared/services/config/stadernode-config.go @@ -244,7 +244,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Devnet: "0x38DE8Df722B4032Cc6987F00bCA0d9B37d9F9438", config.Network_Mainnet: "0x38DE8Df722B4032Cc6987F00bCA0d9B37d9F9438", config.Network_Zhejiang: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", - config.Network_Local: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", + config.Network_Local: "0xAb2A01BC351770D09611Ac80f1DE076D56E0487d", }, staderConfigAddress: map[config.Network]string{ @@ -252,7 +252,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Devnet: "0x749Ed651c4F41E0D705960e815A58815ffFd3afe", config.Network_Mainnet: "0x749Ed651c4F41E0D705960e815A58815ffFd3afe", config.Network_Zhejiang: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", - config.Network_Local: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", + config.Network_Local: "0xAb2A01BC351770D09611Ac80f1DE076D56E0487d", }, baseStaderBackendUrl: map[config.Network]string{ @@ -260,7 +260,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Devnet: "https://1r6l0g1nkd.execute-api.us-east-1.amazonaws.com/prod", config.Network_Mainnet: "https://1r6l0g1nkd.execute-api.us-east-1.amazonaws.com/prod", config.Network_Zhejiang: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", - config.Network_Local: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", + config.Network_Local: "0xAb2A01BC351770D09611Ac80f1DE076D56E0487d", }, } } @@ -435,11 +435,11 @@ func (cfg *StaderNodeConfig) GetSpRewardCyclePath(cycle int64, daemon bool) stri } func (cfg *StaderNodeConfig) GetFeeRecipientFilePath() string { - if cfg.parent != nil && !cfg.parent.IsNativeMode { - return filepath.Join(DaemonDataPath, "validators", FeeRecipientFilename) + if cfg.parent != nil && cfg.parent.IsNativeMode { + return filepath.Join(cfg.DataPath.Value.(string), "validators") } - return filepath.Join(cfg.DataPath.Value.(string), "validators", NativeFeeRecipientFilename) + return filepath.Join(DaemonDataPath, "validators", NativeFeeRecipientFilename) } func (cfg *StaderNodeConfig) GetClaimData(cycles []*big.Int) ([]*big.Int, []*big.Int, [][][32]byte, error) { diff --git a/testing/config_test.go b/testing/config_test.go index cc8606aef..3ef34d1ae 100644 --- a/testing/config_test.go +++ b/testing/config_test.go @@ -214,7 +214,7 @@ func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { assert.NotNil(t, apiServicePublicPorts) apiServiceHttpPortSpec, found := apiServicePublicPorts["http"] assert.True(t, found) - beaconchainPort := apiServiceHttpPortSpec.GetNumber() + clPort := apiServiceHttpPortSpec.GetNumber() elContext, err := enclaveCtx.GetServiceContext(elCient) assert.Nil(t, err) @@ -224,8 +224,8 @@ func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { assert.True(t, found) elPort := apiServiceHttpPortSpec.GetNumber() - elUrl := fmt.Sprintf("http://127.0.0.1:%+v", elPort) - clUrl := fmt.Sprintf("http://127.0.0.1:%+v", beaconchainPort) + elUrl := fmt.Sprintf("http://127.0.0.1:%d", elPort) + clUrl := fmt.Sprintf("http://127.0.0.1:%d", clPort) s.setConfig(c, elUrl, clUrl) s.setupWallet(ctx, c) diff --git a/testing/node_test.go b/testing/node_test.go index 0a212102c..dc9b61b7c 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -3,7 +3,6 @@ package testing import ( "context" "flag" - "log" "os" "testing" "time" @@ -11,6 +10,7 @@ import ( // store "github.com/stader-labs/stader-node/stader-lib/contracts" "github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context" "github.com/mitchellh/go-homedir" + "github.com/sirupsen/logrus" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" @@ -18,6 +18,8 @@ import ( ) type StaderNodeSuite struct { + done chan struct{} + app *cli.App suite.Suite kurtosisCtx *kurtosis_context.KurtosisContext enclaveId string @@ -27,9 +29,18 @@ func TestNodeSuite(t *testing.T) { suite.Run(t, new(StaderNodeSuite)) } -func (s *StaderNodeSuite) TestExample1() { - time.Sleep(time.Second * 5) - s.Equal(true, true) +func (s *StaderNodeSuite) TestNodeDaemon() { + // a := os.Args + // run(time.Minute*1, s.done, func() { + // err := s.app.Run([]string{ + // a[0], + // "node", + // }) + // require.Nil(s.T(), err) + // }) + time.Sleep(time.Minute * 2) + + logrus.Printf("SOSSSSSSSSSSSSSSS") } // run once, before test suite methods @@ -38,44 +49,61 @@ func (s *StaderNodeSuite) SetupSuite() { defer func() { r := recover() - s.TearDownSuite() assert.Nil(s.T(), r, "------------ Recovered TESTS ---------------") }() ctx, cancelCtxFunc := context.WithCancel(context.Background()) defer cancelCtxFunc() - app := newApp() + s.app = newApp() + s.done = make(chan struct{}, 1) flagSet := flag.NewFlagSet("node_testing", flag.PanicOnError) var p string flagSet.StringVar(&p, "settings", UserSettingPath, "settings") var cp string flagSet.StringVar(&cp, "config-path", ConfigPath, "config-path") - c := cli.NewContext(app, flagSet, nil) + c := cli.NewContext(s.app, flagSet, nil) s.staderConfig(ctx, c) + logrus.Println("Done SetupSuite()") + go func() { + a := os.Args - err := app.Run([]string{ + // run(time.Minute*1, s.done, func() { + err := s.app.Run([]string{ a[0], "node", }) - - assert.Nil(s.T(), err) + require.Nil(s.T(), err) }() - - log.Println("Done SetupSuite()") } // run once, after test suite methods func (s *StaderNodeSuite) TearDownSuite() { - log.Println("TearDown StaderNodeSuite") + // <-s.done + logrus.Println("TearDown StaderNodeSuite") - defer s.kurtosisCtx.DestroyEnclave(context.Background(), s.enclaveId) + defer s.kurtosisCtx.Clean(context.Background(), true) path, err := homedir.Expand(ConfigPath) require.Nil(s.T(), err) _ = os.RemoveAll(path) } + +func run(t time.Duration, done chan<- struct{}, f func()) { + c1 := make(chan struct{}, 1) + go func() { + f() + c1 <- struct{}{} + }() + + select { + case _ = <-c1: + case <-time.After(t): + done <- struct{}{} + return + } +} From 397bb22357ace7d285dfc7b7b3918ec287488657 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Thu, 15 Jun 2023 00:31:37 +0700 Subject: [PATCH 15/90] Deploy staderconfig --- stader-lib/api/StaderConfig.go | 5117 ++++++++++++++++++++++++++++++++ testing/deploy.go | 16 +- 2 files changed, 5130 insertions(+), 3 deletions(-) create mode 100644 stader-lib/api/StaderConfig.go diff --git a/stader-lib/api/StaderConfig.go b/stader-lib/api/StaderConfig.go new file mode 100644 index 000000000..c30e99245 --- /dev/null +++ b/stader-lib/api/StaderConfig.go @@ -0,0 +1,5117 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contracts + +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 +) + +// StaderConfigMetaData contains all meta data concerning the StaderConfig contract. +var StaderConfigMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidLimits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMaxDepositValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMaxWithdrawValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMinDepositValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMinWithdrawValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SetConstant\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SetVariable\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUCTION_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DECIMALS\",\"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\":\"ETHX_SUPPLY_POR_FEED\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_BALANCE_POR_FEED\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_DEPOSIT_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_PER_NODE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETHx\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FULL_DEPOSIT_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_DEPOSIT_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_WITHDRAW_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_DEPOSIT_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_WITHDRAW_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_EL_REWARD_VAULT_IMPLEMENTATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_MAX_NAME_LENGTH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_REWARD_COLLECTOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PENALTY_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_NODE_REGISTRY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_SOCIALIZING_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_NODE_REGISTRY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_SOCIALIZING_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_SELECTOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_UTILS\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRE_DEPOSIT_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REWARD_THRESHOLD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SD_COLLATERAL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOCIALIZING_POOL_CYCLE_DURATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_INSURANCE_FUND\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_ORACLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_TREASURY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKE_POOL_MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOTAL_FEE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"USER_WITHDRAW_MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_FACTORY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WITHDRAWN_KEYS_BATCH_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuctionContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDecimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHBalancePORFeedProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHDepositContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHXSupplyPORFeedProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHxToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFullDepositSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxDepositAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxWithdrawAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinBlockDelayToFinalizeWithdrawRequest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinDepositAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinWithdrawAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeELRewardVaultImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperatorMaxNameLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperatorRewardsCollector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPenaltyContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedSocializingPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessSocializingPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSelector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolUtils\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPreDepositSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsThreshold\",\"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\":[],\"name\":\"getSDCollateral\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSocializingPoolCycleDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSocializingPoolOptInCoolingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderInsuranceFund\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakePoolManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakedEthPerNode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUserWithdrawManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidatorWithdrawalVaultImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawnKeyBatchSize\",\"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\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ethDepositContract\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"onlyManagerRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"onlyOperatorRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_contractName\",\"type\":\"bytes32\"}],\"name\":\"onlyStaderContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"updateAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_auctionContract\",\"type\":\"address\"}],\"name\":\"updateAuctionContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethBalanceProxy\",\"type\":\"address\"}],\"name\":\"updateETHBalancePORFeedProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethXSupplyProxy\",\"type\":\"address\"}],\"name\":\"updateETHXSupplyPORFeedProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethX\",\"type\":\"address\"}],\"name\":\"updateETHxToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDepositAmount\",\"type\":\"uint256\"}],\"name\":\"updateMaxDepositAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxWithdrawAmount\",\"type\":\"uint256\"}],\"name\":\"updateMaxWithdrawAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minBlockDelay\",\"type\":\"uint256\"}],\"name\":\"updateMinBlockDelayToFinalizeWithdrawRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minDepositAmount\",\"type\":\"uint256\"}],\"name\":\"updateMinDepositAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minWithdrawAmount\",\"type\":\"uint256\"}],\"name\":\"updateMinWithdrawAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeELRewardVaultImpl\",\"type\":\"address\"}],\"name\":\"updateNodeELRewardImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operatorRewardsCollector\",\"type\":\"address\"}],\"name\":\"updateOperatorRewardsCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_penaltyContract\",\"type\":\"address\"}],\"name\":\"updatePenaltyContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedNodeRegistry\",\"type\":\"address\"}],\"name\":\"updatePermissionedNodeRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedPool\",\"type\":\"address\"}],\"name\":\"updatePermissionedPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedSocializePool\",\"type\":\"address\"}],\"name\":\"updatePermissionedSocializingPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessNodeRegistry\",\"type\":\"address\"}],\"name\":\"updatePermissionlessNodeRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessPool\",\"type\":\"address\"}],\"name\":\"updatePermissionlessPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessSocializePool\",\"type\":\"address\"}],\"name\":\"updatePermissionlessSocializingPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolSelector\",\"type\":\"address\"}],\"name\":\"updatePoolSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolUtils\",\"type\":\"address\"}],\"name\":\"updatePoolUtils\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardsThreshold\",\"type\":\"uint256\"}],\"name\":\"updateRewardsThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sdCollateral\",\"type\":\"address\"}],\"name\":\"updateSDCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_socializingPoolCycleDuration\",\"type\":\"uint256\"}],\"name\":\"updateSocializingPoolCycleDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_SocializePoolOptInCoolingPeriod\",\"type\":\"uint256\"}],\"name\":\"updateSocializingPoolOptInCoolingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderInsuranceFund\",\"type\":\"address\"}],\"name\":\"updateStaderInsuranceFund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderOracle\",\"type\":\"address\"}],\"name\":\"updateStaderOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderToken\",\"type\":\"address\"}],\"name\":\"updateStaderToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderTreasury\",\"type\":\"address\"}],\"name\":\"updateStaderTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_stakePoolManager\",\"type\":\"address\"}],\"name\":\"updateStakePoolManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userWithdrawManager\",\"type\":\"address\"}],\"name\":\"updateUserWithdrawManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validatorWithdrawalVaultImpl\",\"type\":\"address\"}],\"name\":\"updateValidatorWithdrawalVaultImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vaultFactory\",\"type\":\"address\"}],\"name\":\"updateVaultFactory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateWithdrawnKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b506200001b62000021565b620000e0565b5f54610100900460ff16156200008d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161015620000de575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61347a80620000ee5f395ff3fe608060405234801561000f575f80fd5b506004361061077a575f3560e01c8063686a8b67116103d8578063aa9537951161020b578063dde63e8f1161012a578063f0141d84116100bf578063f6c278c11161008f578063f6c278c114611d19578063f83c778714611d40578063fa71fcbb14611d53578063ff387f3a14611da2578063ff4f354614611df1575f80fd5b8063f0141d8414611c67578063f122961f14611cb6578063f4914d3314611cdd578063f63718e714611d06575f80fd5b8063e4f59b6c116100fa578063e4f59b6c14611b7d578063e7bdba3214611b90578063e8fe187314611bb7578063ecf170a814611c0f575f80fd5b8063dde63e8f14611a93578063defd024d14611aba578063e069f71414611b12578063e2f273bd14611b6a575f80fd5b8063bbb99bb5116101a0578063ca78360c11610170578063ca78360c146119d9578063cc45dabe146119ec578063d2cee8ba14611a44578063d547741f14611a80575f80fd5b8063bbb99bb514611965578063bedcb34c14611978578063c20573c11461199f578063c60470d3146119b2575f80fd5b8063b549dbff116101db578063b549dbff146118d3578063b5cfee6c146118e6578063b68578441461193e578063b9894a1114611952575f80fd5b8063aa953795146117eb578063b11c699d14611843578063b31239221461186a578063b479a51714611897575f80fd5b8063841b83b3116102f7578063983d27371161028c578063a217fddf1161025c578063a217fddf14611752578063a469e24714611759578063a53bddd6146117b1578063aa2f56c7146117d8575f80fd5b8063983d27371461166857806398c359271461168f5780639ca76b73146116a2578063a0b4079f146116fa575f80fd5b80638910115c116102c75780638910115c146115925780638a4cfb58146115ea5780638f8b3867146115fd57806391d1485414611655575f80fd5b8063841b83b31461151d578063847802051461154457806385e2fcd31461155757806388993d8b1461157e575f80fd5b806372ce78b01161036d5780637a87fa0b1161033d5780637a87fa0b146114815780637ae316d0146114a85780637b4cd7ec146114f7578063831485931461150a575f80fd5b806372ce78b0146113b457806377e8a0c31461140c57806379175a7414611433578063792c8cc31461145a575f80fd5b80636e0fddfc116103a85780636e0fddfc146112fa5780636e9960c31461134957806372195b3e1461138e578063723b732c146113a1575f80fd5b8063686a8b67146112105780636870bb2b146112375780636ccb9d701461124a5780636d28ad1c146112a2575f80fd5b80632f2ff15d116105b0578063489ed651116104cf5780635b5961fc116104645780636176bbde116104345780636176bbde1461119b5780636240fb9c146111af57806363db7eae146111c257806367dcf134146111e9575f80fd5b80635b5961fc1461110a5780635b9cc8b11461111d5780635be6ce69146111305780635edc686e14611143575f80fd5b80635455e4721161049f5780635455e4721461103c5780635458a106146110635780635726a356146110bb578063572c686a146110f7575f80fd5b8063489ed65114610f965780634c34a98214610fee57806352112bd31461100257806353f5713b14611029575f80fd5b8063384002a211610545578063403efe7f11610515578063403efe7f14610f355780634191e0fe14610f4857806344ba0ea214610f6f578063485cc95514610f83575f80fd5b8063384002a214610ead5780633871d0f114610ed45780633b6bcca014610efb5780633c128dad14610f22575f80fd5b806336568abe1161058057806336568abe14610e0857806336854d6314610e1b578063368f9d1714610e4257806336c157f414610e55575f80fd5b80632f2ff15d14610d4f578063326a16a314610d6257806334d17d7414610d9e578063360374a414610db1575f80fd5b806318bcb2841161069c578063248a9ca3116106315780632a9cc2c4116106015780632a9cc2c414610c515780632ca03f6614610c785780632e0f262514610cd05780632ec5e01814610cf7575f80fd5b8063248a9ca314610bb05780632651644c14610bd2578063278671bb14610be55780632a0acc6a14610c3d575f80fd5b80631c55cccd1161066c5780631c55cccd14610b135780631ca197a514610b3a5780631de03db814610b895780631ea30fef14610b9c575f80fd5b806318bcb28414610a595780631af0fff314610ab15780631b2df85014610ad85780631bf6a41c14610aec575f80fd5b8063103f290711610712578063121669f1116106e2578063121669f1146109a857806314e1b8fd146109bb578063152a91da146109e457806318829fc314610a0a575f80fd5b8063103f2907146108f85780631049e32e1461091f57806310deba2b146109325780631202007514610981575f80fd5b8063088ee72d1161074d578063088ee72d1461083f5780630945d42c146108525780630a3fbd9a146108655780630bdf3166146108d1575f80fd5b806301ffc9a71461077e5780630430246e146107a6578063047cb439146107db57806308297645146107f0575b5f80fd5b61079161078c3660046130d5565b611e04565b60405190151581526020015b60405180910390f35b6107cd7f9b1ae66636378b5626322a52e22518dd40bb04881cf0440ed16a20c0f902b24281565b60405190815260200161079d565b6107ee6107e9366004613117565b611e3a565b005b7f9b1ae66636378b5626322a52e22518dd40bb04881cf0440ed16a20c0f902b2425f5260976020527f2b5f44404b80fc874d00ce3803444dc1d8415bef002ea5e3d4c6a1fc229b361b546107cd565b6107ee61084d366004613117565b611e72565b6107ee610860366004613130565b611ea6565b7fc5b1a6a0b843563e6a17ca90bc59d2315c523be427d0c9c2ba08d77ced4f46b15f52609a6020527f93bda0178f178a956e1154aad6f6d04aca130dc29bb626bd6774e853c8c9f354546001600160a01b03165b6040516001600160a01b03909116815260200161079d565b6107cd7f3e4ded42f360c2e6b1251d584085ae1d9aa9cbed18687fac6b6aef8eed1c5ad381565b6107cd7f8d4341681b282735dd0d55670ff8e0ad68a80cbfc2cee847065e9f771470f88f81565b6107ee61092d366004613117565b611edc565b7f59b5f464ec5829246a81f005456c8cb714ee224aea800742e2dae497263e46695f5260976020527ff1d631be95f382e871541957d68e9595b265874c488308836f37d0f22a9fbae9546107cd565b6107cd7f4c9466ca1bf288a7334a7494f09a0acc38ee31628eaf8c68b574b9f0ec22a9c181565b6107ee6109b6366004613117565b611f10565b5f805160206133458339815191525f5260986020525f805160206133e5833981519152546107cd565b6107cd7e665c1b06e0667c56a1ca1706b7573435d1b9162c6327b5d0ea1daeb491ad0d81565b7f46b41285bb7b8513ce3a9d95cdf6916699fb00b47326e8d3850be1b6186e03495f5260986020527f4d508419d31c3547aff85909df3c1fcaa249c360d3c9fa4e4f9e9c899cebbedc546107cd565b7f8d4341681b282735dd0d55670ff8e0ad68a80cbfc2cee847065e9f771470f88f5f52609a6020527f510a692d092451633b86b6d5ebd49dd58b5ea01b6d0783a379a8169a08baac9f546001600160a01b03166108b9565b6107cd7fe5240448c78dfcff5bda4e4eed69ba9635df15d79da0e8a4cf889217106fa45b81565b6107cd5f8051602061330583398151915281565b6107cd7f29384ec8473b541e7a7850226a4d1906a700f14cc394266ee08800ba62dc3af981565b6107cd7fbd34382cd421c5250595893a4ed6cdb2125e6be7d5e0a9dbc469de5d583adfcf81565b7f3c6dcff840f36f9818a73b67d9d00197362f63687bd52e3c277bd0ffb30dde335f5260986020527f9e4fbca7af476428837bb1c0659b29a978bd5be1038b9848cfd6837f97c0c036546107cd565b6107ee610b97366004613117565b611f44565b6107cd5f8051602061342583398151915281565b6107cd610bbe366004613130565b5f9081526065602052604090206001015490565b6107ee610be0366004613117565b611f78565b7f5be667ef1f4c6c279e2aa7e62595a1045043db6a43145cb438c6d36e7a3c3ed85f52609a6020527f3f1c1b82007b7a87a83473281505b32822fde2464206a16635328330125264a8546001600160a01b03166108b9565b6107cd5f805160206133c583398151915281565b6107cd7fb134afa3abad633a84ab2d33dd5171f2b371e38b0f7bca001383aaf08ed6d2d181565b7fb134afa3abad633a84ab2d33dd5171f2b371e38b0f7bca001383aaf08ed6d2d15f52609a6020527fb5c61d48a513a298b438559aede2612ccf11b8fe4c725b0f159efab727297353546001600160a01b03166108b9565b6107cd7f08593985ae1bebfb02f6c30105edffb176a6d87c9fad54c434bf9b58f67e81b681565b7f3d88d1233771c5c30791fb6805b7f91424dae1e5a68a57da846ca7ff83c640295f52609a6020527f018f2aef664aeeb1561d5a44d318b67f16f75b697bf95eeabc62c48d36323e72546001600160a01b03166108b9565b6107ee610d5d366004613147565b611fac565b5f805160206133258339815191525f5260986020527fd179a4a9329ee39fba707fd91c699ec0f088afc56731eb89ff424b873ac70844546107cd565b6107ee610dac366004613117565b611fd5565b7e665c1b06e0667c56a1ca1706b7573435d1b9162c6327b5d0ea1daeb491ad0d5f52609a6020527fe107fed811895732bef768006b62e8ce98d10a188d78cab697a91a201b5e2404546001600160a01b03166108b9565b6107ee610e16366004613147565b612009565b6107cd7ff935b8bf66b325637ad32ca875b588849cf4026791b79b4dc20623cd3dd36e2081565b6107ee610e50366004613117565b612088565b7f8e96355022bb9b9f4d9d4e01fe2b58f45e78549c982c401c96f75f33c5de457e5f52609a6020527fe74d6d5cda9d4a34ee9d4950f99c58c26803c1cf17dbd9d3e9f82fcea7feb01e546001600160a01b03166108b9565b6107cd7f95bf18d68834a11aaae7b73ff6037326f163a81a7b5ea80cba96856ce2284fbd81565b6107cd7f9f919a2294d86593fbcec81ea71aa683cec51c78771c642f8894ba8f3949705281565b6107cd7fc5b1a6a0b843563e6a17ca90bc59d2315c523be427d0c9c2ba08d77ced4f46b181565b6107ee610f30366004613117565b6120bc565b6107ee610f43366004613117565b6120f0565b6107cd7fa4083e7a78dd898def03c51ce199cb4286b8828be4f6f46e04aec6176196747181565b6107cd5f8051602061332583398151915281565b6107ee610f91366004613171565b612124565b7f690795c57e13eaf2526f76202b6799e9afdb069afca1e572f693953d013569d85f52609a6020527f38e84315fdfc8f1b16767d9fd043998a9ff60cfbcb629d8f48542b4e3ee87096546001600160a01b03166108b9565b6107cd5f8051602061338583398151915281565b6107cd7f602490b12960e59ddb584affd1da6cd5692f4455c1ba0cc4e865af81e111ebe281565b610791611037366004613117565b612444565b6107cd7f59b5f464ec5829246a81f005456c8cb714ee224aea800742e2dae497263e466981565b7fdb5d1c2a9350ca010dcdf3953da11a9e8f7c5e2918cdfa65500e84e7fd4fde7d5f52609a6020527f642611b82cedca4c0a5510e3234bea9632cc7eb6e135d12e2ef4f8c68dc23add546001600160a01b03166108b9565b5f805160206133858339815191525f5260986020527ffcacc1044a5a1b4eb9c058396306426a857813d37a4fb6ccf5a3adde30e0c914546107cd565b6107ee611105366004613130565b61246f565b6107ee611118366004613117565b6124b0565b6107ee61112b366004613130565b6124e4565b6107ee61113e366004613117565b612505565b7fa4083e7a78dd898def03c51ce199cb4286b8828be4f6f46e04aec617619674715f52609a6020527f863e03b3878962463f3668c14c10a4aeeabb7baa9c7a9b990796f179109d8692546001600160a01b03166108b9565b6107cd5f805160206133a583398151915281565b6107916111bd366004613117565b612539565b6107cd7f33271b56873d8abb908de4853f90a8a0ef8829548ec0bf6c298feed3917c50a281565b6107cd7ff822b1f0c3b886ce1cdf1c2a5317844145470db33b02c63cae4813f8c9b2dc1781565b6107cd7fc54a7590fe6738d7a81f393c1cf5ab3e577c91781037d93a5a9f5ce44f19eb5181565b6107ee611245366004613130565b612551565b7fd7e49a298cb2719de62e5df1024257eed316db6337361b3a30d56a75324046075f52609a6020527f294ce448c5d68d362948bb2b78c5571986464589b6911cc804ca52d7abbad2e3546001600160a01b03166108b9565b7fbd34382cd421c5250595893a4ed6cdb2125e6be7d5e0a9dbc469de5d583adfcf5f52609a6020527f3195564ffd56571794a8c7ffc14e3d393758b399f23318e874273db13addfdfe546001600160a01b03166108b9565b7fc54a7590fe6738d7a81f393c1cf5ab3e577c91781037d93a5a9f5ce44f19eb515f5260986020527f4d985796191711ecc0d75f056488220f1f755856cdfe3ebd45de3537c37b9b50546107cd565b5f805160206133c58339815191525f5260996020527f15be86566e203c1f41b9ae149d9fbb01b2c14f503704423d739a6e3d2db5a9ee546001600160a01b03166108b9565b6107ee61139c366004613117565b612592565b6107ee6113af366004613130565b6125c6565b7f8567f5af844d68168987760a7ce1762804b9de703165fc50ce4fa85246016c915f5260996020527f2c1f6cfa08e101d854b66353df53d6eb32e981bfc1a8351f458fd54b64cfc181546001600160a01b03166108b9565b6107cd7f84b42b3d5e6851893d4418c6ebc9a4727e78afdf84e73674c8b9c1c2b1904e2d81565b6107cd7f5be667ef1f4c6c279e2aa7e62595a1045043db6a43145cb438c6d36e7a3c3ed881565b6107cd7f876943525608da6d95be5925fe6c4fe80e8622c8a76e7414f80e8ba210e0711c81565b6107cd7f76d62e541b8d573110ca3eb9003e96426f530422a76712d1356f6c6ce50541ca81565b7f33271b56873d8abb908de4853f90a8a0ef8829548ec0bf6c298feed3917c50a25f5260976020527f799f922a2554690a852ce3427a174a9d0f64f94f53730bd0c6e1e1fdc54799ae546107cd565b6107ee611505366004613117565b6125e7565b6107ee611518366004613117565b612628565b6107cd7f8567f5af844d68168987760a7ce1762804b9de703165fc50ce4fa85246016c9181565b6107ee611552366004613130565b61265c565b6107cd7fd7e49a298cb2719de62e5df1024257eed316db6337361b3a30d56a753240460781565b6107cd5f8051602061336583398151915281565b7f29384ec8473b541e7a7850226a4d1906a700f14cc394266ee08800ba62dc3af95f52609a6020527f249a87d52af73222d4a479ebe40b904ebabf543d4706240658e6092ca9388c26546001600160a01b03166108b9565b6107ee6115f8366004613130565b61268a565b7f84b42b3d5e6851893d4418c6ebc9a4727e78afdf84e73674c8b9c1c2b1904e2d5f52609a6020527f492656d26f3accf1cea0a783c131178deb1c8733d9c679e5cecde8df27a9ad95546001600160a01b03166108b9565b610791611663366004613147565b6126cb565b6107cd7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c81565b6107ee61169d366004613117565b6126f5565b7f76d62e541b8d573110ca3eb9003e96426f530422a76712d1356f6c6ce50541ca5f52609a6020527f86012a00795dbb89a313ebfe1e3a458a84ce87cdb7c6a7971caf999119513627546001600160a01b03166108b9565b7f602490b12960e59ddb584affd1da6cd5692f4455c1ba0cc4e865af81e111ebe25f52609a6020527fd54531c6bba5beed207277daa8e0e65bdfb6aece3f974fb0394154eb989d1d42546001600160a01b03166108b9565b6107cd5f81565b7f4c9466ca1bf288a7334a7494f09a0acc38ee31628eaf8c68b574b9f0ec22a9c15f52609a6020527f2df8b6a0a0cdef82de21edc971a252888647231024af6c12c533010687315b1f546001600160a01b03166108b9565b6107cd7f3d88d1233771c5c30791fb6805b7f91424dae1e5a68a57da846ca7ff83c6402981565b6107ee6117e6366004613117565b612729565b7f5c00ec259bace293b50174e499c413ca897b4bcb54ed468b7e6bade51c6a9f965f52609a6020527fcda3409ebc466b6ac691341dcf169fdb28e448f6cf860239292340843aa52984546001600160a01b03166108b9565b6107cd7f8e96355022bb9b9f4d9d4e01fe2b58f45e78549c982c401c96f75f33c5de457e81565b610791611878366004613199565b5f908152609a60205260409020546001600160a01b0390811691161490565b5f805160206133658339815191525f5260986020527f72873426992e590ffa79a15175a7f2c8cf191cf402b7484af189cd125376fcdc546107cd565b6107ee6118e1366004613117565b61275d565b7fe5240448c78dfcff5bda4e4eed69ba9635df15d79da0e8a4cf889217106fa45b5f52609a6020527fcce26741946f801b25ce3c49451d2dd729b689d4d0d23ea57849f6c666bb5ee3546001600160a01b03166108b9565b6107cd5f8051602061334583398151915281565b6107ee611960366004613117565b612791565b6107ee611973366004613130565b6127c5565b6107cd7f3c6dcff840f36f9818a73b67d9d00197362f63687bd52e3c277bd0ffb30dde3381565b6107ee6119ad366004613117565b612806565b6107cd7f690795c57e13eaf2526f76202b6799e9afdb069afca1e572f693953d013569d881565b6107ee6119e7366004613117565b61283a565b7f09dfa94a9be22222b511ecf509f49718fc08fbe3ada37a44d2022489eca3b44c5f52609b6020527fe98ed444639fcf7afa9e33a4ea67ac4155aa97d88f546111c8d1357c98dbca00546001600160a01b03166108b9565b5f805160206133a58339815191525f5260986020527f0ccceacf55cd457ff25dca300775a2cb43db2c0b890d3ee063f4abba210c504f546107cd565b6107ee611a8e366004613147565b61286e565b6107cd7fdb5d1c2a9350ca010dcdf3953da11a9e8f7c5e2918cdfa65500e84e7fd4fde7d81565b7f9f919a2294d86593fbcec81ea71aa683cec51c78771c642f8894ba8f394970525f52609a6020527f99c8bd240e5bd2ee897b6a14ca3ca43a06f489dad5e38985ad188e67459dc6d7546001600160a01b03166108b9565b7f95bf18d68834a11aaae7b73ff6037326f163a81a7b5ea80cba96856ce2284fbd5f52609b6020527f20c8b2f4826823ac4cd62278270e8be9c7f63b9fe22e1f148f5369ec26bc69f4546001600160a01b03166108b9565b6107ee611b78366004613117565b612892565b6107ee611b8b366004613117565b61290a565b6107cd7f46b41285bb7b8513ce3a9d95cdf6916699fb00b47326e8d3850be1b6186e034981565b7f3e4ded42f360c2e6b1251d584085ae1d9aa9cbed18687fac6b6aef8eed1c5ad35f52609a6020527fe298efc0f606c3be77912795055e173991a2c395633d4b0a06597a13b46e0c0b546001600160a01b03166108b9565b7ff935b8bf66b325637ad32ca875b588849cf4026791b79b4dc20623cd3dd36e205f52609a6020527f18d210dd586fe31598c73b0131261a1f7a576051e2667bbf5a4f8a01cf2f1392546001600160a01b03166108b9565b7f08593985ae1bebfb02f6c30105edffb176a6d87c9fad54c434bf9b58f67e81b65f5260976020527fb645ae2edae7c0716931b638cd9631a05f9a39fec3f15294f7f3af49f2f51ca8546107cd565b6107cd7f5c00ec259bace293b50174e499c413ca897b4bcb54ed468b7e6bade51c6a9f9681565b5f805160206134258339815191525f5260986020525f80516020613405833981519152546107cd565b6107ee611d14366004613117565b61293e565b6107cd7f09dfa94a9be22222b511ecf509f49718fc08fbe3ada37a44d2022489eca3b44c81565b6107ee611d4e366004613117565b612971565b7f876943525608da6d95be5925fe6c4fe80e8622c8a76e7414f80e8ba210e0711c5f5260976020527fea561c0677f20715a0e74899b0381a0fa1265a58e9e02fb4a5a398d87555d1fe546107cd565b7ff822b1f0c3b886ce1cdf1c2a5317844145470db33b02c63cae4813f8c9b2dc175f5260976020527f9863915096f3522486953e53c4b97560d72679216b36fd98b4bdd4eca3a01eaa546107cd565b6107ee611dff366004613130565b6129a5565b5f6001600160e01b03198216637965db0b60e01b1480611e3457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f611e44816129c6565b611e6e7fdb5d1c2a9350ca010dcdf3953da11a9e8f7c5e2918cdfa65500e84e7fd4fde7d836129d3565b5050565b5f611e7c816129c6565b611e6e7ff935b8bf66b325637ad32ca875b588849cf4026791b79b4dc20623cd3dd36e20836129d3565b5f80516020613305833981519152611ebd816129c6565b611ed45f8051602061338583398151915283612a42565b611e6e612a89565b5f611ee6816129c6565b611e6e7fc5b1a6a0b843563e6a17ca90bc59d2315c523be427d0c9c2ba08d77ced4f46b1836129d3565b5f611f1a816129c6565b611e6e7f8e96355022bb9b9f4d9d4e01fe2b58f45e78549c982c401c96f75f33c5de457e836129d3565b5f611f4e816129c6565b611e6e7f5be667ef1f4c6c279e2aa7e62595a1045043db6a43145cb438c6d36e7a3c3ed8836129d3565b5f611f82816129c6565b611e6e7fd7e49a298cb2719de62e5df1024257eed316db6337361b3a30d56a7532404607836129d3565b5f82815260656020526040902060010154611fc6816129c6565b611fd08383612c3c565b505050565b5f611fdf816129c6565b611e6e7f5c00ec259bace293b50174e499c413ca897b4bcb54ed468b7e6bade51c6a9f96836129d3565b6001600160a01b038116331461207e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b611e6e8282612cc1565b5f612092816129c6565b611e6e7f3d88d1233771c5c30791fb6805b7f91424dae1e5a68a57da846ca7ff83c64029836129d3565b5f6120c6816129c6565b611e6e7fa4083e7a78dd898def03c51ce199cb4286b8828be4f6f46e04aec61761967471836129d3565b5f6120fa816129c6565b611e6e7f690795c57e13eaf2526f76202b6799e9afdb069afca1e572f693953d013569d8836129d3565b5f54610100900460ff161580801561214257505f54600160ff909116105b8061215b5750303b15801561215b57505f5460ff166001145b6121be5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401612075565b5f805460ff1916600117905580156121df575f805461ff0019166101001790555b6121e883612d27565b6121f182612d27565b6121f9612d4e565b61222c7ff822b1f0c3b886ce1cdf1c2a5317844145470db33b02c63cae4813f8c9b2dc176801bc16d674ec800000612db8565b61225e7f9b1ae66636378b5626322a52e22518dd40bb04881cf0440ed16a20c0f902b242670de0b6b3a7640000612db8565b6122917f876943525608da6d95be5925fe6c4fe80e8622c8a76e7414f80e8ba210e0711c6801ae361fc1451c0000612db8565b6122bd7f33271b56873d8abb908de4853f90a8a0ef8829548ec0bf6c298feed3917c50a2612710612db8565b6122ef7f08593985ae1bebfb02f6c30105edffb176a6d87c9fad54c434bf9b58f67e81b6670de0b6b3a7640000612db8565b61231a7f59b5f464ec5829246a81f005456c8cb714ee224aea800742e2dae497263e466960ff612db8565b6123375f80516020613425833981519152655af3107a4000612a42565b6123585f8051602061338583398151915269021e19e0c9bab2400000612a42565b6123755f80516020613345833981519152655af3107a4000612a42565b6123965f8051602061332583398151915269021e19e0c9bab2400000612a42565b6123ae5f805160206133658339815191526032612a42565b6123c75f805160206133a5833981519152610258612a42565b6123f17f84b42b3d5e6851893d4418c6ebc9a4727e78afdf84e73674c8b9c1c2b1904e2d836129d3565b6123fb5f84612c3c565b8015611fd0575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b5f611e347f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c836126cb565b5f80516020613305833981519152612486816129c6565b611e6e7f46b41285bb7b8513ce3a9d95cdf6916699fb00b47326e8d3850be1b6186e034983612a42565b5f6124ba816129c6565b611e6e7fbd34382cd421c5250595893a4ed6cdb2125e6be7d5e0a9dbc469de5d583adfcf836129d3565b5f6124ee816129c6565b611ed45f8051602061332583398151915283612a42565b5f61250f816129c6565b611e6e7f3e4ded42f360c2e6b1251d584085ae1d9aa9cbed18687fac6b6aef8eed1c5ad3836129d3565b5f611e345f80516020613305833981519152836126cb565b5f80516020613305833981519152612568816129c6565b611e6e7f3c6dcff840f36f9818a73b67d9d00197362f63687bd52e3c277bd0ffb30dde3383612a42565b5f61259c816129c6565b611e6e7fb134afa3abad633a84ab2d33dd5171f2b371e38b0f7bca001383aaf08ed6d2d1836129d3565b5f6125d0816129c6565b611e6e5f805160206133a583398151915283612a42565b5f805160206133058339815191526125fe816129c6565b611e6e7f8567f5af844d68168987760a7ce1762804b9de703165fc50ce4fa85246016c9183612dff565b5f612632816129c6565b611e6e7f95bf18d68834a11aaae7b73ff6037326f163a81a7b5ea80cba96856ce2284fbd83612e66565b5f80516020613305833981519152612673816129c6565b611ed45f8051602061342583398151915283612a42565b5f805160206133058339815191526126a1816129c6565b611e6e7fc54a7590fe6738d7a81f393c1cf5ab3e577c91781037d93a5a9f5ce44f19eb5183612a42565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6126ff816129c6565b611e6e7f8d4341681b282735dd0d55670ff8e0ad68a80cbfc2cee847065e9f771470f88f836129d3565b5f612733816129c6565b611e6e7fe5240448c78dfcff5bda4e4eed69ba9635df15d79da0e8a4cf889217106fa45b836129d3565b5f612767816129c6565b611e6e7f602490b12960e59ddb584affd1da6cd5692f4455c1ba0cc4e865af81e111ebe2836129d3565b5f61279b816129c6565b611e6e7f09dfa94a9be22222b511ecf509f49718fc08fbe3ada37a44d2022489eca3b44c83612e66565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c6127ef816129c6565b611e6e5f8051602061336583398151915283612a42565b5f612810816129c6565b611e6e7f76d62e541b8d573110ca3eb9003e96426f530422a76712d1356f6c6ce50541ca836129d3565b5f612844816129c6565b611e6e7f9f919a2294d86593fbcec81ea71aa683cec51c78771c642f8894ba8f39497052836129d3565b5f82815260656020526040902060010154612888816129c6565b611fd08383612cc1565b5f61289c816129c6565b5f805160206133c58339815191525f90815260996020527f15be86566e203c1f41b9ae149d9fbb01b2c14f503704423d739a6e3d2db5a9ee546001600160a01b0316906128e99084612c3c565b6129005f805160206133c583398151915284612dff565b611fd05f82612cc1565b5f612914816129c6565b611e6e7f4c9466ca1bf288a7334a7494f09a0acc38ee31628eaf8c68b574b9f0ec22a9c1836129d3565b5f612948816129c6565b611e6e7e665c1b06e0667c56a1ca1706b7573435d1b9162c6327b5d0ea1daeb491ad0d836129d3565b5f61297b816129c6565b611e6e7f29384ec8473b541e7a7850226a4d1906a700f14cc394266ee08800ba62dc3af9836129d3565b5f6129af816129c6565b611ed45f8051602061334583398151915283612a42565b6129d08133612ecd565b50565b6129dc81612d27565b5f828152609a602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251858152918201527f5de40a806536a2029221dac2c8887ac9f11952fcc1ed3d7cfb4476dd5259b74091015b60405180910390a15050565b5f8281526098602090815260409182902083905581518481529081018390527f9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c465816309101612a36565b5f805160206134258339815191525f5260986020525f805160206134058339815191525415801590612add57505f805160206133458339815191525f5260986020525f805160206133e58339815191525415155b8015612b2d575060986020527ffcacc1044a5a1b4eb9c058396306426a857813d37a4fb6ccf5a3adde30e0c914545f805160206134258339815191525f525f805160206134058339815191525411155b8015612b7d575060986020527fd179a4a9329ee39fba707fd91c699ec0f088afc56731eb89ff424b873ac70844545f805160206133458339815191525f525f805160206133e58339815191525411155b8015612bba575060986020525f80516020613405833981519152545f805160206133458339815191525f525f805160206133e58339815191525411155b8015612c1d575060986020527ffcacc1044a5a1b4eb9c058396306426a857813d37a4fb6ccf5a3adde30e0c914545f805160206133258339815191525f527fd179a4a9329ee39fba707fd91c699ec0f088afc56731eb89ff424b873ac708445410155b612c3a5760405163e773e0a960e01b815260040160405180910390fd5b565b612c4682826126cb565b611e6e575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612c7d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612ccb82826126cb565b15611e6e575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0381166129d05760405163d92e233d60e01b815260040160405180910390fd5b5f54610100900460ff16612c3a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401612075565b5f8281526097602090815260409182902083905581518481529081018390527f9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c465816309101612a36565b612e0881612d27565b5f8281526099602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251858152918201527fcbdd341876786c7241ad12a5ce5ea46739a4ce7b1587d0c216dfa655a98e50a69101612a36565b612e6f81612d27565b5f828152609b602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251858152918201527f19aab10c6a9f5d648eaa15e2d515f8dfda570ee221e7c8cb9dc07694e68005bc9101612a36565b612ed782826126cb565b611e6e57612ee481612f26565b612eef836020612f38565b604051602001612f009291906131e3565b60408051601f198184030181529082905262461bcd60e51b825261207591600401613257565b6060611e346001600160a01b03831660145b60605f612f4683600261329d565b612f519060026132b4565b67ffffffffffffffff811115612f6957612f696132c7565b6040519080825280601f01601f191660200182016040528015612f93576020820181803683370190505b509050600360fc1b815f81518110612fad57612fad6132db565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110612fdb57612fdb6132db565b60200101906001600160f81b03191690815f1a9053505f612ffd84600261329d565b6130089060016132b4565b90505b600181111561307f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061303c5761303c6132db565b1a60f81b828281518110613052576130526132db565b60200101906001600160f81b03191690815f1a90535060049490941c93613078816132ef565b905061300b565b5083156130ce5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401612075565b9392505050565b5f602082840312156130e5575f80fd5b81356001600160e01b0319811681146130ce575f80fd5b80356001600160a01b0381168114613112575f80fd5b919050565b5f60208284031215613127575f80fd5b6130ce826130fc565b5f60208284031215613140575f80fd5b5035919050565b5f8060408385031215613158575f80fd5b82359150613168602084016130fc565b90509250929050565b5f8060408385031215613182575f80fd5b61318b836130fc565b9150613168602084016130fc565b5f80604083850312156131aa575f80fd5b6131b3836130fc565b946020939093013593505050565b5f5b838110156131db5781810151838201526020016131c3565b50505f910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161321a8160178501602088016131c1565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161324b8160288401602088016131c1565b01602801949350505050565b602081525f82518060208401526132758160408501602087016131c1565b601f01601f19169190910160400192915050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417611e3457611e34613289565b80820180821115611e3457611e34613289565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f816132fd576132fd613289565b505f19019056feaf290d8680820aad922855f39b306097b20e28774d6c1ad35a20325630c3a02c1c2fe98ddbbbffbcf7735c7446ffcddb5ccd2a4ec2ace0f7d90f73e9ff13fcc7b18278bb399a7088b8b0b26f4896d5ebaba4497c611bbe9d43abe92d9a1fe83d6f8d0b773ad4970d3e7d47623dc9ce06a1b4fe833bf451d06a47e774f9acaa63712c13b90acf399d7bc7625370ce37c64b5eba41011b0961a88c2ef1648870cf2cf2377da51daa9c0d7e3f98c7532a67ee5e9398afad7b7db6e578b978a27094df8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428f1b9b075a455aa4e85ab4edea73c8fe6d4e2e5e4c6675d6135fefdca5e95a258489bc07817c82dd59579d43388f707a6a0a4a614b58e7df61bb06baec0de2c1fa5a84fed05ba4c93fcc5ba1f4ad010e3bef3e6394b367aa10b3ec01997375cca26469706673582212207e8023528ebc11124bddb9cb8602596106598c299e0b12b4b38f5e81bfc8806c64736f6c63430008140033", +} + +// StaderConfigABI is the input ABI used to generate the binding from. +// Deprecated: Use StaderConfigMetaData.ABI instead. +var StaderConfigABI = StaderConfigMetaData.ABI + +// StaderConfigBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use StaderConfigMetaData.Bin instead. +var StaderConfigBin = StaderConfigMetaData.Bin + +// DeployStaderConfig deploys a new Ethereum contract, binding an instance of StaderConfig to it. +func DeployStaderConfig(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *StaderConfig, error) { + parsed, err := StaderConfigMetaData.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(StaderConfigBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &StaderConfig{StaderConfigCaller: StaderConfigCaller{contract: contract}, StaderConfigTransactor: StaderConfigTransactor{contract: contract}, StaderConfigFilterer: StaderConfigFilterer{contract: contract}}, nil +} + +// StaderConfig is an auto generated Go binding around an Ethereum contract. +type StaderConfig struct { + StaderConfigCaller // Read-only binding to the contract + StaderConfigTransactor // Write-only binding to the contract + StaderConfigFilterer // Log filterer for contract events +} + +// StaderConfigCaller is an auto generated read-only Go binding around an Ethereum contract. +type StaderConfigCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StaderConfigTransactor is an auto generated write-only Go binding around an Ethereum contract. +type StaderConfigTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StaderConfigFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type StaderConfigFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StaderConfigSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type StaderConfigSession struct { + Contract *StaderConfig // 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 +} + +// StaderConfigCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type StaderConfigCallerSession struct { + Contract *StaderConfigCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// StaderConfigTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type StaderConfigTransactorSession struct { + Contract *StaderConfigTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// StaderConfigRaw is an auto generated low-level Go binding around an Ethereum contract. +type StaderConfigRaw struct { + Contract *StaderConfig // Generic contract binding to access the raw methods on +} + +// StaderConfigCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type StaderConfigCallerRaw struct { + Contract *StaderConfigCaller // Generic read-only contract binding to access the raw methods on +} + +// StaderConfigTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type StaderConfigTransactorRaw struct { + Contract *StaderConfigTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewStaderConfig creates a new instance of StaderConfig, bound to a specific deployed contract. +func NewStaderConfig(address common.Address, backend bind.ContractBackend) (*StaderConfig, error) { + contract, err := bindStaderConfig(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &StaderConfig{StaderConfigCaller: StaderConfigCaller{contract: contract}, StaderConfigTransactor: StaderConfigTransactor{contract: contract}, StaderConfigFilterer: StaderConfigFilterer{contract: contract}}, nil +} + +// NewStaderConfigCaller creates a new read-only instance of StaderConfig, bound to a specific deployed contract. +func NewStaderConfigCaller(address common.Address, caller bind.ContractCaller) (*StaderConfigCaller, error) { + contract, err := bindStaderConfig(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &StaderConfigCaller{contract: contract}, nil +} + +// NewStaderConfigTransactor creates a new write-only instance of StaderConfig, bound to a specific deployed contract. +func NewStaderConfigTransactor(address common.Address, transactor bind.ContractTransactor) (*StaderConfigTransactor, error) { + contract, err := bindStaderConfig(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &StaderConfigTransactor{contract: contract}, nil +} + +// NewStaderConfigFilterer creates a new log filterer instance of StaderConfig, bound to a specific deployed contract. +func NewStaderConfigFilterer(address common.Address, filterer bind.ContractFilterer) (*StaderConfigFilterer, error) { + contract, err := bindStaderConfig(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &StaderConfigFilterer{contract: contract}, nil +} + +// bindStaderConfig binds a generic wrapper to an already deployed contract. +func bindStaderConfig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := StaderConfigMetaData.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 (_StaderConfig *StaderConfigRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StaderConfig.Contract.StaderConfigCaller.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 (_StaderConfig *StaderConfigRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StaderConfig.Contract.StaderConfigTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StaderConfig *StaderConfigRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StaderConfig.Contract.StaderConfigTransactor.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 (_StaderConfig *StaderConfigCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StaderConfig.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 (_StaderConfig *StaderConfigTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StaderConfig.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StaderConfig *StaderConfigTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StaderConfig.Contract.contract.Transact(opts, method, params...) +} + +// ADMIN is a free data retrieval call binding the contract method 0x2a0acc6a. +// +// Solidity: function ADMIN() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) ADMIN(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "ADMIN") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ADMIN is a free data retrieval call binding the contract method 0x2a0acc6a. +// +// Solidity: function ADMIN() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) ADMIN() ([32]byte, error) { + return _StaderConfig.Contract.ADMIN(&_StaderConfig.CallOpts) +} + +// ADMIN is a free data retrieval call binding the contract method 0x2a0acc6a. +// +// Solidity: function ADMIN() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) ADMIN() ([32]byte, error) { + return _StaderConfig.Contract.ADMIN(&_StaderConfig.CallOpts) +} + +// AUCTIONCONTRACT is a free data retrieval call binding the contract method 0xb11c699d. +// +// Solidity: function AUCTION_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) AUCTIONCONTRACT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "AUCTION_CONTRACT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// AUCTIONCONTRACT is a free data retrieval call binding the contract method 0xb11c699d. +// +// Solidity: function AUCTION_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) AUCTIONCONTRACT() ([32]byte, error) { + return _StaderConfig.Contract.AUCTIONCONTRACT(&_StaderConfig.CallOpts) +} + +// AUCTIONCONTRACT is a free data retrieval call binding the contract method 0xb11c699d. +// +// Solidity: function AUCTION_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) AUCTIONCONTRACT() ([32]byte, error) { + return _StaderConfig.Contract.AUCTIONCONTRACT(&_StaderConfig.CallOpts) +} + +// DECIMALS is a free data retrieval call binding the contract method 0x2e0f2625. +// +// Solidity: function DECIMALS() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) DECIMALS(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "DECIMALS") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DECIMALS is a free data retrieval call binding the contract method 0x2e0f2625. +// +// Solidity: function DECIMALS() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) DECIMALS() ([32]byte, error) { + return _StaderConfig.Contract.DECIMALS(&_StaderConfig.CallOpts) +} + +// DECIMALS is a free data retrieval call binding the contract method 0x2e0f2625. +// +// Solidity: function DECIMALS() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) DECIMALS() ([32]byte, error) { + return _StaderConfig.Contract.DECIMALS(&_StaderConfig.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) DEFAULTADMINROLE() ([32]byte, error) { + return _StaderConfig.Contract.DEFAULTADMINROLE(&_StaderConfig.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _StaderConfig.Contract.DEFAULTADMINROLE(&_StaderConfig.CallOpts) +} + +// ETHXSUPPLYPORFEED is a free data retrieval call binding the contract method 0x2a9cc2c4. +// +// Solidity: function ETHX_SUPPLY_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) ETHXSUPPLYPORFEED(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "ETHX_SUPPLY_POR_FEED") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ETHXSUPPLYPORFEED is a free data retrieval call binding the contract method 0x2a9cc2c4. +// +// Solidity: function ETHX_SUPPLY_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) ETHXSUPPLYPORFEED() ([32]byte, error) { + return _StaderConfig.Contract.ETHXSUPPLYPORFEED(&_StaderConfig.CallOpts) +} + +// ETHXSUPPLYPORFEED is a free data retrieval call binding the contract method 0x2a9cc2c4. +// +// Solidity: function ETHX_SUPPLY_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) ETHXSUPPLYPORFEED() ([32]byte, error) { + return _StaderConfig.Contract.ETHXSUPPLYPORFEED(&_StaderConfig.CallOpts) +} + +// ETHBALANCEPORFEED is a free data retrieval call binding the contract method 0xc60470d3. +// +// Solidity: function ETH_BALANCE_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) ETHBALANCEPORFEED(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "ETH_BALANCE_POR_FEED") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ETHBALANCEPORFEED is a free data retrieval call binding the contract method 0xc60470d3. +// +// Solidity: function ETH_BALANCE_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) ETHBALANCEPORFEED() ([32]byte, error) { + return _StaderConfig.Contract.ETHBALANCEPORFEED(&_StaderConfig.CallOpts) +} + +// ETHBALANCEPORFEED is a free data retrieval call binding the contract method 0xc60470d3. +// +// Solidity: function ETH_BALANCE_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) ETHBALANCEPORFEED() ([32]byte, error) { + return _StaderConfig.Contract.ETHBALANCEPORFEED(&_StaderConfig.CallOpts) +} + +// ETHDEPOSITCONTRACT is a free data retrieval call binding the contract method 0x77e8a0c3. +// +// Solidity: function ETH_DEPOSIT_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) ETHDEPOSITCONTRACT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "ETH_DEPOSIT_CONTRACT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ETHDEPOSITCONTRACT is a free data retrieval call binding the contract method 0x77e8a0c3. +// +// Solidity: function ETH_DEPOSIT_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) ETHDEPOSITCONTRACT() ([32]byte, error) { + return _StaderConfig.Contract.ETHDEPOSITCONTRACT(&_StaderConfig.CallOpts) +} + +// ETHDEPOSITCONTRACT is a free data retrieval call binding the contract method 0x77e8a0c3. +// +// Solidity: function ETH_DEPOSIT_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) ETHDEPOSITCONTRACT() ([32]byte, error) { + return _StaderConfig.Contract.ETHDEPOSITCONTRACT(&_StaderConfig.CallOpts) +} + +// ETHPERNODE is a free data retrieval call binding the contract method 0x67dcf134. +// +// Solidity: function ETH_PER_NODE() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) ETHPERNODE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "ETH_PER_NODE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ETHPERNODE is a free data retrieval call binding the contract method 0x67dcf134. +// +// Solidity: function ETH_PER_NODE() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) ETHPERNODE() ([32]byte, error) { + return _StaderConfig.Contract.ETHPERNODE(&_StaderConfig.CallOpts) +} + +// ETHPERNODE is a free data retrieval call binding the contract method 0x67dcf134. +// +// Solidity: function ETH_PER_NODE() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) ETHPERNODE() ([32]byte, error) { + return _StaderConfig.Contract.ETHPERNODE(&_StaderConfig.CallOpts) +} + +// ETHx is a free data retrieval call binding the contract method 0xf6c278c1. +// +// Solidity: function ETHx() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) ETHx(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "ETHx") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ETHx is a free data retrieval call binding the contract method 0xf6c278c1. +// +// Solidity: function ETHx() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) ETHx() ([32]byte, error) { + return _StaderConfig.Contract.ETHx(&_StaderConfig.CallOpts) +} + +// ETHx is a free data retrieval call binding the contract method 0xf6c278c1. +// +// Solidity: function ETHx() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) ETHx() ([32]byte, error) { + return _StaderConfig.Contract.ETHx(&_StaderConfig.CallOpts) +} + +// FULLDEPOSITSIZE is a free data retrieval call binding the contract method 0x792c8cc3. +// +// Solidity: function FULL_DEPOSIT_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) FULLDEPOSITSIZE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "FULL_DEPOSIT_SIZE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// FULLDEPOSITSIZE is a free data retrieval call binding the contract method 0x792c8cc3. +// +// Solidity: function FULL_DEPOSIT_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) FULLDEPOSITSIZE() ([32]byte, error) { + return _StaderConfig.Contract.FULLDEPOSITSIZE(&_StaderConfig.CallOpts) +} + +// FULLDEPOSITSIZE is a free data retrieval call binding the contract method 0x792c8cc3. +// +// Solidity: function FULL_DEPOSIT_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) FULLDEPOSITSIZE() ([32]byte, error) { + return _StaderConfig.Contract.FULLDEPOSITSIZE(&_StaderConfig.CallOpts) +} + +// MANAGER is a free data retrieval call binding the contract method 0x1b2df850. +// +// Solidity: function MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) MANAGER(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "MANAGER") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MANAGER is a free data retrieval call binding the contract method 0x1b2df850. +// +// Solidity: function MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) MANAGER() ([32]byte, error) { + return _StaderConfig.Contract.MANAGER(&_StaderConfig.CallOpts) +} + +// MANAGER is a free data retrieval call binding the contract method 0x1b2df850. +// +// Solidity: function MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) MANAGER() ([32]byte, error) { + return _StaderConfig.Contract.MANAGER(&_StaderConfig.CallOpts) +} + +// MAXDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x4c34a982. +// +// Solidity: function MAX_DEPOSIT_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) MAXDEPOSITAMOUNT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "MAX_DEPOSIT_AMOUNT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MAXDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x4c34a982. +// +// Solidity: function MAX_DEPOSIT_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) MAXDEPOSITAMOUNT() ([32]byte, error) { + return _StaderConfig.Contract.MAXDEPOSITAMOUNT(&_StaderConfig.CallOpts) +} + +// MAXDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x4c34a982. +// +// Solidity: function MAX_DEPOSIT_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) MAXDEPOSITAMOUNT() ([32]byte, error) { + return _StaderConfig.Contract.MAXDEPOSITAMOUNT(&_StaderConfig.CallOpts) +} + +// MAXWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0x44ba0ea2. +// +// Solidity: function MAX_WITHDRAW_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) MAXWITHDRAWAMOUNT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "MAX_WITHDRAW_AMOUNT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MAXWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0x44ba0ea2. +// +// Solidity: function MAX_WITHDRAW_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) MAXWITHDRAWAMOUNT() ([32]byte, error) { + return _StaderConfig.Contract.MAXWITHDRAWAMOUNT(&_StaderConfig.CallOpts) +} + +// MAXWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0x44ba0ea2. +// +// Solidity: function MAX_WITHDRAW_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) MAXWITHDRAWAMOUNT() ([32]byte, error) { + return _StaderConfig.Contract.MAXWITHDRAWAMOUNT(&_StaderConfig.CallOpts) +} + +// MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST is a free data retrieval call binding the contract method 0x6176bbde. +// +// Solidity: function MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST is a free data retrieval call binding the contract method 0x6176bbde. +// +// Solidity: function MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST() ([32]byte, error) { + return _StaderConfig.Contract.MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST(&_StaderConfig.CallOpts) +} + +// MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST is a free data retrieval call binding the contract method 0x6176bbde. +// +// Solidity: function MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST() ([32]byte, error) { + return _StaderConfig.Contract.MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST(&_StaderConfig.CallOpts) +} + +// MINDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x1ea30fef. +// +// Solidity: function MIN_DEPOSIT_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) MINDEPOSITAMOUNT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "MIN_DEPOSIT_AMOUNT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MINDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x1ea30fef. +// +// Solidity: function MIN_DEPOSIT_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) MINDEPOSITAMOUNT() ([32]byte, error) { + return _StaderConfig.Contract.MINDEPOSITAMOUNT(&_StaderConfig.CallOpts) +} + +// MINDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x1ea30fef. +// +// Solidity: function MIN_DEPOSIT_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) MINDEPOSITAMOUNT() ([32]byte, error) { + return _StaderConfig.Contract.MINDEPOSITAMOUNT(&_StaderConfig.CallOpts) +} + +// MINWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0xb6857844. +// +// Solidity: function MIN_WITHDRAW_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) MINWITHDRAWAMOUNT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "MIN_WITHDRAW_AMOUNT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MINWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0xb6857844. +// +// Solidity: function MIN_WITHDRAW_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) MINWITHDRAWAMOUNT() ([32]byte, error) { + return _StaderConfig.Contract.MINWITHDRAWAMOUNT(&_StaderConfig.CallOpts) +} + +// MINWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0xb6857844. +// +// Solidity: function MIN_WITHDRAW_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) MINWITHDRAWAMOUNT() ([32]byte, error) { + return _StaderConfig.Contract.MINWITHDRAWAMOUNT(&_StaderConfig.CallOpts) +} + +// NODEELREWARDVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x0bdf3166. +// +// Solidity: function NODE_EL_REWARD_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) NODEELREWARDVAULTIMPLEMENTATION(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "NODE_EL_REWARD_VAULT_IMPLEMENTATION") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// NODEELREWARDVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x0bdf3166. +// +// Solidity: function NODE_EL_REWARD_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) NODEELREWARDVAULTIMPLEMENTATION() ([32]byte, error) { + return _StaderConfig.Contract.NODEELREWARDVAULTIMPLEMENTATION(&_StaderConfig.CallOpts) +} + +// NODEELREWARDVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x0bdf3166. +// +// Solidity: function NODE_EL_REWARD_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) NODEELREWARDVAULTIMPLEMENTATION() ([32]byte, error) { + return _StaderConfig.Contract.NODEELREWARDVAULTIMPLEMENTATION(&_StaderConfig.CallOpts) +} + +// OPERATOR is a free data retrieval call binding the contract method 0x983d2737. +// +// Solidity: function OPERATOR() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) OPERATOR(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "OPERATOR") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATOR is a free data retrieval call binding the contract method 0x983d2737. +// +// Solidity: function OPERATOR() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) OPERATOR() ([32]byte, error) { + return _StaderConfig.Contract.OPERATOR(&_StaderConfig.CallOpts) +} + +// OPERATOR is a free data retrieval call binding the contract method 0x983d2737. +// +// Solidity: function OPERATOR() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) OPERATOR() ([32]byte, error) { + return _StaderConfig.Contract.OPERATOR(&_StaderConfig.CallOpts) +} + +// OPERATORMAXNAMELENGTH is a free data retrieval call binding the contract method 0x5455e472. +// +// Solidity: function OPERATOR_MAX_NAME_LENGTH() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) OPERATORMAXNAMELENGTH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "OPERATOR_MAX_NAME_LENGTH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORMAXNAMELENGTH is a free data retrieval call binding the contract method 0x5455e472. +// +// Solidity: function OPERATOR_MAX_NAME_LENGTH() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) OPERATORMAXNAMELENGTH() ([32]byte, error) { + return _StaderConfig.Contract.OPERATORMAXNAMELENGTH(&_StaderConfig.CallOpts) +} + +// OPERATORMAXNAMELENGTH is a free data retrieval call binding the contract method 0x5455e472. +// +// Solidity: function OPERATOR_MAX_NAME_LENGTH() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) OPERATORMAXNAMELENGTH() ([32]byte, error) { + return _StaderConfig.Contract.OPERATORMAXNAMELENGTH(&_StaderConfig.CallOpts) +} + +// OPERATORREWARDCOLLECTOR is a free data retrieval call binding the contract method 0x79175a74. +// +// Solidity: function OPERATOR_REWARD_COLLECTOR() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) OPERATORREWARDCOLLECTOR(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "OPERATOR_REWARD_COLLECTOR") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORREWARDCOLLECTOR is a free data retrieval call binding the contract method 0x79175a74. +// +// Solidity: function OPERATOR_REWARD_COLLECTOR() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) OPERATORREWARDCOLLECTOR() ([32]byte, error) { + return _StaderConfig.Contract.OPERATORREWARDCOLLECTOR(&_StaderConfig.CallOpts) +} + +// OPERATORREWARDCOLLECTOR is a free data retrieval call binding the contract method 0x79175a74. +// +// Solidity: function OPERATOR_REWARD_COLLECTOR() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) OPERATORREWARDCOLLECTOR() ([32]byte, error) { + return _StaderConfig.Contract.OPERATORREWARDCOLLECTOR(&_StaderConfig.CallOpts) +} + +// PENALTYCONTRACT is a free data retrieval call binding the contract method 0x1bf6a41c. +// +// Solidity: function PENALTY_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) PENALTYCONTRACT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "PENALTY_CONTRACT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PENALTYCONTRACT is a free data retrieval call binding the contract method 0x1bf6a41c. +// +// Solidity: function PENALTY_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) PENALTYCONTRACT() ([32]byte, error) { + return _StaderConfig.Contract.PENALTYCONTRACT(&_StaderConfig.CallOpts) +} + +// PENALTYCONTRACT is a free data retrieval call binding the contract method 0x1bf6a41c. +// +// Solidity: function PENALTY_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) PENALTYCONTRACT() ([32]byte, error) { + return _StaderConfig.Contract.PENALTYCONTRACT(&_StaderConfig.CallOpts) +} + +// PERMISSIONEDNODEREGISTRY is a free data retrieval call binding the contract method 0x4191e0fe. +// +// Solidity: function PERMISSIONED_NODE_REGISTRY() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) PERMISSIONEDNODEREGISTRY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONED_NODE_REGISTRY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PERMISSIONEDNODEREGISTRY is a free data retrieval call binding the contract method 0x4191e0fe. +// +// Solidity: function PERMISSIONED_NODE_REGISTRY() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) PERMISSIONEDNODEREGISTRY() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONEDNODEREGISTRY(&_StaderConfig.CallOpts) +} + +// PERMISSIONEDNODEREGISTRY is a free data retrieval call binding the contract method 0x4191e0fe. +// +// Solidity: function PERMISSIONED_NODE_REGISTRY() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) PERMISSIONEDNODEREGISTRY() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONEDNODEREGISTRY(&_StaderConfig.CallOpts) +} + +// PERMISSIONEDPOOL is a free data retrieval call binding the contract method 0x52112bd3. +// +// Solidity: function PERMISSIONED_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) PERMISSIONEDPOOL(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONED_POOL") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PERMISSIONEDPOOL is a free data retrieval call binding the contract method 0x52112bd3. +// +// Solidity: function PERMISSIONED_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) PERMISSIONEDPOOL() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONEDPOOL(&_StaderConfig.CallOpts) +} + +// PERMISSIONEDPOOL is a free data retrieval call binding the contract method 0x52112bd3. +// +// Solidity: function PERMISSIONED_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) PERMISSIONEDPOOL() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONEDPOOL(&_StaderConfig.CallOpts) +} + +// PERMISSIONEDSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x12020075. +// +// Solidity: function PERMISSIONED_SOCIALIZING_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) PERMISSIONEDSOCIALIZINGPOOL(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONED_SOCIALIZING_POOL") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PERMISSIONEDSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x12020075. +// +// Solidity: function PERMISSIONED_SOCIALIZING_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) PERMISSIONEDSOCIALIZINGPOOL() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONEDSOCIALIZINGPOOL(&_StaderConfig.CallOpts) +} + +// PERMISSIONEDSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x12020075. +// +// Solidity: function PERMISSIONED_SOCIALIZING_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) PERMISSIONEDSOCIALIZINGPOOL() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONEDSOCIALIZINGPOOL(&_StaderConfig.CallOpts) +} + +// PERMISSIONLESSNODEREGISTRY is a free data retrieval call binding the contract method 0x152a91da. +// +// Solidity: function PERMISSIONLESS_NODE_REGISTRY() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) PERMISSIONLESSNODEREGISTRY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONLESS_NODE_REGISTRY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PERMISSIONLESSNODEREGISTRY is a free data retrieval call binding the contract method 0x152a91da. +// +// Solidity: function PERMISSIONLESS_NODE_REGISTRY() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) PERMISSIONLESSNODEREGISTRY() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONLESSNODEREGISTRY(&_StaderConfig.CallOpts) +} + +// PERMISSIONLESSNODEREGISTRY is a free data retrieval call binding the contract method 0x152a91da. +// +// Solidity: function PERMISSIONLESS_NODE_REGISTRY() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) PERMISSIONLESSNODEREGISTRY() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONLESSNODEREGISTRY(&_StaderConfig.CallOpts) +} + +// PERMISSIONLESSPOOL is a free data retrieval call binding the contract method 0x7a87fa0b. +// +// Solidity: function PERMISSIONLESS_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) PERMISSIONLESSPOOL(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONLESS_POOL") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PERMISSIONLESSPOOL is a free data retrieval call binding the contract method 0x7a87fa0b. +// +// Solidity: function PERMISSIONLESS_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) PERMISSIONLESSPOOL() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONLESSPOOL(&_StaderConfig.CallOpts) +} + +// PERMISSIONLESSPOOL is a free data retrieval call binding the contract method 0x7a87fa0b. +// +// Solidity: function PERMISSIONLESS_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) PERMISSIONLESSPOOL() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONLESSPOOL(&_StaderConfig.CallOpts) +} + +// PERMISSIONLESSSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x3b6bcca0. +// +// Solidity: function PERMISSIONLESS_SOCIALIZING_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) PERMISSIONLESSSOCIALIZINGPOOL(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONLESS_SOCIALIZING_POOL") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PERMISSIONLESSSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x3b6bcca0. +// +// Solidity: function PERMISSIONLESS_SOCIALIZING_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) PERMISSIONLESSSOCIALIZINGPOOL() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONLESSSOCIALIZINGPOOL(&_StaderConfig.CallOpts) +} + +// PERMISSIONLESSSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x3b6bcca0. +// +// Solidity: function PERMISSIONLESS_SOCIALIZING_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) PERMISSIONLESSSOCIALIZINGPOOL() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONLESSSOCIALIZINGPOOL(&_StaderConfig.CallOpts) +} + +// POOLSELECTOR is a free data retrieval call binding the contract method 0xdde63e8f. +// +// Solidity: function POOL_SELECTOR() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) POOLSELECTOR(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "POOL_SELECTOR") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// POOLSELECTOR is a free data retrieval call binding the contract method 0xdde63e8f. +// +// Solidity: function POOL_SELECTOR() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) POOLSELECTOR() ([32]byte, error) { + return _StaderConfig.Contract.POOLSELECTOR(&_StaderConfig.CallOpts) +} + +// POOLSELECTOR is a free data retrieval call binding the contract method 0xdde63e8f. +// +// Solidity: function POOL_SELECTOR() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) POOLSELECTOR() ([32]byte, error) { + return _StaderConfig.Contract.POOLSELECTOR(&_StaderConfig.CallOpts) +} + +// POOLUTILS is a free data retrieval call binding the contract method 0x85e2fcd3. +// +// Solidity: function POOL_UTILS() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) POOLUTILS(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "POOL_UTILS") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// POOLUTILS is a free data retrieval call binding the contract method 0x85e2fcd3. +// +// Solidity: function POOL_UTILS() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) POOLUTILS() ([32]byte, error) { + return _StaderConfig.Contract.POOLUTILS(&_StaderConfig.CallOpts) +} + +// POOLUTILS is a free data retrieval call binding the contract method 0x85e2fcd3. +// +// Solidity: function POOL_UTILS() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) POOLUTILS() ([32]byte, error) { + return _StaderConfig.Contract.POOLUTILS(&_StaderConfig.CallOpts) +} + +// PREDEPOSITSIZE is a free data retrieval call binding the contract method 0x0430246e. +// +// Solidity: function PRE_DEPOSIT_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) PREDEPOSITSIZE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "PRE_DEPOSIT_SIZE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PREDEPOSITSIZE is a free data retrieval call binding the contract method 0x0430246e. +// +// Solidity: function PRE_DEPOSIT_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) PREDEPOSITSIZE() ([32]byte, error) { + return _StaderConfig.Contract.PREDEPOSITSIZE(&_StaderConfig.CallOpts) +} + +// PREDEPOSITSIZE is a free data retrieval call binding the contract method 0x0430246e. +// +// Solidity: function PRE_DEPOSIT_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) PREDEPOSITSIZE() ([32]byte, error) { + return _StaderConfig.Contract.PREDEPOSITSIZE(&_StaderConfig.CallOpts) +} + +// REWARDTHRESHOLD is a free data retrieval call binding the contract method 0xe7bdba32. +// +// Solidity: function REWARD_THRESHOLD() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) REWARDTHRESHOLD(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "REWARD_THRESHOLD") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// REWARDTHRESHOLD is a free data retrieval call binding the contract method 0xe7bdba32. +// +// Solidity: function REWARD_THRESHOLD() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) REWARDTHRESHOLD() ([32]byte, error) { + return _StaderConfig.Contract.REWARDTHRESHOLD(&_StaderConfig.CallOpts) +} + +// REWARDTHRESHOLD is a free data retrieval call binding the contract method 0xe7bdba32. +// +// Solidity: function REWARD_THRESHOLD() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) REWARDTHRESHOLD() ([32]byte, error) { + return _StaderConfig.Contract.REWARDTHRESHOLD(&_StaderConfig.CallOpts) +} + +// SD is a free data retrieval call binding the contract method 0x384002a2. +// +// Solidity: function SD() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) SD(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "SD") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SD is a free data retrieval call binding the contract method 0x384002a2. +// +// Solidity: function SD() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) SD() ([32]byte, error) { + return _StaderConfig.Contract.SD(&_StaderConfig.CallOpts) +} + +// SD is a free data retrieval call binding the contract method 0x384002a2. +// +// Solidity: function SD() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) SD() ([32]byte, error) { + return _StaderConfig.Contract.SD(&_StaderConfig.CallOpts) +} + +// SDCOLLATERAL is a free data retrieval call binding the contract method 0xf122961f. +// +// Solidity: function SD_COLLATERAL() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) SDCOLLATERAL(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "SD_COLLATERAL") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SDCOLLATERAL is a free data retrieval call binding the contract method 0xf122961f. +// +// Solidity: function SD_COLLATERAL() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) SDCOLLATERAL() ([32]byte, error) { + return _StaderConfig.Contract.SDCOLLATERAL(&_StaderConfig.CallOpts) +} + +// SDCOLLATERAL is a free data retrieval call binding the contract method 0xf122961f. +// +// Solidity: function SD_COLLATERAL() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) SDCOLLATERAL() ([32]byte, error) { + return _StaderConfig.Contract.SDCOLLATERAL(&_StaderConfig.CallOpts) +} + +// SOCIALIZINGPOOLCYCLEDURATION is a free data retrieval call binding the contract method 0xbedcb34c. +// +// Solidity: function SOCIALIZING_POOL_CYCLE_DURATION() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) SOCIALIZINGPOOLCYCLEDURATION(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "SOCIALIZING_POOL_CYCLE_DURATION") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SOCIALIZINGPOOLCYCLEDURATION is a free data retrieval call binding the contract method 0xbedcb34c. +// +// Solidity: function SOCIALIZING_POOL_CYCLE_DURATION() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) SOCIALIZINGPOOLCYCLEDURATION() ([32]byte, error) { + return _StaderConfig.Contract.SOCIALIZINGPOOLCYCLEDURATION(&_StaderConfig.CallOpts) +} + +// SOCIALIZINGPOOLCYCLEDURATION is a free data retrieval call binding the contract method 0xbedcb34c. +// +// Solidity: function SOCIALIZING_POOL_CYCLE_DURATION() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) SOCIALIZINGPOOLCYCLEDURATION() ([32]byte, error) { + return _StaderConfig.Contract.SOCIALIZINGPOOLCYCLEDURATION(&_StaderConfig.CallOpts) +} + +// SOCIALIZINGPOOLOPTINCOOLINGPERIOD is a free data retrieval call binding the contract method 0x686a8b67. +// +// Solidity: function SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) SOCIALIZINGPOOLOPTINCOOLINGPERIOD(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SOCIALIZINGPOOLOPTINCOOLINGPERIOD is a free data retrieval call binding the contract method 0x686a8b67. +// +// Solidity: function SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) SOCIALIZINGPOOLOPTINCOOLINGPERIOD() ([32]byte, error) { + return _StaderConfig.Contract.SOCIALIZINGPOOLOPTINCOOLINGPERIOD(&_StaderConfig.CallOpts) +} + +// SOCIALIZINGPOOLOPTINCOOLINGPERIOD is a free data retrieval call binding the contract method 0x686a8b67. +// +// Solidity: function SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) SOCIALIZINGPOOLOPTINCOOLINGPERIOD() ([32]byte, error) { + return _StaderConfig.Contract.SOCIALIZINGPOOLOPTINCOOLINGPERIOD(&_StaderConfig.CallOpts) +} + +// STADERINSURANCEFUND is a free data retrieval call binding the contract method 0x1af0fff3. +// +// Solidity: function STADER_INSURANCE_FUND() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) STADERINSURANCEFUND(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "STADER_INSURANCE_FUND") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// STADERINSURANCEFUND is a free data retrieval call binding the contract method 0x1af0fff3. +// +// Solidity: function STADER_INSURANCE_FUND() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) STADERINSURANCEFUND() ([32]byte, error) { + return _StaderConfig.Contract.STADERINSURANCEFUND(&_StaderConfig.CallOpts) +} + +// STADERINSURANCEFUND is a free data retrieval call binding the contract method 0x1af0fff3. +// +// Solidity: function STADER_INSURANCE_FUND() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) STADERINSURANCEFUND() ([32]byte, error) { + return _StaderConfig.Contract.STADERINSURANCEFUND(&_StaderConfig.CallOpts) +} + +// STADERORACLE is a free data retrieval call binding the contract method 0x3871d0f1. +// +// Solidity: function STADER_ORACLE() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) STADERORACLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "STADER_ORACLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// STADERORACLE is a free data retrieval call binding the contract method 0x3871d0f1. +// +// Solidity: function STADER_ORACLE() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) STADERORACLE() ([32]byte, error) { + return _StaderConfig.Contract.STADERORACLE(&_StaderConfig.CallOpts) +} + +// STADERORACLE is a free data retrieval call binding the contract method 0x3871d0f1. +// +// Solidity: function STADER_ORACLE() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) STADERORACLE() ([32]byte, error) { + return _StaderConfig.Contract.STADERORACLE(&_StaderConfig.CallOpts) +} + +// STADERTREASURY is a free data retrieval call binding the contract method 0x841b83b3. +// +// Solidity: function STADER_TREASURY() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) STADERTREASURY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "STADER_TREASURY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// STADERTREASURY is a free data retrieval call binding the contract method 0x841b83b3. +// +// Solidity: function STADER_TREASURY() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) STADERTREASURY() ([32]byte, error) { + return _StaderConfig.Contract.STADERTREASURY(&_StaderConfig.CallOpts) +} + +// STADERTREASURY is a free data retrieval call binding the contract method 0x841b83b3. +// +// Solidity: function STADER_TREASURY() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) STADERTREASURY() ([32]byte, error) { + return _StaderConfig.Contract.STADERTREASURY(&_StaderConfig.CallOpts) +} + +// STAKEPOOLMANAGER is a free data retrieval call binding the contract method 0xa53bddd6. +// +// Solidity: function STAKE_POOL_MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) STAKEPOOLMANAGER(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "STAKE_POOL_MANAGER") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// STAKEPOOLMANAGER is a free data retrieval call binding the contract method 0xa53bddd6. +// +// Solidity: function STAKE_POOL_MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) STAKEPOOLMANAGER() ([32]byte, error) { + return _StaderConfig.Contract.STAKEPOOLMANAGER(&_StaderConfig.CallOpts) +} + +// STAKEPOOLMANAGER is a free data retrieval call binding the contract method 0xa53bddd6. +// +// Solidity: function STAKE_POOL_MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) STAKEPOOLMANAGER() ([32]byte, error) { + return _StaderConfig.Contract.STAKEPOOLMANAGER(&_StaderConfig.CallOpts) +} + +// TOTALFEE is a free data retrieval call binding the contract method 0x63db7eae. +// +// Solidity: function TOTAL_FEE() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) TOTALFEE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "TOTAL_FEE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// TOTALFEE is a free data retrieval call binding the contract method 0x63db7eae. +// +// Solidity: function TOTAL_FEE() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) TOTALFEE() ([32]byte, error) { + return _StaderConfig.Contract.TOTALFEE(&_StaderConfig.CallOpts) +} + +// TOTALFEE is a free data retrieval call binding the contract method 0x63db7eae. +// +// Solidity: function TOTAL_FEE() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) TOTALFEE() ([32]byte, error) { + return _StaderConfig.Contract.TOTALFEE(&_StaderConfig.CallOpts) +} + +// USERWITHDRAWMANAGER is a free data retrieval call binding the contract method 0x36854d63. +// +// Solidity: function USER_WITHDRAW_MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) USERWITHDRAWMANAGER(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "USER_WITHDRAW_MANAGER") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// USERWITHDRAWMANAGER is a free data retrieval call binding the contract method 0x36854d63. +// +// Solidity: function USER_WITHDRAW_MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) USERWITHDRAWMANAGER() ([32]byte, error) { + return _StaderConfig.Contract.USERWITHDRAWMANAGER(&_StaderConfig.CallOpts) +} + +// USERWITHDRAWMANAGER is a free data retrieval call binding the contract method 0x36854d63. +// +// Solidity: function USER_WITHDRAW_MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) USERWITHDRAWMANAGER() ([32]byte, error) { + return _StaderConfig.Contract.USERWITHDRAWMANAGER(&_StaderConfig.CallOpts) +} + +// VALIDATORWITHDRAWALVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x1c55cccd. +// +// Solidity: function VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) VALIDATORWITHDRAWALVAULTIMPLEMENTATION(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// VALIDATORWITHDRAWALVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x1c55cccd. +// +// Solidity: function VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) VALIDATORWITHDRAWALVAULTIMPLEMENTATION() ([32]byte, error) { + return _StaderConfig.Contract.VALIDATORWITHDRAWALVAULTIMPLEMENTATION(&_StaderConfig.CallOpts) +} + +// VALIDATORWITHDRAWALVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x1c55cccd. +// +// Solidity: function VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) VALIDATORWITHDRAWALVAULTIMPLEMENTATION() ([32]byte, error) { + return _StaderConfig.Contract.VALIDATORWITHDRAWALVAULTIMPLEMENTATION(&_StaderConfig.CallOpts) +} + +// VAULTFACTORY is a free data retrieval call binding the contract method 0x103f2907. +// +// Solidity: function VAULT_FACTORY() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) VAULTFACTORY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "VAULT_FACTORY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// VAULTFACTORY is a free data retrieval call binding the contract method 0x103f2907. +// +// Solidity: function VAULT_FACTORY() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) VAULTFACTORY() ([32]byte, error) { + return _StaderConfig.Contract.VAULTFACTORY(&_StaderConfig.CallOpts) +} + +// VAULTFACTORY is a free data retrieval call binding the contract method 0x103f2907. +// +// Solidity: function VAULT_FACTORY() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) VAULTFACTORY() ([32]byte, error) { + return _StaderConfig.Contract.VAULTFACTORY(&_StaderConfig.CallOpts) +} + +// WITHDRAWNKEYSBATCHSIZE is a free data retrieval call binding the contract method 0x88993d8b. +// +// Solidity: function WITHDRAWN_KEYS_BATCH_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) WITHDRAWNKEYSBATCHSIZE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "WITHDRAWN_KEYS_BATCH_SIZE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// WITHDRAWNKEYSBATCHSIZE is a free data retrieval call binding the contract method 0x88993d8b. +// +// Solidity: function WITHDRAWN_KEYS_BATCH_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) WITHDRAWNKEYSBATCHSIZE() ([32]byte, error) { + return _StaderConfig.Contract.WITHDRAWNKEYSBATCHSIZE(&_StaderConfig.CallOpts) +} + +// WITHDRAWNKEYSBATCHSIZE is a free data retrieval call binding the contract method 0x88993d8b. +// +// Solidity: function WITHDRAWN_KEYS_BATCH_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) WITHDRAWNKEYSBATCHSIZE() ([32]byte, error) { + return _StaderConfig.Contract.WITHDRAWNKEYSBATCHSIZE(&_StaderConfig.CallOpts) +} + +// GetAdmin is a free data retrieval call binding the contract method 0x6e9960c3. +// +// Solidity: function getAdmin() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetAdmin(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getAdmin") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetAdmin is a free data retrieval call binding the contract method 0x6e9960c3. +// +// Solidity: function getAdmin() view returns(address) +func (_StaderConfig *StaderConfigSession) GetAdmin() (common.Address, error) { + return _StaderConfig.Contract.GetAdmin(&_StaderConfig.CallOpts) +} + +// GetAdmin is a free data retrieval call binding the contract method 0x6e9960c3. +// +// Solidity: function getAdmin() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetAdmin() (common.Address, error) { + return _StaderConfig.Contract.GetAdmin(&_StaderConfig.CallOpts) +} + +// GetAuctionContract is a free data retrieval call binding the contract method 0x36c157f4. +// +// Solidity: function getAuctionContract() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetAuctionContract(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getAuctionContract") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetAuctionContract is a free data retrieval call binding the contract method 0x36c157f4. +// +// Solidity: function getAuctionContract() view returns(address) +func (_StaderConfig *StaderConfigSession) GetAuctionContract() (common.Address, error) { + return _StaderConfig.Contract.GetAuctionContract(&_StaderConfig.CallOpts) +} + +// GetAuctionContract is a free data retrieval call binding the contract method 0x36c157f4. +// +// Solidity: function getAuctionContract() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetAuctionContract() (common.Address, error) { + return _StaderConfig.Contract.GetAuctionContract(&_StaderConfig.CallOpts) +} + +// GetDecimals is a free data retrieval call binding the contract method 0xf0141d84. +// +// Solidity: function getDecimals() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetDecimals(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getDecimals") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetDecimals is a free data retrieval call binding the contract method 0xf0141d84. +// +// Solidity: function getDecimals() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetDecimals() (*big.Int, error) { + return _StaderConfig.Contract.GetDecimals(&_StaderConfig.CallOpts) +} + +// GetDecimals is a free data retrieval call binding the contract method 0xf0141d84. +// +// Solidity: function getDecimals() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetDecimals() (*big.Int, error) { + return _StaderConfig.Contract.GetDecimals(&_StaderConfig.CallOpts) +} + +// GetETHBalancePORFeedProxy is a free data retrieval call binding the contract method 0x489ed651. +// +// Solidity: function getETHBalancePORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetETHBalancePORFeedProxy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getETHBalancePORFeedProxy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetETHBalancePORFeedProxy is a free data retrieval call binding the contract method 0x489ed651. +// +// Solidity: function getETHBalancePORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigSession) GetETHBalancePORFeedProxy() (common.Address, error) { + return _StaderConfig.Contract.GetETHBalancePORFeedProxy(&_StaderConfig.CallOpts) +} + +// GetETHBalancePORFeedProxy is a free data retrieval call binding the contract method 0x489ed651. +// +// Solidity: function getETHBalancePORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetETHBalancePORFeedProxy() (common.Address, error) { + return _StaderConfig.Contract.GetETHBalancePORFeedProxy(&_StaderConfig.CallOpts) +} + +// GetETHDepositContract is a free data retrieval call binding the contract method 0x8f8b3867. +// +// Solidity: function getETHDepositContract() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetETHDepositContract(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getETHDepositContract") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetETHDepositContract is a free data retrieval call binding the contract method 0x8f8b3867. +// +// Solidity: function getETHDepositContract() view returns(address) +func (_StaderConfig *StaderConfigSession) GetETHDepositContract() (common.Address, error) { + return _StaderConfig.Contract.GetETHDepositContract(&_StaderConfig.CallOpts) +} + +// GetETHDepositContract is a free data retrieval call binding the contract method 0x8f8b3867. +// +// Solidity: function getETHDepositContract() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetETHDepositContract() (common.Address, error) { + return _StaderConfig.Contract.GetETHDepositContract(&_StaderConfig.CallOpts) +} + +// GetETHXSupplyPORFeedProxy is a free data retrieval call binding the contract method 0x2ca03f66. +// +// Solidity: function getETHXSupplyPORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetETHXSupplyPORFeedProxy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getETHXSupplyPORFeedProxy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetETHXSupplyPORFeedProxy is a free data retrieval call binding the contract method 0x2ca03f66. +// +// Solidity: function getETHXSupplyPORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigSession) GetETHXSupplyPORFeedProxy() (common.Address, error) { + return _StaderConfig.Contract.GetETHXSupplyPORFeedProxy(&_StaderConfig.CallOpts) +} + +// GetETHXSupplyPORFeedProxy is a free data retrieval call binding the contract method 0x2ca03f66. +// +// Solidity: function getETHXSupplyPORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetETHXSupplyPORFeedProxy() (common.Address, error) { + return _StaderConfig.Contract.GetETHXSupplyPORFeedProxy(&_StaderConfig.CallOpts) +} + +// GetETHxToken is a free data retrieval call binding the contract method 0xcc45dabe. +// +// Solidity: function getETHxToken() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetETHxToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getETHxToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetETHxToken is a free data retrieval call binding the contract method 0xcc45dabe. +// +// Solidity: function getETHxToken() view returns(address) +func (_StaderConfig *StaderConfigSession) GetETHxToken() (common.Address, error) { + return _StaderConfig.Contract.GetETHxToken(&_StaderConfig.CallOpts) +} + +// GetETHxToken is a free data retrieval call binding the contract method 0xcc45dabe. +// +// Solidity: function getETHxToken() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetETHxToken() (common.Address, error) { + return _StaderConfig.Contract.GetETHxToken(&_StaderConfig.CallOpts) +} + +// GetFullDepositSize is a free data retrieval call binding the contract method 0xfa71fcbb. +// +// Solidity: function getFullDepositSize() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetFullDepositSize(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getFullDepositSize") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetFullDepositSize is a free data retrieval call binding the contract method 0xfa71fcbb. +// +// Solidity: function getFullDepositSize() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetFullDepositSize() (*big.Int, error) { + return _StaderConfig.Contract.GetFullDepositSize(&_StaderConfig.CallOpts) +} + +// GetFullDepositSize is a free data retrieval call binding the contract method 0xfa71fcbb. +// +// Solidity: function getFullDepositSize() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetFullDepositSize() (*big.Int, error) { + return _StaderConfig.Contract.GetFullDepositSize(&_StaderConfig.CallOpts) +} + +// GetMaxDepositAmount is a free data retrieval call binding the contract method 0x5726a356. +// +// Solidity: function getMaxDepositAmount() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetMaxDepositAmount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getMaxDepositAmount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetMaxDepositAmount is a free data retrieval call binding the contract method 0x5726a356. +// +// Solidity: function getMaxDepositAmount() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetMaxDepositAmount() (*big.Int, error) { + return _StaderConfig.Contract.GetMaxDepositAmount(&_StaderConfig.CallOpts) +} + +// GetMaxDepositAmount is a free data retrieval call binding the contract method 0x5726a356. +// +// Solidity: function getMaxDepositAmount() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetMaxDepositAmount() (*big.Int, error) { + return _StaderConfig.Contract.GetMaxDepositAmount(&_StaderConfig.CallOpts) +} + +// GetMaxWithdrawAmount is a free data retrieval call binding the contract method 0x326a16a3. +// +// Solidity: function getMaxWithdrawAmount() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetMaxWithdrawAmount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getMaxWithdrawAmount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetMaxWithdrawAmount is a free data retrieval call binding the contract method 0x326a16a3. +// +// Solidity: function getMaxWithdrawAmount() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetMaxWithdrawAmount() (*big.Int, error) { + return _StaderConfig.Contract.GetMaxWithdrawAmount(&_StaderConfig.CallOpts) +} + +// GetMaxWithdrawAmount is a free data retrieval call binding the contract method 0x326a16a3. +// +// Solidity: function getMaxWithdrawAmount() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetMaxWithdrawAmount() (*big.Int, error) { + return _StaderConfig.Contract.GetMaxWithdrawAmount(&_StaderConfig.CallOpts) +} + +// GetMinBlockDelayToFinalizeWithdrawRequest is a free data retrieval call binding the contract method 0xd2cee8ba. +// +// Solidity: function getMinBlockDelayToFinalizeWithdrawRequest() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetMinBlockDelayToFinalizeWithdrawRequest(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getMinBlockDelayToFinalizeWithdrawRequest") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetMinBlockDelayToFinalizeWithdrawRequest is a free data retrieval call binding the contract method 0xd2cee8ba. +// +// Solidity: function getMinBlockDelayToFinalizeWithdrawRequest() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetMinBlockDelayToFinalizeWithdrawRequest() (*big.Int, error) { + return _StaderConfig.Contract.GetMinBlockDelayToFinalizeWithdrawRequest(&_StaderConfig.CallOpts) +} + +// GetMinBlockDelayToFinalizeWithdrawRequest is a free data retrieval call binding the contract method 0xd2cee8ba. +// +// Solidity: function getMinBlockDelayToFinalizeWithdrawRequest() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetMinBlockDelayToFinalizeWithdrawRequest() (*big.Int, error) { + return _StaderConfig.Contract.GetMinBlockDelayToFinalizeWithdrawRequest(&_StaderConfig.CallOpts) +} + +// GetMinDepositAmount is a free data retrieval call binding the contract method 0xf4914d33. +// +// Solidity: function getMinDepositAmount() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetMinDepositAmount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getMinDepositAmount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetMinDepositAmount is a free data retrieval call binding the contract method 0xf4914d33. +// +// Solidity: function getMinDepositAmount() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetMinDepositAmount() (*big.Int, error) { + return _StaderConfig.Contract.GetMinDepositAmount(&_StaderConfig.CallOpts) +} + +// GetMinDepositAmount is a free data retrieval call binding the contract method 0xf4914d33. +// +// Solidity: function getMinDepositAmount() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetMinDepositAmount() (*big.Int, error) { + return _StaderConfig.Contract.GetMinDepositAmount(&_StaderConfig.CallOpts) +} + +// GetMinWithdrawAmount is a free data retrieval call binding the contract method 0x14e1b8fd. +// +// Solidity: function getMinWithdrawAmount() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetMinWithdrawAmount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getMinWithdrawAmount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetMinWithdrawAmount is a free data retrieval call binding the contract method 0x14e1b8fd. +// +// Solidity: function getMinWithdrawAmount() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetMinWithdrawAmount() (*big.Int, error) { + return _StaderConfig.Contract.GetMinWithdrawAmount(&_StaderConfig.CallOpts) +} + +// GetMinWithdrawAmount is a free data retrieval call binding the contract method 0x14e1b8fd. +// +// Solidity: function getMinWithdrawAmount() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetMinWithdrawAmount() (*big.Int, error) { + return _StaderConfig.Contract.GetMinWithdrawAmount(&_StaderConfig.CallOpts) +} + +// GetNodeELRewardVaultImplementation is a free data retrieval call binding the contract method 0xe8fe1873. +// +// Solidity: function getNodeELRewardVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetNodeELRewardVaultImplementation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getNodeELRewardVaultImplementation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetNodeELRewardVaultImplementation is a free data retrieval call binding the contract method 0xe8fe1873. +// +// Solidity: function getNodeELRewardVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigSession) GetNodeELRewardVaultImplementation() (common.Address, error) { + return _StaderConfig.Contract.GetNodeELRewardVaultImplementation(&_StaderConfig.CallOpts) +} + +// GetNodeELRewardVaultImplementation is a free data retrieval call binding the contract method 0xe8fe1873. +// +// Solidity: function getNodeELRewardVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetNodeELRewardVaultImplementation() (common.Address, error) { + return _StaderConfig.Contract.GetNodeELRewardVaultImplementation(&_StaderConfig.CallOpts) +} + +// GetOperatorMaxNameLength is a free data retrieval call binding the contract method 0x10deba2b. +// +// Solidity: function getOperatorMaxNameLength() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetOperatorMaxNameLength(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getOperatorMaxNameLength") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetOperatorMaxNameLength is a free data retrieval call binding the contract method 0x10deba2b. +// +// Solidity: function getOperatorMaxNameLength() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetOperatorMaxNameLength() (*big.Int, error) { + return _StaderConfig.Contract.GetOperatorMaxNameLength(&_StaderConfig.CallOpts) +} + +// GetOperatorMaxNameLength is a free data retrieval call binding the contract method 0x10deba2b. +// +// Solidity: function getOperatorMaxNameLength() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetOperatorMaxNameLength() (*big.Int, error) { + return _StaderConfig.Contract.GetOperatorMaxNameLength(&_StaderConfig.CallOpts) +} + +// GetOperatorRewardsCollector is a free data retrieval call binding the contract method 0x278671bb. +// +// Solidity: function getOperatorRewardsCollector() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetOperatorRewardsCollector(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getOperatorRewardsCollector") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetOperatorRewardsCollector is a free data retrieval call binding the contract method 0x278671bb. +// +// Solidity: function getOperatorRewardsCollector() view returns(address) +func (_StaderConfig *StaderConfigSession) GetOperatorRewardsCollector() (common.Address, error) { + return _StaderConfig.Contract.GetOperatorRewardsCollector(&_StaderConfig.CallOpts) +} + +// GetOperatorRewardsCollector is a free data retrieval call binding the contract method 0x278671bb. +// +// Solidity: function getOperatorRewardsCollector() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetOperatorRewardsCollector() (common.Address, error) { + return _StaderConfig.Contract.GetOperatorRewardsCollector(&_StaderConfig.CallOpts) +} + +// GetPenaltyContract is a free data retrieval call binding the contract method 0x8910115c. +// +// Solidity: function getPenaltyContract() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPenaltyContract(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPenaltyContract") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPenaltyContract is a free data retrieval call binding the contract method 0x8910115c. +// +// Solidity: function getPenaltyContract() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPenaltyContract() (common.Address, error) { + return _StaderConfig.Contract.GetPenaltyContract(&_StaderConfig.CallOpts) +} + +// GetPenaltyContract is a free data retrieval call binding the contract method 0x8910115c. +// +// Solidity: function getPenaltyContract() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPenaltyContract() (common.Address, error) { + return _StaderConfig.Contract.GetPenaltyContract(&_StaderConfig.CallOpts) +} + +// GetPermissionedNodeRegistry is a free data retrieval call binding the contract method 0x5edc686e. +// +// Solidity: function getPermissionedNodeRegistry() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPermissionedNodeRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPermissionedNodeRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPermissionedNodeRegistry is a free data retrieval call binding the contract method 0x5edc686e. +// +// Solidity: function getPermissionedNodeRegistry() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPermissionedNodeRegistry() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionedNodeRegistry(&_StaderConfig.CallOpts) +} + +// GetPermissionedNodeRegistry is a free data retrieval call binding the contract method 0x5edc686e. +// +// Solidity: function getPermissionedNodeRegistry() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPermissionedNodeRegistry() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionedNodeRegistry(&_StaderConfig.CallOpts) +} + +// GetPermissionedPool is a free data retrieval call binding the contract method 0xa0b4079f. +// +// Solidity: function getPermissionedPool() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPermissionedPool(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPermissionedPool") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPermissionedPool is a free data retrieval call binding the contract method 0xa0b4079f. +// +// Solidity: function getPermissionedPool() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPermissionedPool() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionedPool(&_StaderConfig.CallOpts) +} + +// GetPermissionedPool is a free data retrieval call binding the contract method 0xa0b4079f. +// +// Solidity: function getPermissionedPool() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPermissionedPool() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionedPool(&_StaderConfig.CallOpts) +} + +// GetPermissionedSocializingPool is a free data retrieval call binding the contract method 0xa469e247. +// +// Solidity: function getPermissionedSocializingPool() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPermissionedSocializingPool(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPermissionedSocializingPool") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPermissionedSocializingPool is a free data retrieval call binding the contract method 0xa469e247. +// +// Solidity: function getPermissionedSocializingPool() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPermissionedSocializingPool() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionedSocializingPool(&_StaderConfig.CallOpts) +} + +// GetPermissionedSocializingPool is a free data retrieval call binding the contract method 0xa469e247. +// +// Solidity: function getPermissionedSocializingPool() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPermissionedSocializingPool() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionedSocializingPool(&_StaderConfig.CallOpts) +} + +// GetPermissionlessNodeRegistry is a free data retrieval call binding the contract method 0x360374a4. +// +// Solidity: function getPermissionlessNodeRegistry() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPermissionlessNodeRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPermissionlessNodeRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPermissionlessNodeRegistry is a free data retrieval call binding the contract method 0x360374a4. +// +// Solidity: function getPermissionlessNodeRegistry() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPermissionlessNodeRegistry() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionlessNodeRegistry(&_StaderConfig.CallOpts) +} + +// GetPermissionlessNodeRegistry is a free data retrieval call binding the contract method 0x360374a4. +// +// Solidity: function getPermissionlessNodeRegistry() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPermissionlessNodeRegistry() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionlessNodeRegistry(&_StaderConfig.CallOpts) +} + +// GetPermissionlessPool is a free data retrieval call binding the contract method 0x9ca76b73. +// +// Solidity: function getPermissionlessPool() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPermissionlessPool(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPermissionlessPool") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPermissionlessPool is a free data retrieval call binding the contract method 0x9ca76b73. +// +// Solidity: function getPermissionlessPool() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPermissionlessPool() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionlessPool(&_StaderConfig.CallOpts) +} + +// GetPermissionlessPool is a free data retrieval call binding the contract method 0x9ca76b73. +// +// Solidity: function getPermissionlessPool() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPermissionlessPool() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionlessPool(&_StaderConfig.CallOpts) +} + +// GetPermissionlessSocializingPool is a free data retrieval call binding the contract method 0x0a3fbd9a. +// +// Solidity: function getPermissionlessSocializingPool() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPermissionlessSocializingPool(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPermissionlessSocializingPool") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPermissionlessSocializingPool is a free data retrieval call binding the contract method 0x0a3fbd9a. +// +// Solidity: function getPermissionlessSocializingPool() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPermissionlessSocializingPool() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionlessSocializingPool(&_StaderConfig.CallOpts) +} + +// GetPermissionlessSocializingPool is a free data retrieval call binding the contract method 0x0a3fbd9a. +// +// Solidity: function getPermissionlessSocializingPool() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPermissionlessSocializingPool() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionlessSocializingPool(&_StaderConfig.CallOpts) +} + +// GetPoolSelector is a free data retrieval call binding the contract method 0x5458a106. +// +// Solidity: function getPoolSelector() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPoolSelector(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPoolSelector") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPoolSelector is a free data retrieval call binding the contract method 0x5458a106. +// +// Solidity: function getPoolSelector() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPoolSelector() (common.Address, error) { + return _StaderConfig.Contract.GetPoolSelector(&_StaderConfig.CallOpts) +} + +// GetPoolSelector is a free data retrieval call binding the contract method 0x5458a106. +// +// Solidity: function getPoolSelector() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPoolSelector() (common.Address, error) { + return _StaderConfig.Contract.GetPoolSelector(&_StaderConfig.CallOpts) +} + +// GetPoolUtils is a free data retrieval call binding the contract method 0x6ccb9d70. +// +// Solidity: function getPoolUtils() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPoolUtils(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPoolUtils") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPoolUtils is a free data retrieval call binding the contract method 0x6ccb9d70. +// +// Solidity: function getPoolUtils() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPoolUtils() (common.Address, error) { + return _StaderConfig.Contract.GetPoolUtils(&_StaderConfig.CallOpts) +} + +// GetPoolUtils is a free data retrieval call binding the contract method 0x6ccb9d70. +// +// Solidity: function getPoolUtils() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPoolUtils() (common.Address, error) { + return _StaderConfig.Contract.GetPoolUtils(&_StaderConfig.CallOpts) +} + +// GetPreDepositSize is a free data retrieval call binding the contract method 0x08297645. +// +// Solidity: function getPreDepositSize() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetPreDepositSize(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPreDepositSize") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetPreDepositSize is a free data retrieval call binding the contract method 0x08297645. +// +// Solidity: function getPreDepositSize() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetPreDepositSize() (*big.Int, error) { + return _StaderConfig.Contract.GetPreDepositSize(&_StaderConfig.CallOpts) +} + +// GetPreDepositSize is a free data retrieval call binding the contract method 0x08297645. +// +// Solidity: function getPreDepositSize() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetPreDepositSize() (*big.Int, error) { + return _StaderConfig.Contract.GetPreDepositSize(&_StaderConfig.CallOpts) +} + +// GetRewardsThreshold is a free data retrieval call binding the contract method 0x18829fc3. +// +// Solidity: function getRewardsThreshold() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetRewardsThreshold(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getRewardsThreshold") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetRewardsThreshold is a free data retrieval call binding the contract method 0x18829fc3. +// +// Solidity: function getRewardsThreshold() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetRewardsThreshold() (*big.Int, error) { + return _StaderConfig.Contract.GetRewardsThreshold(&_StaderConfig.CallOpts) +} + +// GetRewardsThreshold is a free data retrieval call binding the contract method 0x18829fc3. +// +// Solidity: function getRewardsThreshold() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetRewardsThreshold() (*big.Int, error) { + return _StaderConfig.Contract.GetRewardsThreshold(&_StaderConfig.CallOpts) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_StaderConfig *StaderConfigSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _StaderConfig.Contract.GetRoleAdmin(&_StaderConfig.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _StaderConfig.Contract.GetRoleAdmin(&_StaderConfig.CallOpts, role) +} + +// GetSDCollateral is a free data retrieval call binding the contract method 0xaa953795. +// +// Solidity: function getSDCollateral() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetSDCollateral(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getSDCollateral") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetSDCollateral is a free data retrieval call binding the contract method 0xaa953795. +// +// Solidity: function getSDCollateral() view returns(address) +func (_StaderConfig *StaderConfigSession) GetSDCollateral() (common.Address, error) { + return _StaderConfig.Contract.GetSDCollateral(&_StaderConfig.CallOpts) +} + +// GetSDCollateral is a free data retrieval call binding the contract method 0xaa953795. +// +// Solidity: function getSDCollateral() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetSDCollateral() (common.Address, error) { + return _StaderConfig.Contract.GetSDCollateral(&_StaderConfig.CallOpts) +} + +// GetSocializingPoolCycleDuration is a free data retrieval call binding the contract method 0x1ca197a5. +// +// Solidity: function getSocializingPoolCycleDuration() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetSocializingPoolCycleDuration(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getSocializingPoolCycleDuration") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetSocializingPoolCycleDuration is a free data retrieval call binding the contract method 0x1ca197a5. +// +// Solidity: function getSocializingPoolCycleDuration() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetSocializingPoolCycleDuration() (*big.Int, error) { + return _StaderConfig.Contract.GetSocializingPoolCycleDuration(&_StaderConfig.CallOpts) +} + +// GetSocializingPoolCycleDuration is a free data retrieval call binding the contract method 0x1ca197a5. +// +// Solidity: function getSocializingPoolCycleDuration() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetSocializingPoolCycleDuration() (*big.Int, error) { + return _StaderConfig.Contract.GetSocializingPoolCycleDuration(&_StaderConfig.CallOpts) +} + +// GetSocializingPoolOptInCoolingPeriod is a free data retrieval call binding the contract method 0x6e0fddfc. +// +// Solidity: function getSocializingPoolOptInCoolingPeriod() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetSocializingPoolOptInCoolingPeriod(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getSocializingPoolOptInCoolingPeriod") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetSocializingPoolOptInCoolingPeriod is a free data retrieval call binding the contract method 0x6e0fddfc. +// +// Solidity: function getSocializingPoolOptInCoolingPeriod() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetSocializingPoolOptInCoolingPeriod() (*big.Int, error) { + return _StaderConfig.Contract.GetSocializingPoolOptInCoolingPeriod(&_StaderConfig.CallOpts) +} + +// GetSocializingPoolOptInCoolingPeriod is a free data retrieval call binding the contract method 0x6e0fddfc. +// +// Solidity: function getSocializingPoolOptInCoolingPeriod() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetSocializingPoolOptInCoolingPeriod() (*big.Int, error) { + return _StaderConfig.Contract.GetSocializingPoolOptInCoolingPeriod(&_StaderConfig.CallOpts) +} + +// GetStaderInsuranceFund is a free data retrieval call binding the contract method 0xb5cfee6c. +// +// Solidity: function getStaderInsuranceFund() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetStaderInsuranceFund(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getStaderInsuranceFund") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetStaderInsuranceFund is a free data retrieval call binding the contract method 0xb5cfee6c. +// +// Solidity: function getStaderInsuranceFund() view returns(address) +func (_StaderConfig *StaderConfigSession) GetStaderInsuranceFund() (common.Address, error) { + return _StaderConfig.Contract.GetStaderInsuranceFund(&_StaderConfig.CallOpts) +} + +// GetStaderInsuranceFund is a free data retrieval call binding the contract method 0xb5cfee6c. +// +// Solidity: function getStaderInsuranceFund() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetStaderInsuranceFund() (common.Address, error) { + return _StaderConfig.Contract.GetStaderInsuranceFund(&_StaderConfig.CallOpts) +} + +// GetStaderOracle is a free data retrieval call binding the contract method 0xdefd024d. +// +// Solidity: function getStaderOracle() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetStaderOracle(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getStaderOracle") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetStaderOracle is a free data retrieval call binding the contract method 0xdefd024d. +// +// Solidity: function getStaderOracle() view returns(address) +func (_StaderConfig *StaderConfigSession) GetStaderOracle() (common.Address, error) { + return _StaderConfig.Contract.GetStaderOracle(&_StaderConfig.CallOpts) +} + +// GetStaderOracle is a free data retrieval call binding the contract method 0xdefd024d. +// +// Solidity: function getStaderOracle() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetStaderOracle() (common.Address, error) { + return _StaderConfig.Contract.GetStaderOracle(&_StaderConfig.CallOpts) +} + +// GetStaderToken is a free data retrieval call binding the contract method 0xe069f714. +// +// Solidity: function getStaderToken() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetStaderToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getStaderToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetStaderToken is a free data retrieval call binding the contract method 0xe069f714. +// +// Solidity: function getStaderToken() view returns(address) +func (_StaderConfig *StaderConfigSession) GetStaderToken() (common.Address, error) { + return _StaderConfig.Contract.GetStaderToken(&_StaderConfig.CallOpts) +} + +// GetStaderToken is a free data retrieval call binding the contract method 0xe069f714. +// +// Solidity: function getStaderToken() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetStaderToken() (common.Address, error) { + return _StaderConfig.Contract.GetStaderToken(&_StaderConfig.CallOpts) +} + +// GetStaderTreasury is a free data retrieval call binding the contract method 0x72ce78b0. +// +// Solidity: function getStaderTreasury() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetStaderTreasury(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getStaderTreasury") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetStaderTreasury is a free data retrieval call binding the contract method 0x72ce78b0. +// +// Solidity: function getStaderTreasury() view returns(address) +func (_StaderConfig *StaderConfigSession) GetStaderTreasury() (common.Address, error) { + return _StaderConfig.Contract.GetStaderTreasury(&_StaderConfig.CallOpts) +} + +// GetStaderTreasury is a free data retrieval call binding the contract method 0x72ce78b0. +// +// Solidity: function getStaderTreasury() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetStaderTreasury() (common.Address, error) { + return _StaderConfig.Contract.GetStaderTreasury(&_StaderConfig.CallOpts) +} + +// GetStakePoolManager is a free data retrieval call binding the contract method 0x2ec5e018. +// +// Solidity: function getStakePoolManager() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetStakePoolManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getStakePoolManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetStakePoolManager is a free data retrieval call binding the contract method 0x2ec5e018. +// +// Solidity: function getStakePoolManager() view returns(address) +func (_StaderConfig *StaderConfigSession) GetStakePoolManager() (common.Address, error) { + return _StaderConfig.Contract.GetStakePoolManager(&_StaderConfig.CallOpts) +} + +// GetStakePoolManager is a free data retrieval call binding the contract method 0x2ec5e018. +// +// Solidity: function getStakePoolManager() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetStakePoolManager() (common.Address, error) { + return _StaderConfig.Contract.GetStakePoolManager(&_StaderConfig.CallOpts) +} + +// GetStakedEthPerNode is a free data retrieval call binding the contract method 0xff387f3a. +// +// Solidity: function getStakedEthPerNode() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetStakedEthPerNode(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getStakedEthPerNode") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetStakedEthPerNode is a free data retrieval call binding the contract method 0xff387f3a. +// +// Solidity: function getStakedEthPerNode() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetStakedEthPerNode() (*big.Int, error) { + return _StaderConfig.Contract.GetStakedEthPerNode(&_StaderConfig.CallOpts) +} + +// GetStakedEthPerNode is a free data retrieval call binding the contract method 0xff387f3a. +// +// Solidity: function getStakedEthPerNode() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetStakedEthPerNode() (*big.Int, error) { + return _StaderConfig.Contract.GetStakedEthPerNode(&_StaderConfig.CallOpts) +} + +// GetTotalFee is a free data retrieval call binding the contract method 0x7ae316d0. +// +// Solidity: function getTotalFee() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetTotalFee(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getTotalFee") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetTotalFee is a free data retrieval call binding the contract method 0x7ae316d0. +// +// Solidity: function getTotalFee() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetTotalFee() (*big.Int, error) { + return _StaderConfig.Contract.GetTotalFee(&_StaderConfig.CallOpts) +} + +// GetTotalFee is a free data retrieval call binding the contract method 0x7ae316d0. +// +// Solidity: function getTotalFee() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetTotalFee() (*big.Int, error) { + return _StaderConfig.Contract.GetTotalFee(&_StaderConfig.CallOpts) +} + +// GetUserWithdrawManager is a free data retrieval call binding the contract method 0xecf170a8. +// +// Solidity: function getUserWithdrawManager() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetUserWithdrawManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getUserWithdrawManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetUserWithdrawManager is a free data retrieval call binding the contract method 0xecf170a8. +// +// Solidity: function getUserWithdrawManager() view returns(address) +func (_StaderConfig *StaderConfigSession) GetUserWithdrawManager() (common.Address, error) { + return _StaderConfig.Contract.GetUserWithdrawManager(&_StaderConfig.CallOpts) +} + +// GetUserWithdrawManager is a free data retrieval call binding the contract method 0xecf170a8. +// +// Solidity: function getUserWithdrawManager() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetUserWithdrawManager() (common.Address, error) { + return _StaderConfig.Contract.GetUserWithdrawManager(&_StaderConfig.CallOpts) +} + +// GetValidatorWithdrawalVaultImplementation is a free data retrieval call binding the contract method 0x6d28ad1c. +// +// Solidity: function getValidatorWithdrawalVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetValidatorWithdrawalVaultImplementation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getValidatorWithdrawalVaultImplementation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetValidatorWithdrawalVaultImplementation is a free data retrieval call binding the contract method 0x6d28ad1c. +// +// Solidity: function getValidatorWithdrawalVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigSession) GetValidatorWithdrawalVaultImplementation() (common.Address, error) { + return _StaderConfig.Contract.GetValidatorWithdrawalVaultImplementation(&_StaderConfig.CallOpts) +} + +// GetValidatorWithdrawalVaultImplementation is a free data retrieval call binding the contract method 0x6d28ad1c. +// +// Solidity: function getValidatorWithdrawalVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetValidatorWithdrawalVaultImplementation() (common.Address, error) { + return _StaderConfig.Contract.GetValidatorWithdrawalVaultImplementation(&_StaderConfig.CallOpts) +} + +// GetVaultFactory is a free data retrieval call binding the contract method 0x18bcb284. +// +// Solidity: function getVaultFactory() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetVaultFactory(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getVaultFactory") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetVaultFactory is a free data retrieval call binding the contract method 0x18bcb284. +// +// Solidity: function getVaultFactory() view returns(address) +func (_StaderConfig *StaderConfigSession) GetVaultFactory() (common.Address, error) { + return _StaderConfig.Contract.GetVaultFactory(&_StaderConfig.CallOpts) +} + +// GetVaultFactory is a free data retrieval call binding the contract method 0x18bcb284. +// +// Solidity: function getVaultFactory() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetVaultFactory() (common.Address, error) { + return _StaderConfig.Contract.GetVaultFactory(&_StaderConfig.CallOpts) +} + +// GetWithdrawnKeyBatchSize is a free data retrieval call binding the contract method 0xb479a517. +// +// Solidity: function getWithdrawnKeyBatchSize() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetWithdrawnKeyBatchSize(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getWithdrawnKeyBatchSize") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetWithdrawnKeyBatchSize is a free data retrieval call binding the contract method 0xb479a517. +// +// Solidity: function getWithdrawnKeyBatchSize() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetWithdrawnKeyBatchSize() (*big.Int, error) { + return _StaderConfig.Contract.GetWithdrawnKeyBatchSize(&_StaderConfig.CallOpts) +} + +// GetWithdrawnKeyBatchSize is a free data retrieval call binding the contract method 0xb479a517. +// +// Solidity: function getWithdrawnKeyBatchSize() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetWithdrawnKeyBatchSize() (*big.Int, error) { + return _StaderConfig.Contract.GetWithdrawnKeyBatchSize(&_StaderConfig.CallOpts) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_StaderConfig *StaderConfigCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_StaderConfig *StaderConfigSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _StaderConfig.Contract.HasRole(&_StaderConfig.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_StaderConfig *StaderConfigCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _StaderConfig.Contract.HasRole(&_StaderConfig.CallOpts, role, account) +} + +// OnlyManagerRole is a free data retrieval call binding the contract method 0x6240fb9c. +// +// Solidity: function onlyManagerRole(address account) view returns(bool) +func (_StaderConfig *StaderConfigCaller) OnlyManagerRole(opts *bind.CallOpts, account common.Address) (bool, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "onlyManagerRole", account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// OnlyManagerRole is a free data retrieval call binding the contract method 0x6240fb9c. +// +// Solidity: function onlyManagerRole(address account) view returns(bool) +func (_StaderConfig *StaderConfigSession) OnlyManagerRole(account common.Address) (bool, error) { + return _StaderConfig.Contract.OnlyManagerRole(&_StaderConfig.CallOpts, account) +} + +// OnlyManagerRole is a free data retrieval call binding the contract method 0x6240fb9c. +// +// Solidity: function onlyManagerRole(address account) view returns(bool) +func (_StaderConfig *StaderConfigCallerSession) OnlyManagerRole(account common.Address) (bool, error) { + return _StaderConfig.Contract.OnlyManagerRole(&_StaderConfig.CallOpts, account) +} + +// OnlyOperatorRole is a free data retrieval call binding the contract method 0x53f5713b. +// +// Solidity: function onlyOperatorRole(address account) view returns(bool) +func (_StaderConfig *StaderConfigCaller) OnlyOperatorRole(opts *bind.CallOpts, account common.Address) (bool, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "onlyOperatorRole", account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// OnlyOperatorRole is a free data retrieval call binding the contract method 0x53f5713b. +// +// Solidity: function onlyOperatorRole(address account) view returns(bool) +func (_StaderConfig *StaderConfigSession) OnlyOperatorRole(account common.Address) (bool, error) { + return _StaderConfig.Contract.OnlyOperatorRole(&_StaderConfig.CallOpts, account) +} + +// OnlyOperatorRole is a free data retrieval call binding the contract method 0x53f5713b. +// +// Solidity: function onlyOperatorRole(address account) view returns(bool) +func (_StaderConfig *StaderConfigCallerSession) OnlyOperatorRole(account common.Address) (bool, error) { + return _StaderConfig.Contract.OnlyOperatorRole(&_StaderConfig.CallOpts, account) +} + +// OnlyStaderContract is a free data retrieval call binding the contract method 0xb3123922. +// +// Solidity: function onlyStaderContract(address _addr, bytes32 _contractName) view returns(bool) +func (_StaderConfig *StaderConfigCaller) OnlyStaderContract(opts *bind.CallOpts, _addr common.Address, _contractName [32]byte) (bool, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "onlyStaderContract", _addr, _contractName) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// OnlyStaderContract is a free data retrieval call binding the contract method 0xb3123922. +// +// Solidity: function onlyStaderContract(address _addr, bytes32 _contractName) view returns(bool) +func (_StaderConfig *StaderConfigSession) OnlyStaderContract(_addr common.Address, _contractName [32]byte) (bool, error) { + return _StaderConfig.Contract.OnlyStaderContract(&_StaderConfig.CallOpts, _addr, _contractName) +} + +// OnlyStaderContract is a free data retrieval call binding the contract method 0xb3123922. +// +// Solidity: function onlyStaderContract(address _addr, bytes32 _contractName) view returns(bool) +func (_StaderConfig *StaderConfigCallerSession) OnlyStaderContract(_addr common.Address, _contractName [32]byte) (bool, error) { + return _StaderConfig.Contract.OnlyStaderContract(&_StaderConfig.CallOpts, _addr, _contractName) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_StaderConfig *StaderConfigCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _StaderConfig.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 (_StaderConfig *StaderConfigSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _StaderConfig.Contract.SupportsInterface(&_StaderConfig.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_StaderConfig *StaderConfigCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _StaderConfig.Contract.SupportsInterface(&_StaderConfig.CallOpts, interfaceId) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.GrantRole(&_StaderConfig.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.GrantRole(&_StaderConfig.TransactOpts, role, account) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _admin, address _ethDepositContract) returns() +func (_StaderConfig *StaderConfigTransactor) Initialize(opts *bind.TransactOpts, _admin common.Address, _ethDepositContract common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "initialize", _admin, _ethDepositContract) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _admin, address _ethDepositContract) returns() +func (_StaderConfig *StaderConfigSession) Initialize(_admin common.Address, _ethDepositContract common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.Initialize(&_StaderConfig.TransactOpts, _admin, _ethDepositContract) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _admin, address _ethDepositContract) returns() +func (_StaderConfig *StaderConfigTransactorSession) Initialize(_admin common.Address, _ethDepositContract common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.Initialize(&_StaderConfig.TransactOpts, _admin, _ethDepositContract) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "renounceRole", role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.RenounceRole(&_StaderConfig.TransactOpts, role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.RenounceRole(&_StaderConfig.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.RevokeRole(&_StaderConfig.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.RevokeRole(&_StaderConfig.TransactOpts, role, account) +} + +// UpdateAdmin is a paid mutator transaction binding the contract method 0xe2f273bd. +// +// Solidity: function updateAdmin(address _admin) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateAdmin(opts *bind.TransactOpts, _admin common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateAdmin", _admin) +} + +// UpdateAdmin is a paid mutator transaction binding the contract method 0xe2f273bd. +// +// Solidity: function updateAdmin(address _admin) returns() +func (_StaderConfig *StaderConfigSession) UpdateAdmin(_admin common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateAdmin(&_StaderConfig.TransactOpts, _admin) +} + +// UpdateAdmin is a paid mutator transaction binding the contract method 0xe2f273bd. +// +// Solidity: function updateAdmin(address _admin) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateAdmin(_admin common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateAdmin(&_StaderConfig.TransactOpts, _admin) +} + +// UpdateAuctionContract is a paid mutator transaction binding the contract method 0x121669f1. +// +// Solidity: function updateAuctionContract(address _auctionContract) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateAuctionContract(opts *bind.TransactOpts, _auctionContract common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateAuctionContract", _auctionContract) +} + +// UpdateAuctionContract is a paid mutator transaction binding the contract method 0x121669f1. +// +// Solidity: function updateAuctionContract(address _auctionContract) returns() +func (_StaderConfig *StaderConfigSession) UpdateAuctionContract(_auctionContract common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateAuctionContract(&_StaderConfig.TransactOpts, _auctionContract) +} + +// UpdateAuctionContract is a paid mutator transaction binding the contract method 0x121669f1. +// +// Solidity: function updateAuctionContract(address _auctionContract) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateAuctionContract(_auctionContract common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateAuctionContract(&_StaderConfig.TransactOpts, _auctionContract) +} + +// UpdateETHBalancePORFeedProxy is a paid mutator transaction binding the contract method 0x403efe7f. +// +// Solidity: function updateETHBalancePORFeedProxy(address _ethBalanceProxy) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateETHBalancePORFeedProxy(opts *bind.TransactOpts, _ethBalanceProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateETHBalancePORFeedProxy", _ethBalanceProxy) +} + +// UpdateETHBalancePORFeedProxy is a paid mutator transaction binding the contract method 0x403efe7f. +// +// Solidity: function updateETHBalancePORFeedProxy(address _ethBalanceProxy) returns() +func (_StaderConfig *StaderConfigSession) UpdateETHBalancePORFeedProxy(_ethBalanceProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateETHBalancePORFeedProxy(&_StaderConfig.TransactOpts, _ethBalanceProxy) +} + +// UpdateETHBalancePORFeedProxy is a paid mutator transaction binding the contract method 0x403efe7f. +// +// Solidity: function updateETHBalancePORFeedProxy(address _ethBalanceProxy) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateETHBalancePORFeedProxy(_ethBalanceProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateETHBalancePORFeedProxy(&_StaderConfig.TransactOpts, _ethBalanceProxy) +} + +// UpdateETHXSupplyPORFeedProxy is a paid mutator transaction binding the contract method 0x72195b3e. +// +// Solidity: function updateETHXSupplyPORFeedProxy(address _ethXSupplyProxy) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateETHXSupplyPORFeedProxy(opts *bind.TransactOpts, _ethXSupplyProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateETHXSupplyPORFeedProxy", _ethXSupplyProxy) +} + +// UpdateETHXSupplyPORFeedProxy is a paid mutator transaction binding the contract method 0x72195b3e. +// +// Solidity: function updateETHXSupplyPORFeedProxy(address _ethXSupplyProxy) returns() +func (_StaderConfig *StaderConfigSession) UpdateETHXSupplyPORFeedProxy(_ethXSupplyProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateETHXSupplyPORFeedProxy(&_StaderConfig.TransactOpts, _ethXSupplyProxy) +} + +// UpdateETHXSupplyPORFeedProxy is a paid mutator transaction binding the contract method 0x72195b3e. +// +// Solidity: function updateETHXSupplyPORFeedProxy(address _ethXSupplyProxy) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateETHXSupplyPORFeedProxy(_ethXSupplyProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateETHXSupplyPORFeedProxy(&_StaderConfig.TransactOpts, _ethXSupplyProxy) +} + +// UpdateETHxToken is a paid mutator transaction binding the contract method 0xb9894a11. +// +// Solidity: function updateETHxToken(address _ethX) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateETHxToken(opts *bind.TransactOpts, _ethX common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateETHxToken", _ethX) +} + +// UpdateETHxToken is a paid mutator transaction binding the contract method 0xb9894a11. +// +// Solidity: function updateETHxToken(address _ethX) returns() +func (_StaderConfig *StaderConfigSession) UpdateETHxToken(_ethX common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateETHxToken(&_StaderConfig.TransactOpts, _ethX) +} + +// UpdateETHxToken is a paid mutator transaction binding the contract method 0xb9894a11. +// +// Solidity: function updateETHxToken(address _ethX) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateETHxToken(_ethX common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateETHxToken(&_StaderConfig.TransactOpts, _ethX) +} + +// UpdateMaxDepositAmount is a paid mutator transaction binding the contract method 0x0945d42c. +// +// Solidity: function updateMaxDepositAmount(uint256 _maxDepositAmount) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateMaxDepositAmount(opts *bind.TransactOpts, _maxDepositAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateMaxDepositAmount", _maxDepositAmount) +} + +// UpdateMaxDepositAmount is a paid mutator transaction binding the contract method 0x0945d42c. +// +// Solidity: function updateMaxDepositAmount(uint256 _maxDepositAmount) returns() +func (_StaderConfig *StaderConfigSession) UpdateMaxDepositAmount(_maxDepositAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMaxDepositAmount(&_StaderConfig.TransactOpts, _maxDepositAmount) +} + +// UpdateMaxDepositAmount is a paid mutator transaction binding the contract method 0x0945d42c. +// +// Solidity: function updateMaxDepositAmount(uint256 _maxDepositAmount) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateMaxDepositAmount(_maxDepositAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMaxDepositAmount(&_StaderConfig.TransactOpts, _maxDepositAmount) +} + +// UpdateMaxWithdrawAmount is a paid mutator transaction binding the contract method 0x5b9cc8b1. +// +// Solidity: function updateMaxWithdrawAmount(uint256 _maxWithdrawAmount) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateMaxWithdrawAmount(opts *bind.TransactOpts, _maxWithdrawAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateMaxWithdrawAmount", _maxWithdrawAmount) +} + +// UpdateMaxWithdrawAmount is a paid mutator transaction binding the contract method 0x5b9cc8b1. +// +// Solidity: function updateMaxWithdrawAmount(uint256 _maxWithdrawAmount) returns() +func (_StaderConfig *StaderConfigSession) UpdateMaxWithdrawAmount(_maxWithdrawAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMaxWithdrawAmount(&_StaderConfig.TransactOpts, _maxWithdrawAmount) +} + +// UpdateMaxWithdrawAmount is a paid mutator transaction binding the contract method 0x5b9cc8b1. +// +// Solidity: function updateMaxWithdrawAmount(uint256 _maxWithdrawAmount) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateMaxWithdrawAmount(_maxWithdrawAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMaxWithdrawAmount(&_StaderConfig.TransactOpts, _maxWithdrawAmount) +} + +// UpdateMinBlockDelayToFinalizeWithdrawRequest is a paid mutator transaction binding the contract method 0x723b732c. +// +// Solidity: function updateMinBlockDelayToFinalizeWithdrawRequest(uint256 _minBlockDelay) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateMinBlockDelayToFinalizeWithdrawRequest(opts *bind.TransactOpts, _minBlockDelay *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateMinBlockDelayToFinalizeWithdrawRequest", _minBlockDelay) +} + +// UpdateMinBlockDelayToFinalizeWithdrawRequest is a paid mutator transaction binding the contract method 0x723b732c. +// +// Solidity: function updateMinBlockDelayToFinalizeWithdrawRequest(uint256 _minBlockDelay) returns() +func (_StaderConfig *StaderConfigSession) UpdateMinBlockDelayToFinalizeWithdrawRequest(_minBlockDelay *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMinBlockDelayToFinalizeWithdrawRequest(&_StaderConfig.TransactOpts, _minBlockDelay) +} + +// UpdateMinBlockDelayToFinalizeWithdrawRequest is a paid mutator transaction binding the contract method 0x723b732c. +// +// Solidity: function updateMinBlockDelayToFinalizeWithdrawRequest(uint256 _minBlockDelay) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateMinBlockDelayToFinalizeWithdrawRequest(_minBlockDelay *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMinBlockDelayToFinalizeWithdrawRequest(&_StaderConfig.TransactOpts, _minBlockDelay) +} + +// UpdateMinDepositAmount is a paid mutator transaction binding the contract method 0x84780205. +// +// Solidity: function updateMinDepositAmount(uint256 _minDepositAmount) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateMinDepositAmount(opts *bind.TransactOpts, _minDepositAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateMinDepositAmount", _minDepositAmount) +} + +// UpdateMinDepositAmount is a paid mutator transaction binding the contract method 0x84780205. +// +// Solidity: function updateMinDepositAmount(uint256 _minDepositAmount) returns() +func (_StaderConfig *StaderConfigSession) UpdateMinDepositAmount(_minDepositAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMinDepositAmount(&_StaderConfig.TransactOpts, _minDepositAmount) +} + +// UpdateMinDepositAmount is a paid mutator transaction binding the contract method 0x84780205. +// +// Solidity: function updateMinDepositAmount(uint256 _minDepositAmount) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateMinDepositAmount(_minDepositAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMinDepositAmount(&_StaderConfig.TransactOpts, _minDepositAmount) +} + +// UpdateMinWithdrawAmount is a paid mutator transaction binding the contract method 0xff4f3546. +// +// Solidity: function updateMinWithdrawAmount(uint256 _minWithdrawAmount) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateMinWithdrawAmount(opts *bind.TransactOpts, _minWithdrawAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateMinWithdrawAmount", _minWithdrawAmount) +} + +// UpdateMinWithdrawAmount is a paid mutator transaction binding the contract method 0xff4f3546. +// +// Solidity: function updateMinWithdrawAmount(uint256 _minWithdrawAmount) returns() +func (_StaderConfig *StaderConfigSession) UpdateMinWithdrawAmount(_minWithdrawAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMinWithdrawAmount(&_StaderConfig.TransactOpts, _minWithdrawAmount) +} + +// UpdateMinWithdrawAmount is a paid mutator transaction binding the contract method 0xff4f3546. +// +// Solidity: function updateMinWithdrawAmount(uint256 _minWithdrawAmount) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateMinWithdrawAmount(_minWithdrawAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMinWithdrawAmount(&_StaderConfig.TransactOpts, _minWithdrawAmount) +} + +// UpdateNodeELRewardImplementation is a paid mutator transaction binding the contract method 0x5be6ce69. +// +// Solidity: function updateNodeELRewardImplementation(address _nodeELRewardVaultImpl) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateNodeELRewardImplementation(opts *bind.TransactOpts, _nodeELRewardVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateNodeELRewardImplementation", _nodeELRewardVaultImpl) +} + +// UpdateNodeELRewardImplementation is a paid mutator transaction binding the contract method 0x5be6ce69. +// +// Solidity: function updateNodeELRewardImplementation(address _nodeELRewardVaultImpl) returns() +func (_StaderConfig *StaderConfigSession) UpdateNodeELRewardImplementation(_nodeELRewardVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateNodeELRewardImplementation(&_StaderConfig.TransactOpts, _nodeELRewardVaultImpl) +} + +// UpdateNodeELRewardImplementation is a paid mutator transaction binding the contract method 0x5be6ce69. +// +// Solidity: function updateNodeELRewardImplementation(address _nodeELRewardVaultImpl) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateNodeELRewardImplementation(_nodeELRewardVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateNodeELRewardImplementation(&_StaderConfig.TransactOpts, _nodeELRewardVaultImpl) +} + +// UpdateOperatorRewardsCollector is a paid mutator transaction binding the contract method 0x1de03db8. +// +// Solidity: function updateOperatorRewardsCollector(address _operatorRewardsCollector) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateOperatorRewardsCollector(opts *bind.TransactOpts, _operatorRewardsCollector common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateOperatorRewardsCollector", _operatorRewardsCollector) +} + +// UpdateOperatorRewardsCollector is a paid mutator transaction binding the contract method 0x1de03db8. +// +// Solidity: function updateOperatorRewardsCollector(address _operatorRewardsCollector) returns() +func (_StaderConfig *StaderConfigSession) UpdateOperatorRewardsCollector(_operatorRewardsCollector common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateOperatorRewardsCollector(&_StaderConfig.TransactOpts, _operatorRewardsCollector) +} + +// UpdateOperatorRewardsCollector is a paid mutator transaction binding the contract method 0x1de03db8. +// +// Solidity: function updateOperatorRewardsCollector(address _operatorRewardsCollector) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateOperatorRewardsCollector(_operatorRewardsCollector common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateOperatorRewardsCollector(&_StaderConfig.TransactOpts, _operatorRewardsCollector) +} + +// UpdatePenaltyContract is a paid mutator transaction binding the contract method 0xf83c7787. +// +// Solidity: function updatePenaltyContract(address _penaltyContract) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePenaltyContract(opts *bind.TransactOpts, _penaltyContract common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePenaltyContract", _penaltyContract) +} + +// UpdatePenaltyContract is a paid mutator transaction binding the contract method 0xf83c7787. +// +// Solidity: function updatePenaltyContract(address _penaltyContract) returns() +func (_StaderConfig *StaderConfigSession) UpdatePenaltyContract(_penaltyContract common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePenaltyContract(&_StaderConfig.TransactOpts, _penaltyContract) +} + +// UpdatePenaltyContract is a paid mutator transaction binding the contract method 0xf83c7787. +// +// Solidity: function updatePenaltyContract(address _penaltyContract) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePenaltyContract(_penaltyContract common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePenaltyContract(&_StaderConfig.TransactOpts, _penaltyContract) +} + +// UpdatePermissionedNodeRegistry is a paid mutator transaction binding the contract method 0x3c128dad. +// +// Solidity: function updatePermissionedNodeRegistry(address _permissionedNodeRegistry) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePermissionedNodeRegistry(opts *bind.TransactOpts, _permissionedNodeRegistry common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePermissionedNodeRegistry", _permissionedNodeRegistry) +} + +// UpdatePermissionedNodeRegistry is a paid mutator transaction binding the contract method 0x3c128dad. +// +// Solidity: function updatePermissionedNodeRegistry(address _permissionedNodeRegistry) returns() +func (_StaderConfig *StaderConfigSession) UpdatePermissionedNodeRegistry(_permissionedNodeRegistry common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionedNodeRegistry(&_StaderConfig.TransactOpts, _permissionedNodeRegistry) +} + +// UpdatePermissionedNodeRegistry is a paid mutator transaction binding the contract method 0x3c128dad. +// +// Solidity: function updatePermissionedNodeRegistry(address _permissionedNodeRegistry) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionedNodeRegistry(_permissionedNodeRegistry common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionedNodeRegistry(&_StaderConfig.TransactOpts, _permissionedNodeRegistry) +} + +// UpdatePermissionedPool is a paid mutator transaction binding the contract method 0xb549dbff. +// +// Solidity: function updatePermissionedPool(address _permissionedPool) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePermissionedPool(opts *bind.TransactOpts, _permissionedPool common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePermissionedPool", _permissionedPool) +} + +// UpdatePermissionedPool is a paid mutator transaction binding the contract method 0xb549dbff. +// +// Solidity: function updatePermissionedPool(address _permissionedPool) returns() +func (_StaderConfig *StaderConfigSession) UpdatePermissionedPool(_permissionedPool common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionedPool(&_StaderConfig.TransactOpts, _permissionedPool) +} + +// UpdatePermissionedPool is a paid mutator transaction binding the contract method 0xb549dbff. +// +// Solidity: function updatePermissionedPool(address _permissionedPool) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionedPool(_permissionedPool common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionedPool(&_StaderConfig.TransactOpts, _permissionedPool) +} + +// UpdatePermissionedSocializingPool is a paid mutator transaction binding the contract method 0xe4f59b6c. +// +// Solidity: function updatePermissionedSocializingPool(address _permissionedSocializePool) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePermissionedSocializingPool(opts *bind.TransactOpts, _permissionedSocializePool common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePermissionedSocializingPool", _permissionedSocializePool) +} + +// UpdatePermissionedSocializingPool is a paid mutator transaction binding the contract method 0xe4f59b6c. +// +// Solidity: function updatePermissionedSocializingPool(address _permissionedSocializePool) returns() +func (_StaderConfig *StaderConfigSession) UpdatePermissionedSocializingPool(_permissionedSocializePool common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionedSocializingPool(&_StaderConfig.TransactOpts, _permissionedSocializePool) +} + +// UpdatePermissionedSocializingPool is a paid mutator transaction binding the contract method 0xe4f59b6c. +// +// Solidity: function updatePermissionedSocializingPool(address _permissionedSocializePool) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionedSocializingPool(_permissionedSocializePool common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionedSocializingPool(&_StaderConfig.TransactOpts, _permissionedSocializePool) +} + +// UpdatePermissionlessNodeRegistry is a paid mutator transaction binding the contract method 0xf63718e7. +// +// Solidity: function updatePermissionlessNodeRegistry(address _permissionlessNodeRegistry) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePermissionlessNodeRegistry(opts *bind.TransactOpts, _permissionlessNodeRegistry common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePermissionlessNodeRegistry", _permissionlessNodeRegistry) +} + +// UpdatePermissionlessNodeRegistry is a paid mutator transaction binding the contract method 0xf63718e7. +// +// Solidity: function updatePermissionlessNodeRegistry(address _permissionlessNodeRegistry) returns() +func (_StaderConfig *StaderConfigSession) UpdatePermissionlessNodeRegistry(_permissionlessNodeRegistry common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionlessNodeRegistry(&_StaderConfig.TransactOpts, _permissionlessNodeRegistry) +} + +// UpdatePermissionlessNodeRegistry is a paid mutator transaction binding the contract method 0xf63718e7. +// +// Solidity: function updatePermissionlessNodeRegistry(address _permissionlessNodeRegistry) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionlessNodeRegistry(_permissionlessNodeRegistry common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionlessNodeRegistry(&_StaderConfig.TransactOpts, _permissionlessNodeRegistry) +} + +// UpdatePermissionlessPool is a paid mutator transaction binding the contract method 0xc20573c1. +// +// Solidity: function updatePermissionlessPool(address _permissionlessPool) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePermissionlessPool(opts *bind.TransactOpts, _permissionlessPool common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePermissionlessPool", _permissionlessPool) +} + +// UpdatePermissionlessPool is a paid mutator transaction binding the contract method 0xc20573c1. +// +// Solidity: function updatePermissionlessPool(address _permissionlessPool) returns() +func (_StaderConfig *StaderConfigSession) UpdatePermissionlessPool(_permissionlessPool common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionlessPool(&_StaderConfig.TransactOpts, _permissionlessPool) +} + +// UpdatePermissionlessPool is a paid mutator transaction binding the contract method 0xc20573c1. +// +// Solidity: function updatePermissionlessPool(address _permissionlessPool) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionlessPool(_permissionlessPool common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionlessPool(&_StaderConfig.TransactOpts, _permissionlessPool) +} + +// UpdatePermissionlessSocializingPool is a paid mutator transaction binding the contract method 0x1049e32e. +// +// Solidity: function updatePermissionlessSocializingPool(address _permissionlessSocializePool) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePermissionlessSocializingPool(opts *bind.TransactOpts, _permissionlessSocializePool common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePermissionlessSocializingPool", _permissionlessSocializePool) +} + +// UpdatePermissionlessSocializingPool is a paid mutator transaction binding the contract method 0x1049e32e. +// +// Solidity: function updatePermissionlessSocializingPool(address _permissionlessSocializePool) returns() +func (_StaderConfig *StaderConfigSession) UpdatePermissionlessSocializingPool(_permissionlessSocializePool common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionlessSocializingPool(&_StaderConfig.TransactOpts, _permissionlessSocializePool) +} + +// UpdatePermissionlessSocializingPool is a paid mutator transaction binding the contract method 0x1049e32e. +// +// Solidity: function updatePermissionlessSocializingPool(address _permissionlessSocializePool) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionlessSocializingPool(_permissionlessSocializePool common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionlessSocializingPool(&_StaderConfig.TransactOpts, _permissionlessSocializePool) +} + +// UpdatePoolSelector is a paid mutator transaction binding the contract method 0x047cb439. +// +// Solidity: function updatePoolSelector(address _poolSelector) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePoolSelector(opts *bind.TransactOpts, _poolSelector common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePoolSelector", _poolSelector) +} + +// UpdatePoolSelector is a paid mutator transaction binding the contract method 0x047cb439. +// +// Solidity: function updatePoolSelector(address _poolSelector) returns() +func (_StaderConfig *StaderConfigSession) UpdatePoolSelector(_poolSelector common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePoolSelector(&_StaderConfig.TransactOpts, _poolSelector) +} + +// UpdatePoolSelector is a paid mutator transaction binding the contract method 0x047cb439. +// +// Solidity: function updatePoolSelector(address _poolSelector) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePoolSelector(_poolSelector common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePoolSelector(&_StaderConfig.TransactOpts, _poolSelector) +} + +// UpdatePoolUtils is a paid mutator transaction binding the contract method 0x2651644c. +// +// Solidity: function updatePoolUtils(address _poolUtils) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePoolUtils(opts *bind.TransactOpts, _poolUtils common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePoolUtils", _poolUtils) +} + +// UpdatePoolUtils is a paid mutator transaction binding the contract method 0x2651644c. +// +// Solidity: function updatePoolUtils(address _poolUtils) returns() +func (_StaderConfig *StaderConfigSession) UpdatePoolUtils(_poolUtils common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePoolUtils(&_StaderConfig.TransactOpts, _poolUtils) +} + +// UpdatePoolUtils is a paid mutator transaction binding the contract method 0x2651644c. +// +// Solidity: function updatePoolUtils(address _poolUtils) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePoolUtils(_poolUtils common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePoolUtils(&_StaderConfig.TransactOpts, _poolUtils) +} + +// UpdateRewardsThreshold is a paid mutator transaction binding the contract method 0x572c686a. +// +// Solidity: function updateRewardsThreshold(uint256 _rewardsThreshold) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateRewardsThreshold(opts *bind.TransactOpts, _rewardsThreshold *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateRewardsThreshold", _rewardsThreshold) +} + +// UpdateRewardsThreshold is a paid mutator transaction binding the contract method 0x572c686a. +// +// Solidity: function updateRewardsThreshold(uint256 _rewardsThreshold) returns() +func (_StaderConfig *StaderConfigSession) UpdateRewardsThreshold(_rewardsThreshold *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateRewardsThreshold(&_StaderConfig.TransactOpts, _rewardsThreshold) +} + +// UpdateRewardsThreshold is a paid mutator transaction binding the contract method 0x572c686a. +// +// Solidity: function updateRewardsThreshold(uint256 _rewardsThreshold) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateRewardsThreshold(_rewardsThreshold *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateRewardsThreshold(&_StaderConfig.TransactOpts, _rewardsThreshold) +} + +// UpdateSDCollateral is a paid mutator transaction binding the contract method 0x34d17d74. +// +// Solidity: function updateSDCollateral(address _sdCollateral) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateSDCollateral(opts *bind.TransactOpts, _sdCollateral common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateSDCollateral", _sdCollateral) +} + +// UpdateSDCollateral is a paid mutator transaction binding the contract method 0x34d17d74. +// +// Solidity: function updateSDCollateral(address _sdCollateral) returns() +func (_StaderConfig *StaderConfigSession) UpdateSDCollateral(_sdCollateral common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateSDCollateral(&_StaderConfig.TransactOpts, _sdCollateral) +} + +// UpdateSDCollateral is a paid mutator transaction binding the contract method 0x34d17d74. +// +// Solidity: function updateSDCollateral(address _sdCollateral) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateSDCollateral(_sdCollateral common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateSDCollateral(&_StaderConfig.TransactOpts, _sdCollateral) +} + +// UpdateSocializingPoolCycleDuration is a paid mutator transaction binding the contract method 0x6870bb2b. +// +// Solidity: function updateSocializingPoolCycleDuration(uint256 _socializingPoolCycleDuration) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateSocializingPoolCycleDuration(opts *bind.TransactOpts, _socializingPoolCycleDuration *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateSocializingPoolCycleDuration", _socializingPoolCycleDuration) +} + +// UpdateSocializingPoolCycleDuration is a paid mutator transaction binding the contract method 0x6870bb2b. +// +// Solidity: function updateSocializingPoolCycleDuration(uint256 _socializingPoolCycleDuration) returns() +func (_StaderConfig *StaderConfigSession) UpdateSocializingPoolCycleDuration(_socializingPoolCycleDuration *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateSocializingPoolCycleDuration(&_StaderConfig.TransactOpts, _socializingPoolCycleDuration) +} + +// UpdateSocializingPoolCycleDuration is a paid mutator transaction binding the contract method 0x6870bb2b. +// +// Solidity: function updateSocializingPoolCycleDuration(uint256 _socializingPoolCycleDuration) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateSocializingPoolCycleDuration(_socializingPoolCycleDuration *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateSocializingPoolCycleDuration(&_StaderConfig.TransactOpts, _socializingPoolCycleDuration) +} + +// UpdateSocializingPoolOptInCoolingPeriod is a paid mutator transaction binding the contract method 0x8a4cfb58. +// +// Solidity: function updateSocializingPoolOptInCoolingPeriod(uint256 _SocializePoolOptInCoolingPeriod) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateSocializingPoolOptInCoolingPeriod(opts *bind.TransactOpts, _SocializePoolOptInCoolingPeriod *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateSocializingPoolOptInCoolingPeriod", _SocializePoolOptInCoolingPeriod) +} + +// UpdateSocializingPoolOptInCoolingPeriod is a paid mutator transaction binding the contract method 0x8a4cfb58. +// +// Solidity: function updateSocializingPoolOptInCoolingPeriod(uint256 _SocializePoolOptInCoolingPeriod) returns() +func (_StaderConfig *StaderConfigSession) UpdateSocializingPoolOptInCoolingPeriod(_SocializePoolOptInCoolingPeriod *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateSocializingPoolOptInCoolingPeriod(&_StaderConfig.TransactOpts, _SocializePoolOptInCoolingPeriod) +} + +// UpdateSocializingPoolOptInCoolingPeriod is a paid mutator transaction binding the contract method 0x8a4cfb58. +// +// Solidity: function updateSocializingPoolOptInCoolingPeriod(uint256 _SocializePoolOptInCoolingPeriod) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateSocializingPoolOptInCoolingPeriod(_SocializePoolOptInCoolingPeriod *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateSocializingPoolOptInCoolingPeriod(&_StaderConfig.TransactOpts, _SocializePoolOptInCoolingPeriod) +} + +// UpdateStaderInsuranceFund is a paid mutator transaction binding the contract method 0xaa2f56c7. +// +// Solidity: function updateStaderInsuranceFund(address _staderInsuranceFund) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateStaderInsuranceFund(opts *bind.TransactOpts, _staderInsuranceFund common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateStaderInsuranceFund", _staderInsuranceFund) +} + +// UpdateStaderInsuranceFund is a paid mutator transaction binding the contract method 0xaa2f56c7. +// +// Solidity: function updateStaderInsuranceFund(address _staderInsuranceFund) returns() +func (_StaderConfig *StaderConfigSession) UpdateStaderInsuranceFund(_staderInsuranceFund common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStaderInsuranceFund(&_StaderConfig.TransactOpts, _staderInsuranceFund) +} + +// UpdateStaderInsuranceFund is a paid mutator transaction binding the contract method 0xaa2f56c7. +// +// Solidity: function updateStaderInsuranceFund(address _staderInsuranceFund) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateStaderInsuranceFund(_staderInsuranceFund common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStaderInsuranceFund(&_StaderConfig.TransactOpts, _staderInsuranceFund) +} + +// UpdateStaderOracle is a paid mutator transaction binding the contract method 0xca78360c. +// +// Solidity: function updateStaderOracle(address _staderOracle) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateStaderOracle(opts *bind.TransactOpts, _staderOracle common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateStaderOracle", _staderOracle) +} + +// UpdateStaderOracle is a paid mutator transaction binding the contract method 0xca78360c. +// +// Solidity: function updateStaderOracle(address _staderOracle) returns() +func (_StaderConfig *StaderConfigSession) UpdateStaderOracle(_staderOracle common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStaderOracle(&_StaderConfig.TransactOpts, _staderOracle) +} + +// UpdateStaderOracle is a paid mutator transaction binding the contract method 0xca78360c. +// +// Solidity: function updateStaderOracle(address _staderOracle) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateStaderOracle(_staderOracle common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStaderOracle(&_StaderConfig.TransactOpts, _staderOracle) +} + +// UpdateStaderToken is a paid mutator transaction binding the contract method 0x83148593. +// +// Solidity: function updateStaderToken(address _staderToken) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateStaderToken(opts *bind.TransactOpts, _staderToken common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateStaderToken", _staderToken) +} + +// UpdateStaderToken is a paid mutator transaction binding the contract method 0x83148593. +// +// Solidity: function updateStaderToken(address _staderToken) returns() +func (_StaderConfig *StaderConfigSession) UpdateStaderToken(_staderToken common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStaderToken(&_StaderConfig.TransactOpts, _staderToken) +} + +// UpdateStaderToken is a paid mutator transaction binding the contract method 0x83148593. +// +// Solidity: function updateStaderToken(address _staderToken) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateStaderToken(_staderToken common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStaderToken(&_StaderConfig.TransactOpts, _staderToken) +} + +// UpdateStaderTreasury is a paid mutator transaction binding the contract method 0x7b4cd7ec. +// +// Solidity: function updateStaderTreasury(address _staderTreasury) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateStaderTreasury(opts *bind.TransactOpts, _staderTreasury common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateStaderTreasury", _staderTreasury) +} + +// UpdateStaderTreasury is a paid mutator transaction binding the contract method 0x7b4cd7ec. +// +// Solidity: function updateStaderTreasury(address _staderTreasury) returns() +func (_StaderConfig *StaderConfigSession) UpdateStaderTreasury(_staderTreasury common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStaderTreasury(&_StaderConfig.TransactOpts, _staderTreasury) +} + +// UpdateStaderTreasury is a paid mutator transaction binding the contract method 0x7b4cd7ec. +// +// Solidity: function updateStaderTreasury(address _staderTreasury) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateStaderTreasury(_staderTreasury common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStaderTreasury(&_StaderConfig.TransactOpts, _staderTreasury) +} + +// UpdateStakePoolManager is a paid mutator transaction binding the contract method 0x368f9d17. +// +// Solidity: function updateStakePoolManager(address _stakePoolManager) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateStakePoolManager(opts *bind.TransactOpts, _stakePoolManager common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateStakePoolManager", _stakePoolManager) +} + +// UpdateStakePoolManager is a paid mutator transaction binding the contract method 0x368f9d17. +// +// Solidity: function updateStakePoolManager(address _stakePoolManager) returns() +func (_StaderConfig *StaderConfigSession) UpdateStakePoolManager(_stakePoolManager common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStakePoolManager(&_StaderConfig.TransactOpts, _stakePoolManager) +} + +// UpdateStakePoolManager is a paid mutator transaction binding the contract method 0x368f9d17. +// +// Solidity: function updateStakePoolManager(address _stakePoolManager) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateStakePoolManager(_stakePoolManager common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStakePoolManager(&_StaderConfig.TransactOpts, _stakePoolManager) +} + +// UpdateUserWithdrawManager is a paid mutator transaction binding the contract method 0x088ee72d. +// +// Solidity: function updateUserWithdrawManager(address _userWithdrawManager) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateUserWithdrawManager(opts *bind.TransactOpts, _userWithdrawManager common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateUserWithdrawManager", _userWithdrawManager) +} + +// UpdateUserWithdrawManager is a paid mutator transaction binding the contract method 0x088ee72d. +// +// Solidity: function updateUserWithdrawManager(address _userWithdrawManager) returns() +func (_StaderConfig *StaderConfigSession) UpdateUserWithdrawManager(_userWithdrawManager common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateUserWithdrawManager(&_StaderConfig.TransactOpts, _userWithdrawManager) +} + +// UpdateUserWithdrawManager is a paid mutator transaction binding the contract method 0x088ee72d. +// +// Solidity: function updateUserWithdrawManager(address _userWithdrawManager) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateUserWithdrawManager(_userWithdrawManager common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateUserWithdrawManager(&_StaderConfig.TransactOpts, _userWithdrawManager) +} + +// UpdateValidatorWithdrawalVaultImplementation is a paid mutator transaction binding the contract method 0x5b5961fc. +// +// Solidity: function updateValidatorWithdrawalVaultImplementation(address _validatorWithdrawalVaultImpl) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateValidatorWithdrawalVaultImplementation(opts *bind.TransactOpts, _validatorWithdrawalVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateValidatorWithdrawalVaultImplementation", _validatorWithdrawalVaultImpl) +} + +// UpdateValidatorWithdrawalVaultImplementation is a paid mutator transaction binding the contract method 0x5b5961fc. +// +// Solidity: function updateValidatorWithdrawalVaultImplementation(address _validatorWithdrawalVaultImpl) returns() +func (_StaderConfig *StaderConfigSession) UpdateValidatorWithdrawalVaultImplementation(_validatorWithdrawalVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateValidatorWithdrawalVaultImplementation(&_StaderConfig.TransactOpts, _validatorWithdrawalVaultImpl) +} + +// UpdateValidatorWithdrawalVaultImplementation is a paid mutator transaction binding the contract method 0x5b5961fc. +// +// Solidity: function updateValidatorWithdrawalVaultImplementation(address _validatorWithdrawalVaultImpl) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateValidatorWithdrawalVaultImplementation(_validatorWithdrawalVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateValidatorWithdrawalVaultImplementation(&_StaderConfig.TransactOpts, _validatorWithdrawalVaultImpl) +} + +// UpdateVaultFactory is a paid mutator transaction binding the contract method 0x98c35927. +// +// Solidity: function updateVaultFactory(address _vaultFactory) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateVaultFactory(opts *bind.TransactOpts, _vaultFactory common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateVaultFactory", _vaultFactory) +} + +// UpdateVaultFactory is a paid mutator transaction binding the contract method 0x98c35927. +// +// Solidity: function updateVaultFactory(address _vaultFactory) returns() +func (_StaderConfig *StaderConfigSession) UpdateVaultFactory(_vaultFactory common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateVaultFactory(&_StaderConfig.TransactOpts, _vaultFactory) +} + +// UpdateVaultFactory is a paid mutator transaction binding the contract method 0x98c35927. +// +// Solidity: function updateVaultFactory(address _vaultFactory) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateVaultFactory(_vaultFactory common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateVaultFactory(&_StaderConfig.TransactOpts, _vaultFactory) +} + +// UpdateWithdrawnKeysBatchSize is a paid mutator transaction binding the contract method 0xbbb99bb5. +// +// Solidity: function updateWithdrawnKeysBatchSize(uint256 _withdrawnKeysBatchSize) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateWithdrawnKeysBatchSize(opts *bind.TransactOpts, _withdrawnKeysBatchSize *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateWithdrawnKeysBatchSize", _withdrawnKeysBatchSize) +} + +// UpdateWithdrawnKeysBatchSize is a paid mutator transaction binding the contract method 0xbbb99bb5. +// +// Solidity: function updateWithdrawnKeysBatchSize(uint256 _withdrawnKeysBatchSize) returns() +func (_StaderConfig *StaderConfigSession) UpdateWithdrawnKeysBatchSize(_withdrawnKeysBatchSize *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateWithdrawnKeysBatchSize(&_StaderConfig.TransactOpts, _withdrawnKeysBatchSize) +} + +// UpdateWithdrawnKeysBatchSize is a paid mutator transaction binding the contract method 0xbbb99bb5. +// +// Solidity: function updateWithdrawnKeysBatchSize(uint256 _withdrawnKeysBatchSize) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateWithdrawnKeysBatchSize(_withdrawnKeysBatchSize *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateWithdrawnKeysBatchSize(&_StaderConfig.TransactOpts, _withdrawnKeysBatchSize) +} + +// StaderConfigInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the StaderConfig contract. +type StaderConfigInitializedIterator struct { + Event *StaderConfigInitialized // 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 *StaderConfigInitializedIterator) 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(StaderConfigInitialized) + if err := 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(StaderConfigInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigInitialized represents a Initialized event raised by the StaderConfig contract. +type StaderConfigInitialized 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 (_StaderConfig *StaderConfigFilterer) FilterInitialized(opts *bind.FilterOpts) (*StaderConfigInitializedIterator, error) { + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &StaderConfigInitializedIterator{contract: _StaderConfig.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 (_StaderConfig *StaderConfigFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *StaderConfigInitialized) (event.Subscription, error) { + + logs, sub, err := _StaderConfig.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(StaderConfigInitialized) + if err := _StaderConfig.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 (_StaderConfig *StaderConfigFilterer) ParseInitialized(log types.Log) (*StaderConfigInitialized, error) { + event := new(StaderConfigInitialized) + if err := _StaderConfig.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderConfigRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the StaderConfig contract. +type StaderConfigRoleAdminChangedIterator struct { + Event *StaderConfigRoleAdminChanged // 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 *StaderConfigRoleAdminChangedIterator) 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(StaderConfigRoleAdminChanged) + if err := 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(StaderConfigRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigRoleAdminChanged represents a RoleAdminChanged event raised by the StaderConfig contract. +type StaderConfigRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_StaderConfig *StaderConfigFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*StaderConfigRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &StaderConfigRoleAdminChangedIterator{contract: _StaderConfig.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_StaderConfig *StaderConfigFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *StaderConfigRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(StaderConfigRoleAdminChanged) + if err := _StaderConfig.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_StaderConfig *StaderConfigFilterer) ParseRoleAdminChanged(log types.Log) (*StaderConfigRoleAdminChanged, error) { + event := new(StaderConfigRoleAdminChanged) + if err := _StaderConfig.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderConfigRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the StaderConfig contract. +type StaderConfigRoleGrantedIterator struct { + Event *StaderConfigRoleGranted // 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 *StaderConfigRoleGrantedIterator) 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(StaderConfigRoleGranted) + if err := 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(StaderConfigRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigRoleGranted represents a RoleGranted event raised by the StaderConfig contract. +type StaderConfigRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderConfig *StaderConfigFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*StaderConfigRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &StaderConfigRoleGrantedIterator{contract: _StaderConfig.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderConfig *StaderConfigFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *StaderConfigRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, 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(StaderConfigRoleGranted) + if err := _StaderConfig.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderConfig *StaderConfigFilterer) ParseRoleGranted(log types.Log) (*StaderConfigRoleGranted, error) { + event := new(StaderConfigRoleGranted) + if err := _StaderConfig.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderConfigRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the StaderConfig contract. +type StaderConfigRoleRevokedIterator struct { + Event *StaderConfigRoleRevoked // 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 *StaderConfigRoleRevokedIterator) 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(StaderConfigRoleRevoked) + if err := 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(StaderConfigRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigRoleRevoked represents a RoleRevoked event raised by the StaderConfig contract. +type StaderConfigRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderConfig *StaderConfigFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*StaderConfigRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &StaderConfigRoleRevokedIterator{contract: _StaderConfig.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderConfig *StaderConfigFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *StaderConfigRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, 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(StaderConfigRoleRevoked) + if err := _StaderConfig.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderConfig *StaderConfigFilterer) ParseRoleRevoked(log types.Log) (*StaderConfigRoleRevoked, error) { + event := new(StaderConfigRoleRevoked) + if err := _StaderConfig.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderConfigSetAccountIterator is returned from FilterSetAccount and is used to iterate over the raw logs and unpacked data for SetAccount events raised by the StaderConfig contract. +type StaderConfigSetAccountIterator struct { + Event *StaderConfigSetAccount // 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 *StaderConfigSetAccountIterator) 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(StaderConfigSetAccount) + if err := 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(StaderConfigSetAccount) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigSetAccountIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigSetAccountIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigSetAccount represents a SetAccount event raised by the StaderConfig contract. +type StaderConfigSetAccount struct { + Key [32]byte + NewAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSetAccount is a free log retrieval operation binding the contract event 0xcbdd341876786c7241ad12a5ce5ea46739a4ce7b1587d0c216dfa655a98e50a6. +// +// Solidity: event SetAccount(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) FilterSetAccount(opts *bind.FilterOpts) (*StaderConfigSetAccountIterator, error) { + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "SetAccount") + if err != nil { + return nil, err + } + return &StaderConfigSetAccountIterator{contract: _StaderConfig.contract, event: "SetAccount", logs: logs, sub: sub}, nil +} + +// WatchSetAccount is a free log subscription operation binding the contract event 0xcbdd341876786c7241ad12a5ce5ea46739a4ce7b1587d0c216dfa655a98e50a6. +// +// Solidity: event SetAccount(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) WatchSetAccount(opts *bind.WatchOpts, sink chan<- *StaderConfigSetAccount) (event.Subscription, error) { + + logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "SetAccount") + 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(StaderConfigSetAccount) + if err := _StaderConfig.contract.UnpackLog(event, "SetAccount", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSetAccount is a log parse operation binding the contract event 0xcbdd341876786c7241ad12a5ce5ea46739a4ce7b1587d0c216dfa655a98e50a6. +// +// Solidity: event SetAccount(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) ParseSetAccount(log types.Log) (*StaderConfigSetAccount, error) { + event := new(StaderConfigSetAccount) + if err := _StaderConfig.contract.UnpackLog(event, "SetAccount", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderConfigSetConstantIterator is returned from FilterSetConstant and is used to iterate over the raw logs and unpacked data for SetConstant events raised by the StaderConfig contract. +type StaderConfigSetConstantIterator struct { + Event *StaderConfigSetConstant // 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 *StaderConfigSetConstantIterator) 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(StaderConfigSetConstant) + if err := 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(StaderConfigSetConstant) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigSetConstantIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigSetConstantIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigSetConstant represents a SetConstant event raised by the StaderConfig contract. +type StaderConfigSetConstant struct { + Key [32]byte + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSetConstant is a free log retrieval operation binding the contract event 0x9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c46581630. +// +// Solidity: event SetConstant(bytes32 key, uint256 amount) +func (_StaderConfig *StaderConfigFilterer) FilterSetConstant(opts *bind.FilterOpts) (*StaderConfigSetConstantIterator, error) { + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "SetConstant") + if err != nil { + return nil, err + } + return &StaderConfigSetConstantIterator{contract: _StaderConfig.contract, event: "SetConstant", logs: logs, sub: sub}, nil +} + +// WatchSetConstant is a free log subscription operation binding the contract event 0x9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c46581630. +// +// Solidity: event SetConstant(bytes32 key, uint256 amount) +func (_StaderConfig *StaderConfigFilterer) WatchSetConstant(opts *bind.WatchOpts, sink chan<- *StaderConfigSetConstant) (event.Subscription, error) { + + logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "SetConstant") + 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(StaderConfigSetConstant) + if err := _StaderConfig.contract.UnpackLog(event, "SetConstant", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSetConstant is a log parse operation binding the contract event 0x9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c46581630. +// +// Solidity: event SetConstant(bytes32 key, uint256 amount) +func (_StaderConfig *StaderConfigFilterer) ParseSetConstant(log types.Log) (*StaderConfigSetConstant, error) { + event := new(StaderConfigSetConstant) + if err := _StaderConfig.contract.UnpackLog(event, "SetConstant", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderConfigSetContractIterator is returned from FilterSetContract and is used to iterate over the raw logs and unpacked data for SetContract events raised by the StaderConfig contract. +type StaderConfigSetContractIterator struct { + Event *StaderConfigSetContract // 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 *StaderConfigSetContractIterator) 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(StaderConfigSetContract) + if err := 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(StaderConfigSetContract) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigSetContractIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigSetContractIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigSetContract represents a SetContract event raised by the StaderConfig contract. +type StaderConfigSetContract struct { + Key [32]byte + NewAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSetContract is a free log retrieval operation binding the contract event 0x5de40a806536a2029221dac2c8887ac9f11952fcc1ed3d7cfb4476dd5259b740. +// +// Solidity: event SetContract(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) FilterSetContract(opts *bind.FilterOpts) (*StaderConfigSetContractIterator, error) { + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "SetContract") + if err != nil { + return nil, err + } + return &StaderConfigSetContractIterator{contract: _StaderConfig.contract, event: "SetContract", logs: logs, sub: sub}, nil +} + +// WatchSetContract is a free log subscription operation binding the contract event 0x5de40a806536a2029221dac2c8887ac9f11952fcc1ed3d7cfb4476dd5259b740. +// +// Solidity: event SetContract(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) WatchSetContract(opts *bind.WatchOpts, sink chan<- *StaderConfigSetContract) (event.Subscription, error) { + + logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "SetContract") + 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(StaderConfigSetContract) + if err := _StaderConfig.contract.UnpackLog(event, "SetContract", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSetContract is a log parse operation binding the contract event 0x5de40a806536a2029221dac2c8887ac9f11952fcc1ed3d7cfb4476dd5259b740. +// +// Solidity: event SetContract(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) ParseSetContract(log types.Log) (*StaderConfigSetContract, error) { + event := new(StaderConfigSetContract) + if err := _StaderConfig.contract.UnpackLog(event, "SetContract", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderConfigSetTokenIterator is returned from FilterSetToken and is used to iterate over the raw logs and unpacked data for SetToken events raised by the StaderConfig contract. +type StaderConfigSetTokenIterator struct { + Event *StaderConfigSetToken // 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 *StaderConfigSetTokenIterator) 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(StaderConfigSetToken) + if err := 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(StaderConfigSetToken) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigSetTokenIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigSetTokenIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigSetToken represents a SetToken event raised by the StaderConfig contract. +type StaderConfigSetToken struct { + Key [32]byte + NewAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSetToken is a free log retrieval operation binding the contract event 0x19aab10c6a9f5d648eaa15e2d515f8dfda570ee221e7c8cb9dc07694e68005bc. +// +// Solidity: event SetToken(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) FilterSetToken(opts *bind.FilterOpts) (*StaderConfigSetTokenIterator, error) { + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "SetToken") + if err != nil { + return nil, err + } + return &StaderConfigSetTokenIterator{contract: _StaderConfig.contract, event: "SetToken", logs: logs, sub: sub}, nil +} + +// WatchSetToken is a free log subscription operation binding the contract event 0x19aab10c6a9f5d648eaa15e2d515f8dfda570ee221e7c8cb9dc07694e68005bc. +// +// Solidity: event SetToken(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) WatchSetToken(opts *bind.WatchOpts, sink chan<- *StaderConfigSetToken) (event.Subscription, error) { + + logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "SetToken") + 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(StaderConfigSetToken) + if err := _StaderConfig.contract.UnpackLog(event, "SetToken", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSetToken is a log parse operation binding the contract event 0x19aab10c6a9f5d648eaa15e2d515f8dfda570ee221e7c8cb9dc07694e68005bc. +// +// Solidity: event SetToken(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) ParseSetToken(log types.Log) (*StaderConfigSetToken, error) { + event := new(StaderConfigSetToken) + if err := _StaderConfig.contract.UnpackLog(event, "SetToken", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderConfigSetVariableIterator is returned from FilterSetVariable and is used to iterate over the raw logs and unpacked data for SetVariable events raised by the StaderConfig contract. +type StaderConfigSetVariableIterator struct { + Event *StaderConfigSetVariable // 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 *StaderConfigSetVariableIterator) 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(StaderConfigSetVariable) + if err := 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(StaderConfigSetVariable) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigSetVariableIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigSetVariableIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigSetVariable represents a SetVariable event raised by the StaderConfig contract. +type StaderConfigSetVariable struct { + Key [32]byte + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSetVariable is a free log retrieval operation binding the contract event 0x8091d0a33efc2ef6d3c254604932c813b52281547a6915df7dc1a5554f080c3e. +// +// Solidity: event SetVariable(bytes32 key, uint256 amount) +func (_StaderConfig *StaderConfigFilterer) FilterSetVariable(opts *bind.FilterOpts) (*StaderConfigSetVariableIterator, error) { + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "SetVariable") + if err != nil { + return nil, err + } + return &StaderConfigSetVariableIterator{contract: _StaderConfig.contract, event: "SetVariable", logs: logs, sub: sub}, nil +} + +// WatchSetVariable is a free log subscription operation binding the contract event 0x8091d0a33efc2ef6d3c254604932c813b52281547a6915df7dc1a5554f080c3e. +// +// Solidity: event SetVariable(bytes32 key, uint256 amount) +func (_StaderConfig *StaderConfigFilterer) WatchSetVariable(opts *bind.WatchOpts, sink chan<- *StaderConfigSetVariable) (event.Subscription, error) { + + logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "SetVariable") + 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(StaderConfigSetVariable) + if err := _StaderConfig.contract.UnpackLog(event, "SetVariable", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSetVariable is a log parse operation binding the contract event 0x8091d0a33efc2ef6d3c254604932c813b52281547a6915df7dc1a5554f080c3e. +// +// Solidity: event SetVariable(bytes32 key, uint256 amount) +func (_StaderConfig *StaderConfigFilterer) ParseSetVariable(log types.Log) (*StaderConfigSetVariable, error) { + event := new(StaderConfigSetVariable) + if err := _StaderConfig.contract.UnpackLog(event, "SetVariable", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/testing/deploy.go b/testing/deploy.go index e09f202c4..bd2bbfc23 100644 --- a/testing/deploy.go +++ b/testing/deploy.go @@ -51,14 +51,24 @@ func deployContracts(eth1URL string) { } // deploy the contract - address, tx, _, err := api.DeployETHX(auth, client) + address, _, _, err := api.DeployETHX(auth, client) + if err != nil { + panic(err) + } + + auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + if err != nil { + panic(err) + } + + staderCfAddress, _, _, err := api.DeployStaderConfig(auth, client) if err != nil { panic(err) } fmt.Printf("Api contract from %s\n", auth.From.Hex()) - fmt.Printf("Api contract deployed to %s\n", address.Hex()) - fmt.Printf("Tx: %s\n", tx.Hash().Hex()) + fmt.Printf("DeployETHX to %s\n", address.Hex()) + fmt.Printf("DeployStaderConfig to %s\n", staderCfAddress.Hex()) } From 2f3cbc000791c8162ed4a8f200de03d9c4d91612 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Thu, 15 Jun 2023 00:32:35 +0700 Subject: [PATCH 16/90] Update contract address --- shared/services/config/stadernode-config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/services/config/stadernode-config.go b/shared/services/config/stadernode-config.go index ac69365cf..9ace5e2bb 100644 --- a/shared/services/config/stadernode-config.go +++ b/shared/services/config/stadernode-config.go @@ -252,7 +252,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Devnet: "0x749Ed651c4F41E0D705960e815A58815ffFd3afe", config.Network_Mainnet: "0x749Ed651c4F41E0D705960e815A58815ffFd3afe", config.Network_Zhejiang: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", - config.Network_Local: "0xAb2A01BC351770D09611Ac80f1DE076D56E0487d", + config.Network_Local: "0x4c849Ff66a6F0A954cbf7818b8a763105C2787D6", }, baseStaderBackendUrl: map[config.Network]string{ From e203f3ccbb09ba09fe7ab7af4408b341291dcae7 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Thu, 15 Jun 2023 16:21:44 +0700 Subject: [PATCH 17/90] Deploys contracts --- shared/services/config/stadernode-config.go | 2 +- shared/services/services.go | 13 + stader-cli/validator/export.go | 8 +- stader-lib/api/ELContract.go | 307 - stader-lib/api/ELContractFactory.go | 317 - stader-lib/api/StaderConfig.go | 5117 ----------------- stader-lib/{api => contracts}/ETHX.go | 438 +- .../contracts/permissionless-node-registry.go | 48 +- stader-lib/contracts/permissionless-pool.go | 86 +- stader-lib/contracts/stader-config.go | 356 +- stader-lib/stader-config/stader-config.go | 3 +- stader-lib/stader/stader.go | 34 +- stader/node/node.go | 116 +- testing/config_test.go | 8 +- testing/deploy.go | 108 +- testing/node_test.go | 13 +- 16 files changed, 1004 insertions(+), 5970 deletions(-) delete mode 100644 stader-lib/api/ELContract.go delete mode 100644 stader-lib/api/ELContractFactory.go delete mode 100644 stader-lib/api/StaderConfig.go rename stader-lib/{api => contracts}/ETHX.go (65%) diff --git a/shared/services/config/stadernode-config.go b/shared/services/config/stadernode-config.go index 9ace5e2bb..528e9ad9c 100644 --- a/shared/services/config/stadernode-config.go +++ b/shared/services/config/stadernode-config.go @@ -236,7 +236,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Prater: 5, // Goerli config.Network_Devnet: 5, // Also goerli config.Network_Zhejiang: 1337803, // Zhejiang - config.Network_Local: 1337809, // Zhejiang + config.Network_Local: 3151908, // Zhejiang }, ethxTokenAddress: map[config.Network]string{ diff --git a/shared/services/services.go b/shared/services/services.go index c16f06018..586c9232e 100644 --- a/shared/services/services.go +++ b/shared/services/services.go @@ -117,6 +117,19 @@ func GetStaderConfigContract(c *cli.Context) (*stader.StaderConfigContractManage return stader.NewStaderConfig(ec, cfg.StaderNode.GetStaderConfigAddress()) } +func GetEthXContract(c *cli.Context) (*stader.EthxContractManager, error) { + cfg, err := getConfig(c) + if err != nil { + return nil, err + } + ec, err := getEthClient(c, cfg) + if err != nil { + return nil, err + } + + return stader.NewEthxContractManager(ec, cfg.StaderNode.GetEthxTokenAddress()) +} + func GetPermissionlessNodeRegistryAddress(c *cli.Context) (common.Address, error) { sdcfg, err := GetStaderConfigContract(c) if err != nil { diff --git a/stader-cli/validator/export.go b/stader-cli/validator/export.go index 893189abf..56dec55e4 100644 --- a/stader-cli/validator/export.go +++ b/stader-cli/validator/export.go @@ -3,14 +3,16 @@ package validator import ( "encoding/csv" "fmt" + "os" + "github.com/stader-labs/stader-node/shared/services/stader" cliutils "github.com/stader-labs/stader-node/shared/utils/cli" "github.com/stader-labs/stader-node/shared/utils/log" "github.com/stader-labs/stader-node/shared/utils/math" "github.com/stader-labs/stader-node/stader-lib/types" "github.com/stader-labs/stader-node/stader-lib/utils/eth" + "github.com/test-go/testify/require" "github.com/urfave/cli" - "os" ) func exportValidatorStatus(c *cli.Context) error { @@ -52,9 +54,7 @@ func exportValidatorStatus(c *cli.Context) error { fmt.Printf("Exporting validator status for %d validators\n\n", len(status.ValidatorInfos)) file, err := os.Create("validator_info.csv") - if err != nil { - panic(err) - } + require.Nil(t, err) defer file.Close() csvWriter := csv.NewWriter(file) diff --git a/stader-lib/api/ELContract.go b/stader-lib/api/ELContract.go deleted file mode 100644 index aa7e76f15..000000000 --- a/stader-lib/api/ELContract.go +++ /dev/null @@ -1,307 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package contracts - -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 -) - -// ELContractMetaData contains all meta data concerning the ELContract contract. -var ELContractMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_storageContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"elContractDelegateKey\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"storageContract\",\"outputs\":[{\"internalType\":\"contractIStorage\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60c060405234801561000f575f80fd5b506040516102df3803806102df83398101604081905261002e91610096565b6001600160a01b03811660a0526040516f636f6e74726163742e6164647265737360801b602082015271454c436f6e747261637444656c656761746560701b603082015260420160408051601f198184030181529190528051602090910120608052506100c3565b5f602082840312156100a6575f80fd5b81516001600160a01b03811681146100bc575f80fd5b9392505050565b60805160a0516101ef6100f05f395f8181606a015261010c01525f81816042015261015c01526101ef5ff3fe60806040526004361061002c575f3560e01c806311ce0267146100fb578063638927951461014b57610033565b3661003357005b6040516321f8a72160e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906321f8a72190602401602060405180830381865afa1580156100b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100db919061018c565b9050365f80375f80365f845af43d5f803e8080156100f7573d5ff35b3d5ffd5b348015610106575f80fd5b5061012e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610156575f80fd5b5061017e7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610142565b5f6020828403121561019c575f80fd5b81516001600160a01b03811681146101b2575f80fd5b939250505056fea2646970667358221220d756c64b850292594ad4eb5deb84983dac4e9ece2dff895b5ef38ce2efe23f7664736f6c63430008140033", -} - -// ELContractABI is the input ABI used to generate the binding from. -// Deprecated: Use ELContractMetaData.ABI instead. -var ELContractABI = ELContractMetaData.ABI - -// ELContractBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use ELContractMetaData.Bin instead. -var ELContractBin = ELContractMetaData.Bin - -// DeployELContract deploys a new Ethereum contract, binding an instance of ELContract to it. -func DeployELContract(auth *bind.TransactOpts, backend bind.ContractBackend, _storageContract common.Address) (common.Address, *types.Transaction, *ELContract, error) { - parsed, err := ELContractMetaData.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(ELContractBin), backend, _storageContract) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &ELContract{ELContractCaller: ELContractCaller{contract: contract}, ELContractTransactor: ELContractTransactor{contract: contract}, ELContractFilterer: ELContractFilterer{contract: contract}}, nil -} - -// ELContract is an auto generated Go binding around an Ethereum contract. -type ELContract struct { - ELContractCaller // Read-only binding to the contract - ELContractTransactor // Write-only binding to the contract - ELContractFilterer // Log filterer for contract events -} - -// ELContractCaller is an auto generated read-only Go binding around an Ethereum contract. -type ELContractCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ELContractTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ELContractTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ELContractFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ELContractFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ELContractSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ELContractSession struct { - Contract *ELContract // 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 -} - -// ELContractCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ELContractCallerSession struct { - Contract *ELContractCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ELContractTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ELContractTransactorSession struct { - Contract *ELContractTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ELContractRaw is an auto generated low-level Go binding around an Ethereum contract. -type ELContractRaw struct { - Contract *ELContract // Generic contract binding to access the raw methods on -} - -// ELContractCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ELContractCallerRaw struct { - Contract *ELContractCaller // Generic read-only contract binding to access the raw methods on -} - -// ELContractTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ELContractTransactorRaw struct { - Contract *ELContractTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewELContract creates a new instance of ELContract, bound to a specific deployed contract. -func NewELContract(address common.Address, backend bind.ContractBackend) (*ELContract, error) { - contract, err := bindELContract(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &ELContract{ELContractCaller: ELContractCaller{contract: contract}, ELContractTransactor: ELContractTransactor{contract: contract}, ELContractFilterer: ELContractFilterer{contract: contract}}, nil -} - -// NewELContractCaller creates a new read-only instance of ELContract, bound to a specific deployed contract. -func NewELContractCaller(address common.Address, caller bind.ContractCaller) (*ELContractCaller, error) { - contract, err := bindELContract(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ELContractCaller{contract: contract}, nil -} - -// NewELContractTransactor creates a new write-only instance of ELContract, bound to a specific deployed contract. -func NewELContractTransactor(address common.Address, transactor bind.ContractTransactor) (*ELContractTransactor, error) { - contract, err := bindELContract(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ELContractTransactor{contract: contract}, nil -} - -// NewELContractFilterer creates a new log filterer instance of ELContract, bound to a specific deployed contract. -func NewELContractFilterer(address common.Address, filterer bind.ContractFilterer) (*ELContractFilterer, error) { - contract, err := bindELContract(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ELContractFilterer{contract: contract}, nil -} - -// bindELContract binds a generic wrapper to an already deployed contract. -func bindELContract(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ELContractMetaData.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 (_ELContract *ELContractRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ELContract.Contract.ELContractCaller.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 (_ELContract *ELContractRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ELContract.Contract.ELContractTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ELContract *ELContractRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ELContract.Contract.ELContractTransactor.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 (_ELContract *ELContractCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ELContract.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 (_ELContract *ELContractTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ELContract.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ELContract *ELContractTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ELContract.Contract.contract.Transact(opts, method, params...) -} - -// ElContractDelegateKey is a free data retrieval call binding the contract method 0x63892795. -// -// Solidity: function elContractDelegateKey() view returns(bytes32) -func (_ELContract *ELContractCaller) ElContractDelegateKey(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _ELContract.contract.Call(opts, &out, "elContractDelegateKey") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ElContractDelegateKey is a free data retrieval call binding the contract method 0x63892795. -// -// Solidity: function elContractDelegateKey() view returns(bytes32) -func (_ELContract *ELContractSession) ElContractDelegateKey() ([32]byte, error) { - return _ELContract.Contract.ElContractDelegateKey(&_ELContract.CallOpts) -} - -// ElContractDelegateKey is a free data retrieval call binding the contract method 0x63892795. -// -// Solidity: function elContractDelegateKey() view returns(bytes32) -func (_ELContract *ELContractCallerSession) ElContractDelegateKey() ([32]byte, error) { - return _ELContract.Contract.ElContractDelegateKey(&_ELContract.CallOpts) -} - -// StorageContract is a free data retrieval call binding the contract method 0x11ce0267. -// -// Solidity: function storageContract() view returns(address) -func (_ELContract *ELContractCaller) StorageContract(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ELContract.contract.Call(opts, &out, "storageContract") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// StorageContract is a free data retrieval call binding the contract method 0x11ce0267. -// -// Solidity: function storageContract() view returns(address) -func (_ELContract *ELContractSession) StorageContract() (common.Address, error) { - return _ELContract.Contract.StorageContract(&_ELContract.CallOpts) -} - -// StorageContract is a free data retrieval call binding the contract method 0x11ce0267. -// -// Solidity: function storageContract() view returns(address) -func (_ELContract *ELContractCallerSession) StorageContract() (common.Address, error) { - return _ELContract.Contract.StorageContract(&_ELContract.CallOpts) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_ELContract *ELContractTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { - return _ELContract.contract.RawTransact(opts, calldata) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_ELContract *ELContractSession) Fallback(calldata []byte) (*types.Transaction, error) { - return _ELContract.Contract.Fallback(&_ELContract.TransactOpts, calldata) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() payable returns() -func (_ELContract *ELContractTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { - return _ELContract.Contract.Fallback(&_ELContract.TransactOpts, calldata) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_ELContract *ELContractTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ELContract.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 (_ELContract *ELContractSession) Receive() (*types.Transaction, error) { - return _ELContract.Contract.Receive(&_ELContract.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_ELContract *ELContractTransactorSession) Receive() (*types.Transaction, error) { - return _ELContract.Contract.Receive(&_ELContract.TransactOpts) -} diff --git a/stader-lib/api/ELContractFactory.go b/stader-lib/api/ELContractFactory.go deleted file mode 100644 index acf17811e..000000000 --- a/stader-lib/api/ELContractFactory.go +++ /dev/null @@ -1,317 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package contracts - -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 -) - -// ELContractFactoryMetaData contains all meta data concerning the ELContractFactory contract. -var ELContractFactoryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"createProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"getProxyAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"getPubkeyRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b506040516104c63803806104c683398101604081905261002e9161009b565b6001600160a01b0381166100775760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640160405180910390fd5b5f80546001600160a01b0319166001600160a01b03929092169190911790556100c8565b5f602082840312156100ab575f80fd5b81516001600160a01b03811681146100c1575f80fd5b9392505050565b6103f1806100d55f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80635c60da1b1461004e5780638f295d591461007d578063c016c13714610092578063f0c418c8146100a5575b5f80fd5b5f54610060906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61009061008b3660046102e5565b6100c6565b005b6100606100a03660046102e5565b6100ef565b6100b86100b33660046102e5565b61011d565b604051908152602001610074565b5f6100d1838361011d565b5f549091506100e9906001600160a01b0316826101e2565b50505050565b5f806100fb848461011d565b5f54909150610113906001600160a01b031682610280565b9150505b92915050565b5f6030821461016b5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e0eac4d6caf240d8cadccee8d605b1b60448201526064015b60405180910390fd5b60405160029061018390859085905f90602001610351565b60408051601f198184030181529082905261019d91610378565b602060405180830381855afa1580156101b8573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906101db91906103a4565b9392505050565b5f604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528360601b60148201526e5af43d82803e903d91602b57fd5bf360881b6028820152826037825ff59150506001600160a01b0381166101175760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401610162565b5f6101db838330604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b8152606093841b60148201526f5af43d82803e903d91602b57fd5bf3ff60801b6028820152921b6038830152604c8201526037808220606c830152605591012090565b5f80602083850312156102f6575f80fd5b823567ffffffffffffffff8082111561030d575f80fd5b818501915085601f830112610320575f80fd5b81358181111561032e575f80fd5b86602082850101111561033f575f80fd5b60209290920196919550909350505050565b828482376fffffffffffffffffffffffffffffffff19919091169101908152601001919050565b5f82515f5b81811015610397576020818601810151858301520161037d565b505f920191825250919050565b5f602082840312156103b4575f80fd5b505191905056fea26469706673582212206d63d55da23c642bc1b07e2a4533f3e313fd9945346808e0424993d9b0a2ab4c64736f6c63430008140033", -} - -// ELContractFactoryABI is the input ABI used to generate the binding from. -// Deprecated: Use ELContractFactoryMetaData.ABI instead. -var ELContractFactoryABI = ELContractFactoryMetaData.ABI - -// ELContractFactoryBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use ELContractFactoryMetaData.Bin instead. -var ELContractFactoryBin = ELContractFactoryMetaData.Bin - -// DeployELContractFactory deploys a new Ethereum contract, binding an instance of ELContractFactory to it. -func DeployELContractFactory(auth *bind.TransactOpts, backend bind.ContractBackend, _implementation common.Address) (common.Address, *types.Transaction, *ELContractFactory, error) { - parsed, err := ELContractFactoryMetaData.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(ELContractFactoryBin), backend, _implementation) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &ELContractFactory{ELContractFactoryCaller: ELContractFactoryCaller{contract: contract}, ELContractFactoryTransactor: ELContractFactoryTransactor{contract: contract}, ELContractFactoryFilterer: ELContractFactoryFilterer{contract: contract}}, nil -} - -// ELContractFactory is an auto generated Go binding around an Ethereum contract. -type ELContractFactory struct { - ELContractFactoryCaller // Read-only binding to the contract - ELContractFactoryTransactor // Write-only binding to the contract - ELContractFactoryFilterer // Log filterer for contract events -} - -// ELContractFactoryCaller is an auto generated read-only Go binding around an Ethereum contract. -type ELContractFactoryCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ELContractFactoryTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ELContractFactoryTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ELContractFactoryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ELContractFactoryFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ELContractFactorySession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ELContractFactorySession struct { - Contract *ELContractFactory // 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 -} - -// ELContractFactoryCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ELContractFactoryCallerSession struct { - Contract *ELContractFactoryCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ELContractFactoryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ELContractFactoryTransactorSession struct { - Contract *ELContractFactoryTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ELContractFactoryRaw is an auto generated low-level Go binding around an Ethereum contract. -type ELContractFactoryRaw struct { - Contract *ELContractFactory // Generic contract binding to access the raw methods on -} - -// ELContractFactoryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ELContractFactoryCallerRaw struct { - Contract *ELContractFactoryCaller // Generic read-only contract binding to access the raw methods on -} - -// ELContractFactoryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ELContractFactoryTransactorRaw struct { - Contract *ELContractFactoryTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewELContractFactory creates a new instance of ELContractFactory, bound to a specific deployed contract. -func NewELContractFactory(address common.Address, backend bind.ContractBackend) (*ELContractFactory, error) { - contract, err := bindELContractFactory(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &ELContractFactory{ELContractFactoryCaller: ELContractFactoryCaller{contract: contract}, ELContractFactoryTransactor: ELContractFactoryTransactor{contract: contract}, ELContractFactoryFilterer: ELContractFactoryFilterer{contract: contract}}, nil -} - -// NewELContractFactoryCaller creates a new read-only instance of ELContractFactory, bound to a specific deployed contract. -func NewELContractFactoryCaller(address common.Address, caller bind.ContractCaller) (*ELContractFactoryCaller, error) { - contract, err := bindELContractFactory(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ELContractFactoryCaller{contract: contract}, nil -} - -// NewELContractFactoryTransactor creates a new write-only instance of ELContractFactory, bound to a specific deployed contract. -func NewELContractFactoryTransactor(address common.Address, transactor bind.ContractTransactor) (*ELContractFactoryTransactor, error) { - contract, err := bindELContractFactory(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ELContractFactoryTransactor{contract: contract}, nil -} - -// NewELContractFactoryFilterer creates a new log filterer instance of ELContractFactory, bound to a specific deployed contract. -func NewELContractFactoryFilterer(address common.Address, filterer bind.ContractFilterer) (*ELContractFactoryFilterer, error) { - contract, err := bindELContractFactory(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ELContractFactoryFilterer{contract: contract}, nil -} - -// bindELContractFactory binds a generic wrapper to an already deployed contract. -func bindELContractFactory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ELContractFactoryMetaData.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 (_ELContractFactory *ELContractFactoryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ELContractFactory.Contract.ELContractFactoryCaller.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 (_ELContractFactory *ELContractFactoryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ELContractFactory.Contract.ELContractFactoryTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ELContractFactory *ELContractFactoryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ELContractFactory.Contract.ELContractFactoryTransactor.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 (_ELContractFactory *ELContractFactoryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ELContractFactory.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 (_ELContractFactory *ELContractFactoryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ELContractFactory.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ELContractFactory *ELContractFactoryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ELContractFactory.Contract.contract.Transact(opts, method, params...) -} - -// GetProxyAddress is a free data retrieval call binding the contract method 0xc016c137. -// -// Solidity: function getProxyAddress(bytes _pubkey) view returns(address) -func (_ELContractFactory *ELContractFactoryCaller) GetProxyAddress(opts *bind.CallOpts, _pubkey []byte) (common.Address, error) { - var out []interface{} - err := _ELContractFactory.contract.Call(opts, &out, "getProxyAddress", _pubkey) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetProxyAddress is a free data retrieval call binding the contract method 0xc016c137. -// -// Solidity: function getProxyAddress(bytes _pubkey) view returns(address) -func (_ELContractFactory *ELContractFactorySession) GetProxyAddress(_pubkey []byte) (common.Address, error) { - return _ELContractFactory.Contract.GetProxyAddress(&_ELContractFactory.CallOpts, _pubkey) -} - -// GetProxyAddress is a free data retrieval call binding the contract method 0xc016c137. -// -// Solidity: function getProxyAddress(bytes _pubkey) view returns(address) -func (_ELContractFactory *ELContractFactoryCallerSession) GetProxyAddress(_pubkey []byte) (common.Address, error) { - return _ELContractFactory.Contract.GetProxyAddress(&_ELContractFactory.CallOpts, _pubkey) -} - -// GetPubkeyRoot is a free data retrieval call binding the contract method 0xf0c418c8. -// -// Solidity: function getPubkeyRoot(bytes _pubkey) pure returns(bytes32) -func (_ELContractFactory *ELContractFactoryCaller) GetPubkeyRoot(opts *bind.CallOpts, _pubkey []byte) ([32]byte, error) { - var out []interface{} - err := _ELContractFactory.contract.Call(opts, &out, "getPubkeyRoot", _pubkey) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GetPubkeyRoot is a free data retrieval call binding the contract method 0xf0c418c8. -// -// Solidity: function getPubkeyRoot(bytes _pubkey) pure returns(bytes32) -func (_ELContractFactory *ELContractFactorySession) GetPubkeyRoot(_pubkey []byte) ([32]byte, error) { - return _ELContractFactory.Contract.GetPubkeyRoot(&_ELContractFactory.CallOpts, _pubkey) -} - -// GetPubkeyRoot is a free data retrieval call binding the contract method 0xf0c418c8. -// -// Solidity: function getPubkeyRoot(bytes _pubkey) pure returns(bytes32) -func (_ELContractFactory *ELContractFactoryCallerSession) GetPubkeyRoot(_pubkey []byte) ([32]byte, error) { - return _ELContractFactory.Contract.GetPubkeyRoot(&_ELContractFactory.CallOpts, _pubkey) -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_ELContractFactory *ELContractFactoryCaller) Implementation(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ELContractFactory.contract.Call(opts, &out, "implementation") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_ELContractFactory *ELContractFactorySession) Implementation() (common.Address, error) { - return _ELContractFactory.Contract.Implementation(&_ELContractFactory.CallOpts) -} - -// Implementation is a free data retrieval call binding the contract method 0x5c60da1b. -// -// Solidity: function implementation() view returns(address) -func (_ELContractFactory *ELContractFactoryCallerSession) Implementation() (common.Address, error) { - return _ELContractFactory.Contract.Implementation(&_ELContractFactory.CallOpts) -} - -// CreateProxy is a paid mutator transaction binding the contract method 0x8f295d59. -// -// Solidity: function createProxy(bytes _pubkey) returns() -func (_ELContractFactory *ELContractFactoryTransactor) CreateProxy(opts *bind.TransactOpts, _pubkey []byte) (*types.Transaction, error) { - return _ELContractFactory.contract.Transact(opts, "createProxy", _pubkey) -} - -// CreateProxy is a paid mutator transaction binding the contract method 0x8f295d59. -// -// Solidity: function createProxy(bytes _pubkey) returns() -func (_ELContractFactory *ELContractFactorySession) CreateProxy(_pubkey []byte) (*types.Transaction, error) { - return _ELContractFactory.Contract.CreateProxy(&_ELContractFactory.TransactOpts, _pubkey) -} - -// CreateProxy is a paid mutator transaction binding the contract method 0x8f295d59. -// -// Solidity: function createProxy(bytes _pubkey) returns() -func (_ELContractFactory *ELContractFactoryTransactorSession) CreateProxy(_pubkey []byte) (*types.Transaction, error) { - return _ELContractFactory.Contract.CreateProxy(&_ELContractFactory.TransactOpts, _pubkey) -} diff --git a/stader-lib/api/StaderConfig.go b/stader-lib/api/StaderConfig.go deleted file mode 100644 index c30e99245..000000000 --- a/stader-lib/api/StaderConfig.go +++ /dev/null @@ -1,5117 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package contracts - -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 -) - -// StaderConfigMetaData contains all meta data concerning the StaderConfig contract. -var StaderConfigMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidLimits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMaxDepositValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMaxWithdrawValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMinDepositValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMinWithdrawValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SetConstant\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SetVariable\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUCTION_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DECIMALS\",\"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\":\"ETHX_SUPPLY_POR_FEED\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_BALANCE_POR_FEED\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_DEPOSIT_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_PER_NODE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETHx\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FULL_DEPOSIT_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_DEPOSIT_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_WITHDRAW_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_DEPOSIT_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_WITHDRAW_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_EL_REWARD_VAULT_IMPLEMENTATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_MAX_NAME_LENGTH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_REWARD_COLLECTOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PENALTY_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_NODE_REGISTRY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_SOCIALIZING_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_NODE_REGISTRY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_SOCIALIZING_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_SELECTOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_UTILS\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRE_DEPOSIT_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REWARD_THRESHOLD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SD_COLLATERAL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOCIALIZING_POOL_CYCLE_DURATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_INSURANCE_FUND\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_ORACLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_TREASURY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKE_POOL_MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOTAL_FEE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"USER_WITHDRAW_MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_FACTORY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WITHDRAWN_KEYS_BATCH_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuctionContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDecimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHBalancePORFeedProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHDepositContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHXSupplyPORFeedProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHxToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFullDepositSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxDepositAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxWithdrawAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinBlockDelayToFinalizeWithdrawRequest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinDepositAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinWithdrawAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeELRewardVaultImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperatorMaxNameLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperatorRewardsCollector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPenaltyContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedSocializingPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessSocializingPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSelector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolUtils\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPreDepositSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsThreshold\",\"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\":[],\"name\":\"getSDCollateral\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSocializingPoolCycleDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSocializingPoolOptInCoolingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderInsuranceFund\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakePoolManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakedEthPerNode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUserWithdrawManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidatorWithdrawalVaultImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawnKeyBatchSize\",\"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\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ethDepositContract\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"onlyManagerRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"onlyOperatorRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_contractName\",\"type\":\"bytes32\"}],\"name\":\"onlyStaderContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"updateAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_auctionContract\",\"type\":\"address\"}],\"name\":\"updateAuctionContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethBalanceProxy\",\"type\":\"address\"}],\"name\":\"updateETHBalancePORFeedProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethXSupplyProxy\",\"type\":\"address\"}],\"name\":\"updateETHXSupplyPORFeedProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethX\",\"type\":\"address\"}],\"name\":\"updateETHxToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDepositAmount\",\"type\":\"uint256\"}],\"name\":\"updateMaxDepositAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxWithdrawAmount\",\"type\":\"uint256\"}],\"name\":\"updateMaxWithdrawAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minBlockDelay\",\"type\":\"uint256\"}],\"name\":\"updateMinBlockDelayToFinalizeWithdrawRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minDepositAmount\",\"type\":\"uint256\"}],\"name\":\"updateMinDepositAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minWithdrawAmount\",\"type\":\"uint256\"}],\"name\":\"updateMinWithdrawAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeELRewardVaultImpl\",\"type\":\"address\"}],\"name\":\"updateNodeELRewardImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operatorRewardsCollector\",\"type\":\"address\"}],\"name\":\"updateOperatorRewardsCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_penaltyContract\",\"type\":\"address\"}],\"name\":\"updatePenaltyContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedNodeRegistry\",\"type\":\"address\"}],\"name\":\"updatePermissionedNodeRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedPool\",\"type\":\"address\"}],\"name\":\"updatePermissionedPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedSocializePool\",\"type\":\"address\"}],\"name\":\"updatePermissionedSocializingPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessNodeRegistry\",\"type\":\"address\"}],\"name\":\"updatePermissionlessNodeRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessPool\",\"type\":\"address\"}],\"name\":\"updatePermissionlessPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessSocializePool\",\"type\":\"address\"}],\"name\":\"updatePermissionlessSocializingPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolSelector\",\"type\":\"address\"}],\"name\":\"updatePoolSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolUtils\",\"type\":\"address\"}],\"name\":\"updatePoolUtils\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardsThreshold\",\"type\":\"uint256\"}],\"name\":\"updateRewardsThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sdCollateral\",\"type\":\"address\"}],\"name\":\"updateSDCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_socializingPoolCycleDuration\",\"type\":\"uint256\"}],\"name\":\"updateSocializingPoolCycleDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_SocializePoolOptInCoolingPeriod\",\"type\":\"uint256\"}],\"name\":\"updateSocializingPoolOptInCoolingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderInsuranceFund\",\"type\":\"address\"}],\"name\":\"updateStaderInsuranceFund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderOracle\",\"type\":\"address\"}],\"name\":\"updateStaderOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderToken\",\"type\":\"address\"}],\"name\":\"updateStaderToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderTreasury\",\"type\":\"address\"}],\"name\":\"updateStaderTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_stakePoolManager\",\"type\":\"address\"}],\"name\":\"updateStakePoolManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userWithdrawManager\",\"type\":\"address\"}],\"name\":\"updateUserWithdrawManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validatorWithdrawalVaultImpl\",\"type\":\"address\"}],\"name\":\"updateValidatorWithdrawalVaultImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vaultFactory\",\"type\":\"address\"}],\"name\":\"updateVaultFactory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateWithdrawnKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b506200001b62000021565b620000e0565b5f54610100900460ff16156200008d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161015620000de575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61347a80620000ee5f395ff3fe608060405234801561000f575f80fd5b506004361061077a575f3560e01c8063686a8b67116103d8578063aa9537951161020b578063dde63e8f1161012a578063f0141d84116100bf578063f6c278c11161008f578063f6c278c114611d19578063f83c778714611d40578063fa71fcbb14611d53578063ff387f3a14611da2578063ff4f354614611df1575f80fd5b8063f0141d8414611c67578063f122961f14611cb6578063f4914d3314611cdd578063f63718e714611d06575f80fd5b8063e4f59b6c116100fa578063e4f59b6c14611b7d578063e7bdba3214611b90578063e8fe187314611bb7578063ecf170a814611c0f575f80fd5b8063dde63e8f14611a93578063defd024d14611aba578063e069f71414611b12578063e2f273bd14611b6a575f80fd5b8063bbb99bb5116101a0578063ca78360c11610170578063ca78360c146119d9578063cc45dabe146119ec578063d2cee8ba14611a44578063d547741f14611a80575f80fd5b8063bbb99bb514611965578063bedcb34c14611978578063c20573c11461199f578063c60470d3146119b2575f80fd5b8063b549dbff116101db578063b549dbff146118d3578063b5cfee6c146118e6578063b68578441461193e578063b9894a1114611952575f80fd5b8063aa953795146117eb578063b11c699d14611843578063b31239221461186a578063b479a51714611897575f80fd5b8063841b83b3116102f7578063983d27371161028c578063a217fddf1161025c578063a217fddf14611752578063a469e24714611759578063a53bddd6146117b1578063aa2f56c7146117d8575f80fd5b8063983d27371461166857806398c359271461168f5780639ca76b73146116a2578063a0b4079f146116fa575f80fd5b80638910115c116102c75780638910115c146115925780638a4cfb58146115ea5780638f8b3867146115fd57806391d1485414611655575f80fd5b8063841b83b31461151d578063847802051461154457806385e2fcd31461155757806388993d8b1461157e575f80fd5b806372ce78b01161036d5780637a87fa0b1161033d5780637a87fa0b146114815780637ae316d0146114a85780637b4cd7ec146114f7578063831485931461150a575f80fd5b806372ce78b0146113b457806377e8a0c31461140c57806379175a7414611433578063792c8cc31461145a575f80fd5b80636e0fddfc116103a85780636e0fddfc146112fa5780636e9960c31461134957806372195b3e1461138e578063723b732c146113a1575f80fd5b8063686a8b67146112105780636870bb2b146112375780636ccb9d701461124a5780636d28ad1c146112a2575f80fd5b80632f2ff15d116105b0578063489ed651116104cf5780635b5961fc116104645780636176bbde116104345780636176bbde1461119b5780636240fb9c146111af57806363db7eae146111c257806367dcf134146111e9575f80fd5b80635b5961fc1461110a5780635b9cc8b11461111d5780635be6ce69146111305780635edc686e14611143575f80fd5b80635455e4721161049f5780635455e4721461103c5780635458a106146110635780635726a356146110bb578063572c686a146110f7575f80fd5b8063489ed65114610f965780634c34a98214610fee57806352112bd31461100257806353f5713b14611029575f80fd5b8063384002a211610545578063403efe7f11610515578063403efe7f14610f355780634191e0fe14610f4857806344ba0ea214610f6f578063485cc95514610f83575f80fd5b8063384002a214610ead5780633871d0f114610ed45780633b6bcca014610efb5780633c128dad14610f22575f80fd5b806336568abe1161058057806336568abe14610e0857806336854d6314610e1b578063368f9d1714610e4257806336c157f414610e55575f80fd5b80632f2ff15d14610d4f578063326a16a314610d6257806334d17d7414610d9e578063360374a414610db1575f80fd5b806318bcb2841161069c578063248a9ca3116106315780632a9cc2c4116106015780632a9cc2c414610c515780632ca03f6614610c785780632e0f262514610cd05780632ec5e01814610cf7575f80fd5b8063248a9ca314610bb05780632651644c14610bd2578063278671bb14610be55780632a0acc6a14610c3d575f80fd5b80631c55cccd1161066c5780631c55cccd14610b135780631ca197a514610b3a5780631de03db814610b895780631ea30fef14610b9c575f80fd5b806318bcb28414610a595780631af0fff314610ab15780631b2df85014610ad85780631bf6a41c14610aec575f80fd5b8063103f290711610712578063121669f1116106e2578063121669f1146109a857806314e1b8fd146109bb578063152a91da146109e457806318829fc314610a0a575f80fd5b8063103f2907146108f85780631049e32e1461091f57806310deba2b146109325780631202007514610981575f80fd5b8063088ee72d1161074d578063088ee72d1461083f5780630945d42c146108525780630a3fbd9a146108655780630bdf3166146108d1575f80fd5b806301ffc9a71461077e5780630430246e146107a6578063047cb439146107db57806308297645146107f0575b5f80fd5b61079161078c3660046130d5565b611e04565b60405190151581526020015b60405180910390f35b6107cd7f9b1ae66636378b5626322a52e22518dd40bb04881cf0440ed16a20c0f902b24281565b60405190815260200161079d565b6107ee6107e9366004613117565b611e3a565b005b7f9b1ae66636378b5626322a52e22518dd40bb04881cf0440ed16a20c0f902b2425f5260976020527f2b5f44404b80fc874d00ce3803444dc1d8415bef002ea5e3d4c6a1fc229b361b546107cd565b6107ee61084d366004613117565b611e72565b6107ee610860366004613130565b611ea6565b7fc5b1a6a0b843563e6a17ca90bc59d2315c523be427d0c9c2ba08d77ced4f46b15f52609a6020527f93bda0178f178a956e1154aad6f6d04aca130dc29bb626bd6774e853c8c9f354546001600160a01b03165b6040516001600160a01b03909116815260200161079d565b6107cd7f3e4ded42f360c2e6b1251d584085ae1d9aa9cbed18687fac6b6aef8eed1c5ad381565b6107cd7f8d4341681b282735dd0d55670ff8e0ad68a80cbfc2cee847065e9f771470f88f81565b6107ee61092d366004613117565b611edc565b7f59b5f464ec5829246a81f005456c8cb714ee224aea800742e2dae497263e46695f5260976020527ff1d631be95f382e871541957d68e9595b265874c488308836f37d0f22a9fbae9546107cd565b6107cd7f4c9466ca1bf288a7334a7494f09a0acc38ee31628eaf8c68b574b9f0ec22a9c181565b6107ee6109b6366004613117565b611f10565b5f805160206133458339815191525f5260986020525f805160206133e5833981519152546107cd565b6107cd7e665c1b06e0667c56a1ca1706b7573435d1b9162c6327b5d0ea1daeb491ad0d81565b7f46b41285bb7b8513ce3a9d95cdf6916699fb00b47326e8d3850be1b6186e03495f5260986020527f4d508419d31c3547aff85909df3c1fcaa249c360d3c9fa4e4f9e9c899cebbedc546107cd565b7f8d4341681b282735dd0d55670ff8e0ad68a80cbfc2cee847065e9f771470f88f5f52609a6020527f510a692d092451633b86b6d5ebd49dd58b5ea01b6d0783a379a8169a08baac9f546001600160a01b03166108b9565b6107cd7fe5240448c78dfcff5bda4e4eed69ba9635df15d79da0e8a4cf889217106fa45b81565b6107cd5f8051602061330583398151915281565b6107cd7f29384ec8473b541e7a7850226a4d1906a700f14cc394266ee08800ba62dc3af981565b6107cd7fbd34382cd421c5250595893a4ed6cdb2125e6be7d5e0a9dbc469de5d583adfcf81565b7f3c6dcff840f36f9818a73b67d9d00197362f63687bd52e3c277bd0ffb30dde335f5260986020527f9e4fbca7af476428837bb1c0659b29a978bd5be1038b9848cfd6837f97c0c036546107cd565b6107ee610b97366004613117565b611f44565b6107cd5f8051602061342583398151915281565b6107cd610bbe366004613130565b5f9081526065602052604090206001015490565b6107ee610be0366004613117565b611f78565b7f5be667ef1f4c6c279e2aa7e62595a1045043db6a43145cb438c6d36e7a3c3ed85f52609a6020527f3f1c1b82007b7a87a83473281505b32822fde2464206a16635328330125264a8546001600160a01b03166108b9565b6107cd5f805160206133c583398151915281565b6107cd7fb134afa3abad633a84ab2d33dd5171f2b371e38b0f7bca001383aaf08ed6d2d181565b7fb134afa3abad633a84ab2d33dd5171f2b371e38b0f7bca001383aaf08ed6d2d15f52609a6020527fb5c61d48a513a298b438559aede2612ccf11b8fe4c725b0f159efab727297353546001600160a01b03166108b9565b6107cd7f08593985ae1bebfb02f6c30105edffb176a6d87c9fad54c434bf9b58f67e81b681565b7f3d88d1233771c5c30791fb6805b7f91424dae1e5a68a57da846ca7ff83c640295f52609a6020527f018f2aef664aeeb1561d5a44d318b67f16f75b697bf95eeabc62c48d36323e72546001600160a01b03166108b9565b6107ee610d5d366004613147565b611fac565b5f805160206133258339815191525f5260986020527fd179a4a9329ee39fba707fd91c699ec0f088afc56731eb89ff424b873ac70844546107cd565b6107ee610dac366004613117565b611fd5565b7e665c1b06e0667c56a1ca1706b7573435d1b9162c6327b5d0ea1daeb491ad0d5f52609a6020527fe107fed811895732bef768006b62e8ce98d10a188d78cab697a91a201b5e2404546001600160a01b03166108b9565b6107ee610e16366004613147565b612009565b6107cd7ff935b8bf66b325637ad32ca875b588849cf4026791b79b4dc20623cd3dd36e2081565b6107ee610e50366004613117565b612088565b7f8e96355022bb9b9f4d9d4e01fe2b58f45e78549c982c401c96f75f33c5de457e5f52609a6020527fe74d6d5cda9d4a34ee9d4950f99c58c26803c1cf17dbd9d3e9f82fcea7feb01e546001600160a01b03166108b9565b6107cd7f95bf18d68834a11aaae7b73ff6037326f163a81a7b5ea80cba96856ce2284fbd81565b6107cd7f9f919a2294d86593fbcec81ea71aa683cec51c78771c642f8894ba8f3949705281565b6107cd7fc5b1a6a0b843563e6a17ca90bc59d2315c523be427d0c9c2ba08d77ced4f46b181565b6107ee610f30366004613117565b6120bc565b6107ee610f43366004613117565b6120f0565b6107cd7fa4083e7a78dd898def03c51ce199cb4286b8828be4f6f46e04aec6176196747181565b6107cd5f8051602061332583398151915281565b6107ee610f91366004613171565b612124565b7f690795c57e13eaf2526f76202b6799e9afdb069afca1e572f693953d013569d85f52609a6020527f38e84315fdfc8f1b16767d9fd043998a9ff60cfbcb629d8f48542b4e3ee87096546001600160a01b03166108b9565b6107cd5f8051602061338583398151915281565b6107cd7f602490b12960e59ddb584affd1da6cd5692f4455c1ba0cc4e865af81e111ebe281565b610791611037366004613117565b612444565b6107cd7f59b5f464ec5829246a81f005456c8cb714ee224aea800742e2dae497263e466981565b7fdb5d1c2a9350ca010dcdf3953da11a9e8f7c5e2918cdfa65500e84e7fd4fde7d5f52609a6020527f642611b82cedca4c0a5510e3234bea9632cc7eb6e135d12e2ef4f8c68dc23add546001600160a01b03166108b9565b5f805160206133858339815191525f5260986020527ffcacc1044a5a1b4eb9c058396306426a857813d37a4fb6ccf5a3adde30e0c914546107cd565b6107ee611105366004613130565b61246f565b6107ee611118366004613117565b6124b0565b6107ee61112b366004613130565b6124e4565b6107ee61113e366004613117565b612505565b7fa4083e7a78dd898def03c51ce199cb4286b8828be4f6f46e04aec617619674715f52609a6020527f863e03b3878962463f3668c14c10a4aeeabb7baa9c7a9b990796f179109d8692546001600160a01b03166108b9565b6107cd5f805160206133a583398151915281565b6107916111bd366004613117565b612539565b6107cd7f33271b56873d8abb908de4853f90a8a0ef8829548ec0bf6c298feed3917c50a281565b6107cd7ff822b1f0c3b886ce1cdf1c2a5317844145470db33b02c63cae4813f8c9b2dc1781565b6107cd7fc54a7590fe6738d7a81f393c1cf5ab3e577c91781037d93a5a9f5ce44f19eb5181565b6107ee611245366004613130565b612551565b7fd7e49a298cb2719de62e5df1024257eed316db6337361b3a30d56a75324046075f52609a6020527f294ce448c5d68d362948bb2b78c5571986464589b6911cc804ca52d7abbad2e3546001600160a01b03166108b9565b7fbd34382cd421c5250595893a4ed6cdb2125e6be7d5e0a9dbc469de5d583adfcf5f52609a6020527f3195564ffd56571794a8c7ffc14e3d393758b399f23318e874273db13addfdfe546001600160a01b03166108b9565b7fc54a7590fe6738d7a81f393c1cf5ab3e577c91781037d93a5a9f5ce44f19eb515f5260986020527f4d985796191711ecc0d75f056488220f1f755856cdfe3ebd45de3537c37b9b50546107cd565b5f805160206133c58339815191525f5260996020527f15be86566e203c1f41b9ae149d9fbb01b2c14f503704423d739a6e3d2db5a9ee546001600160a01b03166108b9565b6107ee61139c366004613117565b612592565b6107ee6113af366004613130565b6125c6565b7f8567f5af844d68168987760a7ce1762804b9de703165fc50ce4fa85246016c915f5260996020527f2c1f6cfa08e101d854b66353df53d6eb32e981bfc1a8351f458fd54b64cfc181546001600160a01b03166108b9565b6107cd7f84b42b3d5e6851893d4418c6ebc9a4727e78afdf84e73674c8b9c1c2b1904e2d81565b6107cd7f5be667ef1f4c6c279e2aa7e62595a1045043db6a43145cb438c6d36e7a3c3ed881565b6107cd7f876943525608da6d95be5925fe6c4fe80e8622c8a76e7414f80e8ba210e0711c81565b6107cd7f76d62e541b8d573110ca3eb9003e96426f530422a76712d1356f6c6ce50541ca81565b7f33271b56873d8abb908de4853f90a8a0ef8829548ec0bf6c298feed3917c50a25f5260976020527f799f922a2554690a852ce3427a174a9d0f64f94f53730bd0c6e1e1fdc54799ae546107cd565b6107ee611505366004613117565b6125e7565b6107ee611518366004613117565b612628565b6107cd7f8567f5af844d68168987760a7ce1762804b9de703165fc50ce4fa85246016c9181565b6107ee611552366004613130565b61265c565b6107cd7fd7e49a298cb2719de62e5df1024257eed316db6337361b3a30d56a753240460781565b6107cd5f8051602061336583398151915281565b7f29384ec8473b541e7a7850226a4d1906a700f14cc394266ee08800ba62dc3af95f52609a6020527f249a87d52af73222d4a479ebe40b904ebabf543d4706240658e6092ca9388c26546001600160a01b03166108b9565b6107ee6115f8366004613130565b61268a565b7f84b42b3d5e6851893d4418c6ebc9a4727e78afdf84e73674c8b9c1c2b1904e2d5f52609a6020527f492656d26f3accf1cea0a783c131178deb1c8733d9c679e5cecde8df27a9ad95546001600160a01b03166108b9565b610791611663366004613147565b6126cb565b6107cd7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c81565b6107ee61169d366004613117565b6126f5565b7f76d62e541b8d573110ca3eb9003e96426f530422a76712d1356f6c6ce50541ca5f52609a6020527f86012a00795dbb89a313ebfe1e3a458a84ce87cdb7c6a7971caf999119513627546001600160a01b03166108b9565b7f602490b12960e59ddb584affd1da6cd5692f4455c1ba0cc4e865af81e111ebe25f52609a6020527fd54531c6bba5beed207277daa8e0e65bdfb6aece3f974fb0394154eb989d1d42546001600160a01b03166108b9565b6107cd5f81565b7f4c9466ca1bf288a7334a7494f09a0acc38ee31628eaf8c68b574b9f0ec22a9c15f52609a6020527f2df8b6a0a0cdef82de21edc971a252888647231024af6c12c533010687315b1f546001600160a01b03166108b9565b6107cd7f3d88d1233771c5c30791fb6805b7f91424dae1e5a68a57da846ca7ff83c6402981565b6107ee6117e6366004613117565b612729565b7f5c00ec259bace293b50174e499c413ca897b4bcb54ed468b7e6bade51c6a9f965f52609a6020527fcda3409ebc466b6ac691341dcf169fdb28e448f6cf860239292340843aa52984546001600160a01b03166108b9565b6107cd7f8e96355022bb9b9f4d9d4e01fe2b58f45e78549c982c401c96f75f33c5de457e81565b610791611878366004613199565b5f908152609a60205260409020546001600160a01b0390811691161490565b5f805160206133658339815191525f5260986020527f72873426992e590ffa79a15175a7f2c8cf191cf402b7484af189cd125376fcdc546107cd565b6107ee6118e1366004613117565b61275d565b7fe5240448c78dfcff5bda4e4eed69ba9635df15d79da0e8a4cf889217106fa45b5f52609a6020527fcce26741946f801b25ce3c49451d2dd729b689d4d0d23ea57849f6c666bb5ee3546001600160a01b03166108b9565b6107cd5f8051602061334583398151915281565b6107ee611960366004613117565b612791565b6107ee611973366004613130565b6127c5565b6107cd7f3c6dcff840f36f9818a73b67d9d00197362f63687bd52e3c277bd0ffb30dde3381565b6107ee6119ad366004613117565b612806565b6107cd7f690795c57e13eaf2526f76202b6799e9afdb069afca1e572f693953d013569d881565b6107ee6119e7366004613117565b61283a565b7f09dfa94a9be22222b511ecf509f49718fc08fbe3ada37a44d2022489eca3b44c5f52609b6020527fe98ed444639fcf7afa9e33a4ea67ac4155aa97d88f546111c8d1357c98dbca00546001600160a01b03166108b9565b5f805160206133a58339815191525f5260986020527f0ccceacf55cd457ff25dca300775a2cb43db2c0b890d3ee063f4abba210c504f546107cd565b6107ee611a8e366004613147565b61286e565b6107cd7fdb5d1c2a9350ca010dcdf3953da11a9e8f7c5e2918cdfa65500e84e7fd4fde7d81565b7f9f919a2294d86593fbcec81ea71aa683cec51c78771c642f8894ba8f394970525f52609a6020527f99c8bd240e5bd2ee897b6a14ca3ca43a06f489dad5e38985ad188e67459dc6d7546001600160a01b03166108b9565b7f95bf18d68834a11aaae7b73ff6037326f163a81a7b5ea80cba96856ce2284fbd5f52609b6020527f20c8b2f4826823ac4cd62278270e8be9c7f63b9fe22e1f148f5369ec26bc69f4546001600160a01b03166108b9565b6107ee611b78366004613117565b612892565b6107ee611b8b366004613117565b61290a565b6107cd7f46b41285bb7b8513ce3a9d95cdf6916699fb00b47326e8d3850be1b6186e034981565b7f3e4ded42f360c2e6b1251d584085ae1d9aa9cbed18687fac6b6aef8eed1c5ad35f52609a6020527fe298efc0f606c3be77912795055e173991a2c395633d4b0a06597a13b46e0c0b546001600160a01b03166108b9565b7ff935b8bf66b325637ad32ca875b588849cf4026791b79b4dc20623cd3dd36e205f52609a6020527f18d210dd586fe31598c73b0131261a1f7a576051e2667bbf5a4f8a01cf2f1392546001600160a01b03166108b9565b7f08593985ae1bebfb02f6c30105edffb176a6d87c9fad54c434bf9b58f67e81b65f5260976020527fb645ae2edae7c0716931b638cd9631a05f9a39fec3f15294f7f3af49f2f51ca8546107cd565b6107cd7f5c00ec259bace293b50174e499c413ca897b4bcb54ed468b7e6bade51c6a9f9681565b5f805160206134258339815191525f5260986020525f80516020613405833981519152546107cd565b6107ee611d14366004613117565b61293e565b6107cd7f09dfa94a9be22222b511ecf509f49718fc08fbe3ada37a44d2022489eca3b44c81565b6107ee611d4e366004613117565b612971565b7f876943525608da6d95be5925fe6c4fe80e8622c8a76e7414f80e8ba210e0711c5f5260976020527fea561c0677f20715a0e74899b0381a0fa1265a58e9e02fb4a5a398d87555d1fe546107cd565b7ff822b1f0c3b886ce1cdf1c2a5317844145470db33b02c63cae4813f8c9b2dc175f5260976020527f9863915096f3522486953e53c4b97560d72679216b36fd98b4bdd4eca3a01eaa546107cd565b6107ee611dff366004613130565b6129a5565b5f6001600160e01b03198216637965db0b60e01b1480611e3457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f611e44816129c6565b611e6e7fdb5d1c2a9350ca010dcdf3953da11a9e8f7c5e2918cdfa65500e84e7fd4fde7d836129d3565b5050565b5f611e7c816129c6565b611e6e7ff935b8bf66b325637ad32ca875b588849cf4026791b79b4dc20623cd3dd36e20836129d3565b5f80516020613305833981519152611ebd816129c6565b611ed45f8051602061338583398151915283612a42565b611e6e612a89565b5f611ee6816129c6565b611e6e7fc5b1a6a0b843563e6a17ca90bc59d2315c523be427d0c9c2ba08d77ced4f46b1836129d3565b5f611f1a816129c6565b611e6e7f8e96355022bb9b9f4d9d4e01fe2b58f45e78549c982c401c96f75f33c5de457e836129d3565b5f611f4e816129c6565b611e6e7f5be667ef1f4c6c279e2aa7e62595a1045043db6a43145cb438c6d36e7a3c3ed8836129d3565b5f611f82816129c6565b611e6e7fd7e49a298cb2719de62e5df1024257eed316db6337361b3a30d56a7532404607836129d3565b5f82815260656020526040902060010154611fc6816129c6565b611fd08383612c3c565b505050565b5f611fdf816129c6565b611e6e7f5c00ec259bace293b50174e499c413ca897b4bcb54ed468b7e6bade51c6a9f96836129d3565b6001600160a01b038116331461207e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b611e6e8282612cc1565b5f612092816129c6565b611e6e7f3d88d1233771c5c30791fb6805b7f91424dae1e5a68a57da846ca7ff83c64029836129d3565b5f6120c6816129c6565b611e6e7fa4083e7a78dd898def03c51ce199cb4286b8828be4f6f46e04aec61761967471836129d3565b5f6120fa816129c6565b611e6e7f690795c57e13eaf2526f76202b6799e9afdb069afca1e572f693953d013569d8836129d3565b5f54610100900460ff161580801561214257505f54600160ff909116105b8061215b5750303b15801561215b57505f5460ff166001145b6121be5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401612075565b5f805460ff1916600117905580156121df575f805461ff0019166101001790555b6121e883612d27565b6121f182612d27565b6121f9612d4e565b61222c7ff822b1f0c3b886ce1cdf1c2a5317844145470db33b02c63cae4813f8c9b2dc176801bc16d674ec800000612db8565b61225e7f9b1ae66636378b5626322a52e22518dd40bb04881cf0440ed16a20c0f902b242670de0b6b3a7640000612db8565b6122917f876943525608da6d95be5925fe6c4fe80e8622c8a76e7414f80e8ba210e0711c6801ae361fc1451c0000612db8565b6122bd7f33271b56873d8abb908de4853f90a8a0ef8829548ec0bf6c298feed3917c50a2612710612db8565b6122ef7f08593985ae1bebfb02f6c30105edffb176a6d87c9fad54c434bf9b58f67e81b6670de0b6b3a7640000612db8565b61231a7f59b5f464ec5829246a81f005456c8cb714ee224aea800742e2dae497263e466960ff612db8565b6123375f80516020613425833981519152655af3107a4000612a42565b6123585f8051602061338583398151915269021e19e0c9bab2400000612a42565b6123755f80516020613345833981519152655af3107a4000612a42565b6123965f8051602061332583398151915269021e19e0c9bab2400000612a42565b6123ae5f805160206133658339815191526032612a42565b6123c75f805160206133a5833981519152610258612a42565b6123f17f84b42b3d5e6851893d4418c6ebc9a4727e78afdf84e73674c8b9c1c2b1904e2d836129d3565b6123fb5f84612c3c565b8015611fd0575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b5f611e347f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c836126cb565b5f80516020613305833981519152612486816129c6565b611e6e7f46b41285bb7b8513ce3a9d95cdf6916699fb00b47326e8d3850be1b6186e034983612a42565b5f6124ba816129c6565b611e6e7fbd34382cd421c5250595893a4ed6cdb2125e6be7d5e0a9dbc469de5d583adfcf836129d3565b5f6124ee816129c6565b611ed45f8051602061332583398151915283612a42565b5f61250f816129c6565b611e6e7f3e4ded42f360c2e6b1251d584085ae1d9aa9cbed18687fac6b6aef8eed1c5ad3836129d3565b5f611e345f80516020613305833981519152836126cb565b5f80516020613305833981519152612568816129c6565b611e6e7f3c6dcff840f36f9818a73b67d9d00197362f63687bd52e3c277bd0ffb30dde3383612a42565b5f61259c816129c6565b611e6e7fb134afa3abad633a84ab2d33dd5171f2b371e38b0f7bca001383aaf08ed6d2d1836129d3565b5f6125d0816129c6565b611e6e5f805160206133a583398151915283612a42565b5f805160206133058339815191526125fe816129c6565b611e6e7f8567f5af844d68168987760a7ce1762804b9de703165fc50ce4fa85246016c9183612dff565b5f612632816129c6565b611e6e7f95bf18d68834a11aaae7b73ff6037326f163a81a7b5ea80cba96856ce2284fbd83612e66565b5f80516020613305833981519152612673816129c6565b611ed45f8051602061342583398151915283612a42565b5f805160206133058339815191526126a1816129c6565b611e6e7fc54a7590fe6738d7a81f393c1cf5ab3e577c91781037d93a5a9f5ce44f19eb5183612a42565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6126ff816129c6565b611e6e7f8d4341681b282735dd0d55670ff8e0ad68a80cbfc2cee847065e9f771470f88f836129d3565b5f612733816129c6565b611e6e7fe5240448c78dfcff5bda4e4eed69ba9635df15d79da0e8a4cf889217106fa45b836129d3565b5f612767816129c6565b611e6e7f602490b12960e59ddb584affd1da6cd5692f4455c1ba0cc4e865af81e111ebe2836129d3565b5f61279b816129c6565b611e6e7f09dfa94a9be22222b511ecf509f49718fc08fbe3ada37a44d2022489eca3b44c83612e66565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c6127ef816129c6565b611e6e5f8051602061336583398151915283612a42565b5f612810816129c6565b611e6e7f76d62e541b8d573110ca3eb9003e96426f530422a76712d1356f6c6ce50541ca836129d3565b5f612844816129c6565b611e6e7f9f919a2294d86593fbcec81ea71aa683cec51c78771c642f8894ba8f39497052836129d3565b5f82815260656020526040902060010154612888816129c6565b611fd08383612cc1565b5f61289c816129c6565b5f805160206133c58339815191525f90815260996020527f15be86566e203c1f41b9ae149d9fbb01b2c14f503704423d739a6e3d2db5a9ee546001600160a01b0316906128e99084612c3c565b6129005f805160206133c583398151915284612dff565b611fd05f82612cc1565b5f612914816129c6565b611e6e7f4c9466ca1bf288a7334a7494f09a0acc38ee31628eaf8c68b574b9f0ec22a9c1836129d3565b5f612948816129c6565b611e6e7e665c1b06e0667c56a1ca1706b7573435d1b9162c6327b5d0ea1daeb491ad0d836129d3565b5f61297b816129c6565b611e6e7f29384ec8473b541e7a7850226a4d1906a700f14cc394266ee08800ba62dc3af9836129d3565b5f6129af816129c6565b611ed45f8051602061334583398151915283612a42565b6129d08133612ecd565b50565b6129dc81612d27565b5f828152609a602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251858152918201527f5de40a806536a2029221dac2c8887ac9f11952fcc1ed3d7cfb4476dd5259b74091015b60405180910390a15050565b5f8281526098602090815260409182902083905581518481529081018390527f9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c465816309101612a36565b5f805160206134258339815191525f5260986020525f805160206134058339815191525415801590612add57505f805160206133458339815191525f5260986020525f805160206133e58339815191525415155b8015612b2d575060986020527ffcacc1044a5a1b4eb9c058396306426a857813d37a4fb6ccf5a3adde30e0c914545f805160206134258339815191525f525f805160206134058339815191525411155b8015612b7d575060986020527fd179a4a9329ee39fba707fd91c699ec0f088afc56731eb89ff424b873ac70844545f805160206133458339815191525f525f805160206133e58339815191525411155b8015612bba575060986020525f80516020613405833981519152545f805160206133458339815191525f525f805160206133e58339815191525411155b8015612c1d575060986020527ffcacc1044a5a1b4eb9c058396306426a857813d37a4fb6ccf5a3adde30e0c914545f805160206133258339815191525f527fd179a4a9329ee39fba707fd91c699ec0f088afc56731eb89ff424b873ac708445410155b612c3a5760405163e773e0a960e01b815260040160405180910390fd5b565b612c4682826126cb565b611e6e575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612c7d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612ccb82826126cb565b15611e6e575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0381166129d05760405163d92e233d60e01b815260040160405180910390fd5b5f54610100900460ff16612c3a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401612075565b5f8281526097602090815260409182902083905581518481529081018390527f9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c465816309101612a36565b612e0881612d27565b5f8281526099602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251858152918201527fcbdd341876786c7241ad12a5ce5ea46739a4ce7b1587d0c216dfa655a98e50a69101612a36565b612e6f81612d27565b5f828152609b602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251858152918201527f19aab10c6a9f5d648eaa15e2d515f8dfda570ee221e7c8cb9dc07694e68005bc9101612a36565b612ed782826126cb565b611e6e57612ee481612f26565b612eef836020612f38565b604051602001612f009291906131e3565b60408051601f198184030181529082905262461bcd60e51b825261207591600401613257565b6060611e346001600160a01b03831660145b60605f612f4683600261329d565b612f519060026132b4565b67ffffffffffffffff811115612f6957612f696132c7565b6040519080825280601f01601f191660200182016040528015612f93576020820181803683370190505b509050600360fc1b815f81518110612fad57612fad6132db565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110612fdb57612fdb6132db565b60200101906001600160f81b03191690815f1a9053505f612ffd84600261329d565b6130089060016132b4565b90505b600181111561307f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061303c5761303c6132db565b1a60f81b828281518110613052576130526132db565b60200101906001600160f81b03191690815f1a90535060049490941c93613078816132ef565b905061300b565b5083156130ce5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401612075565b9392505050565b5f602082840312156130e5575f80fd5b81356001600160e01b0319811681146130ce575f80fd5b80356001600160a01b0381168114613112575f80fd5b919050565b5f60208284031215613127575f80fd5b6130ce826130fc565b5f60208284031215613140575f80fd5b5035919050565b5f8060408385031215613158575f80fd5b82359150613168602084016130fc565b90509250929050565b5f8060408385031215613182575f80fd5b61318b836130fc565b9150613168602084016130fc565b5f80604083850312156131aa575f80fd5b6131b3836130fc565b946020939093013593505050565b5f5b838110156131db5781810151838201526020016131c3565b50505f910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161321a8160178501602088016131c1565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161324b8160288401602088016131c1565b01602801949350505050565b602081525f82518060208401526132758160408501602087016131c1565b601f01601f19169190910160400192915050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417611e3457611e34613289565b80820180821115611e3457611e34613289565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f816132fd576132fd613289565b505f19019056feaf290d8680820aad922855f39b306097b20e28774d6c1ad35a20325630c3a02c1c2fe98ddbbbffbcf7735c7446ffcddb5ccd2a4ec2ace0f7d90f73e9ff13fcc7b18278bb399a7088b8b0b26f4896d5ebaba4497c611bbe9d43abe92d9a1fe83d6f8d0b773ad4970d3e7d47623dc9ce06a1b4fe833bf451d06a47e774f9acaa63712c13b90acf399d7bc7625370ce37c64b5eba41011b0961a88c2ef1648870cf2cf2377da51daa9c0d7e3f98c7532a67ee5e9398afad7b7db6e578b978a27094df8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428f1b9b075a455aa4e85ab4edea73c8fe6d4e2e5e4c6675d6135fefdca5e95a258489bc07817c82dd59579d43388f707a6a0a4a614b58e7df61bb06baec0de2c1fa5a84fed05ba4c93fcc5ba1f4ad010e3bef3e6394b367aa10b3ec01997375cca26469706673582212207e8023528ebc11124bddb9cb8602596106598c299e0b12b4b38f5e81bfc8806c64736f6c63430008140033", -} - -// StaderConfigABI is the input ABI used to generate the binding from. -// Deprecated: Use StaderConfigMetaData.ABI instead. -var StaderConfigABI = StaderConfigMetaData.ABI - -// StaderConfigBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use StaderConfigMetaData.Bin instead. -var StaderConfigBin = StaderConfigMetaData.Bin - -// DeployStaderConfig deploys a new Ethereum contract, binding an instance of StaderConfig to it. -func DeployStaderConfig(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *StaderConfig, error) { - parsed, err := StaderConfigMetaData.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(StaderConfigBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &StaderConfig{StaderConfigCaller: StaderConfigCaller{contract: contract}, StaderConfigTransactor: StaderConfigTransactor{contract: contract}, StaderConfigFilterer: StaderConfigFilterer{contract: contract}}, nil -} - -// StaderConfig is an auto generated Go binding around an Ethereum contract. -type StaderConfig struct { - StaderConfigCaller // Read-only binding to the contract - StaderConfigTransactor // Write-only binding to the contract - StaderConfigFilterer // Log filterer for contract events -} - -// StaderConfigCaller is an auto generated read-only Go binding around an Ethereum contract. -type StaderConfigCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StaderConfigTransactor is an auto generated write-only Go binding around an Ethereum contract. -type StaderConfigTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StaderConfigFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type StaderConfigFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// StaderConfigSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type StaderConfigSession struct { - Contract *StaderConfig // 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 -} - -// StaderConfigCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type StaderConfigCallerSession struct { - Contract *StaderConfigCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// StaderConfigTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type StaderConfigTransactorSession struct { - Contract *StaderConfigTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// StaderConfigRaw is an auto generated low-level Go binding around an Ethereum contract. -type StaderConfigRaw struct { - Contract *StaderConfig // Generic contract binding to access the raw methods on -} - -// StaderConfigCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type StaderConfigCallerRaw struct { - Contract *StaderConfigCaller // Generic read-only contract binding to access the raw methods on -} - -// StaderConfigTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type StaderConfigTransactorRaw struct { - Contract *StaderConfigTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewStaderConfig creates a new instance of StaderConfig, bound to a specific deployed contract. -func NewStaderConfig(address common.Address, backend bind.ContractBackend) (*StaderConfig, error) { - contract, err := bindStaderConfig(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &StaderConfig{StaderConfigCaller: StaderConfigCaller{contract: contract}, StaderConfigTransactor: StaderConfigTransactor{contract: contract}, StaderConfigFilterer: StaderConfigFilterer{contract: contract}}, nil -} - -// NewStaderConfigCaller creates a new read-only instance of StaderConfig, bound to a specific deployed contract. -func NewStaderConfigCaller(address common.Address, caller bind.ContractCaller) (*StaderConfigCaller, error) { - contract, err := bindStaderConfig(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &StaderConfigCaller{contract: contract}, nil -} - -// NewStaderConfigTransactor creates a new write-only instance of StaderConfig, bound to a specific deployed contract. -func NewStaderConfigTransactor(address common.Address, transactor bind.ContractTransactor) (*StaderConfigTransactor, error) { - contract, err := bindStaderConfig(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &StaderConfigTransactor{contract: contract}, nil -} - -// NewStaderConfigFilterer creates a new log filterer instance of StaderConfig, bound to a specific deployed contract. -func NewStaderConfigFilterer(address common.Address, filterer bind.ContractFilterer) (*StaderConfigFilterer, error) { - contract, err := bindStaderConfig(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &StaderConfigFilterer{contract: contract}, nil -} - -// bindStaderConfig binds a generic wrapper to an already deployed contract. -func bindStaderConfig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := StaderConfigMetaData.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 (_StaderConfig *StaderConfigRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _StaderConfig.Contract.StaderConfigCaller.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 (_StaderConfig *StaderConfigRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StaderConfig.Contract.StaderConfigTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_StaderConfig *StaderConfigRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _StaderConfig.Contract.StaderConfigTransactor.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 (_StaderConfig *StaderConfigCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _StaderConfig.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 (_StaderConfig *StaderConfigTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StaderConfig.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_StaderConfig *StaderConfigTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _StaderConfig.Contract.contract.Transact(opts, method, params...) -} - -// ADMIN is a free data retrieval call binding the contract method 0x2a0acc6a. -// -// Solidity: function ADMIN() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) ADMIN(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "ADMIN") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ADMIN is a free data retrieval call binding the contract method 0x2a0acc6a. -// -// Solidity: function ADMIN() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) ADMIN() ([32]byte, error) { - return _StaderConfig.Contract.ADMIN(&_StaderConfig.CallOpts) -} - -// ADMIN is a free data retrieval call binding the contract method 0x2a0acc6a. -// -// Solidity: function ADMIN() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) ADMIN() ([32]byte, error) { - return _StaderConfig.Contract.ADMIN(&_StaderConfig.CallOpts) -} - -// AUCTIONCONTRACT is a free data retrieval call binding the contract method 0xb11c699d. -// -// Solidity: function AUCTION_CONTRACT() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) AUCTIONCONTRACT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "AUCTION_CONTRACT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// AUCTIONCONTRACT is a free data retrieval call binding the contract method 0xb11c699d. -// -// Solidity: function AUCTION_CONTRACT() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) AUCTIONCONTRACT() ([32]byte, error) { - return _StaderConfig.Contract.AUCTIONCONTRACT(&_StaderConfig.CallOpts) -} - -// AUCTIONCONTRACT is a free data retrieval call binding the contract method 0xb11c699d. -// -// Solidity: function AUCTION_CONTRACT() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) AUCTIONCONTRACT() ([32]byte, error) { - return _StaderConfig.Contract.AUCTIONCONTRACT(&_StaderConfig.CallOpts) -} - -// DECIMALS is a free data retrieval call binding the contract method 0x2e0f2625. -// -// Solidity: function DECIMALS() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) DECIMALS(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "DECIMALS") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// DECIMALS is a free data retrieval call binding the contract method 0x2e0f2625. -// -// Solidity: function DECIMALS() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) DECIMALS() ([32]byte, error) { - return _StaderConfig.Contract.DECIMALS(&_StaderConfig.CallOpts) -} - -// DECIMALS is a free data retrieval call binding the contract method 0x2e0f2625. -// -// Solidity: function DECIMALS() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) DECIMALS() ([32]byte, error) { - return _StaderConfig.Contract.DECIMALS(&_StaderConfig.CallOpts) -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) DEFAULTADMINROLE() ([32]byte, error) { - return _StaderConfig.Contract.DEFAULTADMINROLE(&_StaderConfig.CallOpts) -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) DEFAULTADMINROLE() ([32]byte, error) { - return _StaderConfig.Contract.DEFAULTADMINROLE(&_StaderConfig.CallOpts) -} - -// ETHXSUPPLYPORFEED is a free data retrieval call binding the contract method 0x2a9cc2c4. -// -// Solidity: function ETHX_SUPPLY_POR_FEED() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) ETHXSUPPLYPORFEED(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "ETHX_SUPPLY_POR_FEED") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ETHXSUPPLYPORFEED is a free data retrieval call binding the contract method 0x2a9cc2c4. -// -// Solidity: function ETHX_SUPPLY_POR_FEED() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) ETHXSUPPLYPORFEED() ([32]byte, error) { - return _StaderConfig.Contract.ETHXSUPPLYPORFEED(&_StaderConfig.CallOpts) -} - -// ETHXSUPPLYPORFEED is a free data retrieval call binding the contract method 0x2a9cc2c4. -// -// Solidity: function ETHX_SUPPLY_POR_FEED() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) ETHXSUPPLYPORFEED() ([32]byte, error) { - return _StaderConfig.Contract.ETHXSUPPLYPORFEED(&_StaderConfig.CallOpts) -} - -// ETHBALANCEPORFEED is a free data retrieval call binding the contract method 0xc60470d3. -// -// Solidity: function ETH_BALANCE_POR_FEED() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) ETHBALANCEPORFEED(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "ETH_BALANCE_POR_FEED") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ETHBALANCEPORFEED is a free data retrieval call binding the contract method 0xc60470d3. -// -// Solidity: function ETH_BALANCE_POR_FEED() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) ETHBALANCEPORFEED() ([32]byte, error) { - return _StaderConfig.Contract.ETHBALANCEPORFEED(&_StaderConfig.CallOpts) -} - -// ETHBALANCEPORFEED is a free data retrieval call binding the contract method 0xc60470d3. -// -// Solidity: function ETH_BALANCE_POR_FEED() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) ETHBALANCEPORFEED() ([32]byte, error) { - return _StaderConfig.Contract.ETHBALANCEPORFEED(&_StaderConfig.CallOpts) -} - -// ETHDEPOSITCONTRACT is a free data retrieval call binding the contract method 0x77e8a0c3. -// -// Solidity: function ETH_DEPOSIT_CONTRACT() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) ETHDEPOSITCONTRACT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "ETH_DEPOSIT_CONTRACT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ETHDEPOSITCONTRACT is a free data retrieval call binding the contract method 0x77e8a0c3. -// -// Solidity: function ETH_DEPOSIT_CONTRACT() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) ETHDEPOSITCONTRACT() ([32]byte, error) { - return _StaderConfig.Contract.ETHDEPOSITCONTRACT(&_StaderConfig.CallOpts) -} - -// ETHDEPOSITCONTRACT is a free data retrieval call binding the contract method 0x77e8a0c3. -// -// Solidity: function ETH_DEPOSIT_CONTRACT() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) ETHDEPOSITCONTRACT() ([32]byte, error) { - return _StaderConfig.Contract.ETHDEPOSITCONTRACT(&_StaderConfig.CallOpts) -} - -// ETHPERNODE is a free data retrieval call binding the contract method 0x67dcf134. -// -// Solidity: function ETH_PER_NODE() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) ETHPERNODE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "ETH_PER_NODE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ETHPERNODE is a free data retrieval call binding the contract method 0x67dcf134. -// -// Solidity: function ETH_PER_NODE() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) ETHPERNODE() ([32]byte, error) { - return _StaderConfig.Contract.ETHPERNODE(&_StaderConfig.CallOpts) -} - -// ETHPERNODE is a free data retrieval call binding the contract method 0x67dcf134. -// -// Solidity: function ETH_PER_NODE() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) ETHPERNODE() ([32]byte, error) { - return _StaderConfig.Contract.ETHPERNODE(&_StaderConfig.CallOpts) -} - -// ETHx is a free data retrieval call binding the contract method 0xf6c278c1. -// -// Solidity: function ETHx() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) ETHx(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "ETHx") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// ETHx is a free data retrieval call binding the contract method 0xf6c278c1. -// -// Solidity: function ETHx() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) ETHx() ([32]byte, error) { - return _StaderConfig.Contract.ETHx(&_StaderConfig.CallOpts) -} - -// ETHx is a free data retrieval call binding the contract method 0xf6c278c1. -// -// Solidity: function ETHx() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) ETHx() ([32]byte, error) { - return _StaderConfig.Contract.ETHx(&_StaderConfig.CallOpts) -} - -// FULLDEPOSITSIZE is a free data retrieval call binding the contract method 0x792c8cc3. -// -// Solidity: function FULL_DEPOSIT_SIZE() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) FULLDEPOSITSIZE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "FULL_DEPOSIT_SIZE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// FULLDEPOSITSIZE is a free data retrieval call binding the contract method 0x792c8cc3. -// -// Solidity: function FULL_DEPOSIT_SIZE() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) FULLDEPOSITSIZE() ([32]byte, error) { - return _StaderConfig.Contract.FULLDEPOSITSIZE(&_StaderConfig.CallOpts) -} - -// FULLDEPOSITSIZE is a free data retrieval call binding the contract method 0x792c8cc3. -// -// Solidity: function FULL_DEPOSIT_SIZE() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) FULLDEPOSITSIZE() ([32]byte, error) { - return _StaderConfig.Contract.FULLDEPOSITSIZE(&_StaderConfig.CallOpts) -} - -// MANAGER is a free data retrieval call binding the contract method 0x1b2df850. -// -// Solidity: function MANAGER() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) MANAGER(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "MANAGER") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MANAGER is a free data retrieval call binding the contract method 0x1b2df850. -// -// Solidity: function MANAGER() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) MANAGER() ([32]byte, error) { - return _StaderConfig.Contract.MANAGER(&_StaderConfig.CallOpts) -} - -// MANAGER is a free data retrieval call binding the contract method 0x1b2df850. -// -// Solidity: function MANAGER() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) MANAGER() ([32]byte, error) { - return _StaderConfig.Contract.MANAGER(&_StaderConfig.CallOpts) -} - -// MAXDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x4c34a982. -// -// Solidity: function MAX_DEPOSIT_AMOUNT() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) MAXDEPOSITAMOUNT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "MAX_DEPOSIT_AMOUNT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MAXDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x4c34a982. -// -// Solidity: function MAX_DEPOSIT_AMOUNT() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) MAXDEPOSITAMOUNT() ([32]byte, error) { - return _StaderConfig.Contract.MAXDEPOSITAMOUNT(&_StaderConfig.CallOpts) -} - -// MAXDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x4c34a982. -// -// Solidity: function MAX_DEPOSIT_AMOUNT() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) MAXDEPOSITAMOUNT() ([32]byte, error) { - return _StaderConfig.Contract.MAXDEPOSITAMOUNT(&_StaderConfig.CallOpts) -} - -// MAXWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0x44ba0ea2. -// -// Solidity: function MAX_WITHDRAW_AMOUNT() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) MAXWITHDRAWAMOUNT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "MAX_WITHDRAW_AMOUNT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MAXWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0x44ba0ea2. -// -// Solidity: function MAX_WITHDRAW_AMOUNT() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) MAXWITHDRAWAMOUNT() ([32]byte, error) { - return _StaderConfig.Contract.MAXWITHDRAWAMOUNT(&_StaderConfig.CallOpts) -} - -// MAXWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0x44ba0ea2. -// -// Solidity: function MAX_WITHDRAW_AMOUNT() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) MAXWITHDRAWAMOUNT() ([32]byte, error) { - return _StaderConfig.Contract.MAXWITHDRAWAMOUNT(&_StaderConfig.CallOpts) -} - -// MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST is a free data retrieval call binding the contract method 0x6176bbde. -// -// Solidity: function MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST is a free data retrieval call binding the contract method 0x6176bbde. -// -// Solidity: function MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST() ([32]byte, error) { - return _StaderConfig.Contract.MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST(&_StaderConfig.CallOpts) -} - -// MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST is a free data retrieval call binding the contract method 0x6176bbde. -// -// Solidity: function MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST() ([32]byte, error) { - return _StaderConfig.Contract.MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST(&_StaderConfig.CallOpts) -} - -// MINDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x1ea30fef. -// -// Solidity: function MIN_DEPOSIT_AMOUNT() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) MINDEPOSITAMOUNT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "MIN_DEPOSIT_AMOUNT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MINDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x1ea30fef. -// -// Solidity: function MIN_DEPOSIT_AMOUNT() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) MINDEPOSITAMOUNT() ([32]byte, error) { - return _StaderConfig.Contract.MINDEPOSITAMOUNT(&_StaderConfig.CallOpts) -} - -// MINDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x1ea30fef. -// -// Solidity: function MIN_DEPOSIT_AMOUNT() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) MINDEPOSITAMOUNT() ([32]byte, error) { - return _StaderConfig.Contract.MINDEPOSITAMOUNT(&_StaderConfig.CallOpts) -} - -// MINWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0xb6857844. -// -// Solidity: function MIN_WITHDRAW_AMOUNT() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) MINWITHDRAWAMOUNT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "MIN_WITHDRAW_AMOUNT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MINWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0xb6857844. -// -// Solidity: function MIN_WITHDRAW_AMOUNT() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) MINWITHDRAWAMOUNT() ([32]byte, error) { - return _StaderConfig.Contract.MINWITHDRAWAMOUNT(&_StaderConfig.CallOpts) -} - -// MINWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0xb6857844. -// -// Solidity: function MIN_WITHDRAW_AMOUNT() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) MINWITHDRAWAMOUNT() ([32]byte, error) { - return _StaderConfig.Contract.MINWITHDRAWAMOUNT(&_StaderConfig.CallOpts) -} - -// NODEELREWARDVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x0bdf3166. -// -// Solidity: function NODE_EL_REWARD_VAULT_IMPLEMENTATION() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) NODEELREWARDVAULTIMPLEMENTATION(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "NODE_EL_REWARD_VAULT_IMPLEMENTATION") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// NODEELREWARDVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x0bdf3166. -// -// Solidity: function NODE_EL_REWARD_VAULT_IMPLEMENTATION() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) NODEELREWARDVAULTIMPLEMENTATION() ([32]byte, error) { - return _StaderConfig.Contract.NODEELREWARDVAULTIMPLEMENTATION(&_StaderConfig.CallOpts) -} - -// NODEELREWARDVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x0bdf3166. -// -// Solidity: function NODE_EL_REWARD_VAULT_IMPLEMENTATION() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) NODEELREWARDVAULTIMPLEMENTATION() ([32]byte, error) { - return _StaderConfig.Contract.NODEELREWARDVAULTIMPLEMENTATION(&_StaderConfig.CallOpts) -} - -// OPERATOR is a free data retrieval call binding the contract method 0x983d2737. -// -// Solidity: function OPERATOR() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) OPERATOR(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "OPERATOR") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// OPERATOR is a free data retrieval call binding the contract method 0x983d2737. -// -// Solidity: function OPERATOR() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) OPERATOR() ([32]byte, error) { - return _StaderConfig.Contract.OPERATOR(&_StaderConfig.CallOpts) -} - -// OPERATOR is a free data retrieval call binding the contract method 0x983d2737. -// -// Solidity: function OPERATOR() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) OPERATOR() ([32]byte, error) { - return _StaderConfig.Contract.OPERATOR(&_StaderConfig.CallOpts) -} - -// OPERATORMAXNAMELENGTH is a free data retrieval call binding the contract method 0x5455e472. -// -// Solidity: function OPERATOR_MAX_NAME_LENGTH() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) OPERATORMAXNAMELENGTH(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "OPERATOR_MAX_NAME_LENGTH") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// OPERATORMAXNAMELENGTH is a free data retrieval call binding the contract method 0x5455e472. -// -// Solidity: function OPERATOR_MAX_NAME_LENGTH() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) OPERATORMAXNAMELENGTH() ([32]byte, error) { - return _StaderConfig.Contract.OPERATORMAXNAMELENGTH(&_StaderConfig.CallOpts) -} - -// OPERATORMAXNAMELENGTH is a free data retrieval call binding the contract method 0x5455e472. -// -// Solidity: function OPERATOR_MAX_NAME_LENGTH() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) OPERATORMAXNAMELENGTH() ([32]byte, error) { - return _StaderConfig.Contract.OPERATORMAXNAMELENGTH(&_StaderConfig.CallOpts) -} - -// OPERATORREWARDCOLLECTOR is a free data retrieval call binding the contract method 0x79175a74. -// -// Solidity: function OPERATOR_REWARD_COLLECTOR() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) OPERATORREWARDCOLLECTOR(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "OPERATOR_REWARD_COLLECTOR") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// OPERATORREWARDCOLLECTOR is a free data retrieval call binding the contract method 0x79175a74. -// -// Solidity: function OPERATOR_REWARD_COLLECTOR() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) OPERATORREWARDCOLLECTOR() ([32]byte, error) { - return _StaderConfig.Contract.OPERATORREWARDCOLLECTOR(&_StaderConfig.CallOpts) -} - -// OPERATORREWARDCOLLECTOR is a free data retrieval call binding the contract method 0x79175a74. -// -// Solidity: function OPERATOR_REWARD_COLLECTOR() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) OPERATORREWARDCOLLECTOR() ([32]byte, error) { - return _StaderConfig.Contract.OPERATORREWARDCOLLECTOR(&_StaderConfig.CallOpts) -} - -// PENALTYCONTRACT is a free data retrieval call binding the contract method 0x1bf6a41c. -// -// Solidity: function PENALTY_CONTRACT() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) PENALTYCONTRACT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "PENALTY_CONTRACT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// PENALTYCONTRACT is a free data retrieval call binding the contract method 0x1bf6a41c. -// -// Solidity: function PENALTY_CONTRACT() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) PENALTYCONTRACT() ([32]byte, error) { - return _StaderConfig.Contract.PENALTYCONTRACT(&_StaderConfig.CallOpts) -} - -// PENALTYCONTRACT is a free data retrieval call binding the contract method 0x1bf6a41c. -// -// Solidity: function PENALTY_CONTRACT() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) PENALTYCONTRACT() ([32]byte, error) { - return _StaderConfig.Contract.PENALTYCONTRACT(&_StaderConfig.CallOpts) -} - -// PERMISSIONEDNODEREGISTRY is a free data retrieval call binding the contract method 0x4191e0fe. -// -// Solidity: function PERMISSIONED_NODE_REGISTRY() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) PERMISSIONEDNODEREGISTRY(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONED_NODE_REGISTRY") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// PERMISSIONEDNODEREGISTRY is a free data retrieval call binding the contract method 0x4191e0fe. -// -// Solidity: function PERMISSIONED_NODE_REGISTRY() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) PERMISSIONEDNODEREGISTRY() ([32]byte, error) { - return _StaderConfig.Contract.PERMISSIONEDNODEREGISTRY(&_StaderConfig.CallOpts) -} - -// PERMISSIONEDNODEREGISTRY is a free data retrieval call binding the contract method 0x4191e0fe. -// -// Solidity: function PERMISSIONED_NODE_REGISTRY() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) PERMISSIONEDNODEREGISTRY() ([32]byte, error) { - return _StaderConfig.Contract.PERMISSIONEDNODEREGISTRY(&_StaderConfig.CallOpts) -} - -// PERMISSIONEDPOOL is a free data retrieval call binding the contract method 0x52112bd3. -// -// Solidity: function PERMISSIONED_POOL() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) PERMISSIONEDPOOL(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONED_POOL") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// PERMISSIONEDPOOL is a free data retrieval call binding the contract method 0x52112bd3. -// -// Solidity: function PERMISSIONED_POOL() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) PERMISSIONEDPOOL() ([32]byte, error) { - return _StaderConfig.Contract.PERMISSIONEDPOOL(&_StaderConfig.CallOpts) -} - -// PERMISSIONEDPOOL is a free data retrieval call binding the contract method 0x52112bd3. -// -// Solidity: function PERMISSIONED_POOL() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) PERMISSIONEDPOOL() ([32]byte, error) { - return _StaderConfig.Contract.PERMISSIONEDPOOL(&_StaderConfig.CallOpts) -} - -// PERMISSIONEDSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x12020075. -// -// Solidity: function PERMISSIONED_SOCIALIZING_POOL() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) PERMISSIONEDSOCIALIZINGPOOL(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONED_SOCIALIZING_POOL") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// PERMISSIONEDSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x12020075. -// -// Solidity: function PERMISSIONED_SOCIALIZING_POOL() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) PERMISSIONEDSOCIALIZINGPOOL() ([32]byte, error) { - return _StaderConfig.Contract.PERMISSIONEDSOCIALIZINGPOOL(&_StaderConfig.CallOpts) -} - -// PERMISSIONEDSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x12020075. -// -// Solidity: function PERMISSIONED_SOCIALIZING_POOL() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) PERMISSIONEDSOCIALIZINGPOOL() ([32]byte, error) { - return _StaderConfig.Contract.PERMISSIONEDSOCIALIZINGPOOL(&_StaderConfig.CallOpts) -} - -// PERMISSIONLESSNODEREGISTRY is a free data retrieval call binding the contract method 0x152a91da. -// -// Solidity: function PERMISSIONLESS_NODE_REGISTRY() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) PERMISSIONLESSNODEREGISTRY(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONLESS_NODE_REGISTRY") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// PERMISSIONLESSNODEREGISTRY is a free data retrieval call binding the contract method 0x152a91da. -// -// Solidity: function PERMISSIONLESS_NODE_REGISTRY() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) PERMISSIONLESSNODEREGISTRY() ([32]byte, error) { - return _StaderConfig.Contract.PERMISSIONLESSNODEREGISTRY(&_StaderConfig.CallOpts) -} - -// PERMISSIONLESSNODEREGISTRY is a free data retrieval call binding the contract method 0x152a91da. -// -// Solidity: function PERMISSIONLESS_NODE_REGISTRY() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) PERMISSIONLESSNODEREGISTRY() ([32]byte, error) { - return _StaderConfig.Contract.PERMISSIONLESSNODEREGISTRY(&_StaderConfig.CallOpts) -} - -// PERMISSIONLESSPOOL is a free data retrieval call binding the contract method 0x7a87fa0b. -// -// Solidity: function PERMISSIONLESS_POOL() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) PERMISSIONLESSPOOL(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONLESS_POOL") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// PERMISSIONLESSPOOL is a free data retrieval call binding the contract method 0x7a87fa0b. -// -// Solidity: function PERMISSIONLESS_POOL() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) PERMISSIONLESSPOOL() ([32]byte, error) { - return _StaderConfig.Contract.PERMISSIONLESSPOOL(&_StaderConfig.CallOpts) -} - -// PERMISSIONLESSPOOL is a free data retrieval call binding the contract method 0x7a87fa0b. -// -// Solidity: function PERMISSIONLESS_POOL() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) PERMISSIONLESSPOOL() ([32]byte, error) { - return _StaderConfig.Contract.PERMISSIONLESSPOOL(&_StaderConfig.CallOpts) -} - -// PERMISSIONLESSSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x3b6bcca0. -// -// Solidity: function PERMISSIONLESS_SOCIALIZING_POOL() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) PERMISSIONLESSSOCIALIZINGPOOL(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONLESS_SOCIALIZING_POOL") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// PERMISSIONLESSSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x3b6bcca0. -// -// Solidity: function PERMISSIONLESS_SOCIALIZING_POOL() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) PERMISSIONLESSSOCIALIZINGPOOL() ([32]byte, error) { - return _StaderConfig.Contract.PERMISSIONLESSSOCIALIZINGPOOL(&_StaderConfig.CallOpts) -} - -// PERMISSIONLESSSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x3b6bcca0. -// -// Solidity: function PERMISSIONLESS_SOCIALIZING_POOL() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) PERMISSIONLESSSOCIALIZINGPOOL() ([32]byte, error) { - return _StaderConfig.Contract.PERMISSIONLESSSOCIALIZINGPOOL(&_StaderConfig.CallOpts) -} - -// POOLSELECTOR is a free data retrieval call binding the contract method 0xdde63e8f. -// -// Solidity: function POOL_SELECTOR() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) POOLSELECTOR(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "POOL_SELECTOR") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// POOLSELECTOR is a free data retrieval call binding the contract method 0xdde63e8f. -// -// Solidity: function POOL_SELECTOR() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) POOLSELECTOR() ([32]byte, error) { - return _StaderConfig.Contract.POOLSELECTOR(&_StaderConfig.CallOpts) -} - -// POOLSELECTOR is a free data retrieval call binding the contract method 0xdde63e8f. -// -// Solidity: function POOL_SELECTOR() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) POOLSELECTOR() ([32]byte, error) { - return _StaderConfig.Contract.POOLSELECTOR(&_StaderConfig.CallOpts) -} - -// POOLUTILS is a free data retrieval call binding the contract method 0x85e2fcd3. -// -// Solidity: function POOL_UTILS() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) POOLUTILS(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "POOL_UTILS") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// POOLUTILS is a free data retrieval call binding the contract method 0x85e2fcd3. -// -// Solidity: function POOL_UTILS() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) POOLUTILS() ([32]byte, error) { - return _StaderConfig.Contract.POOLUTILS(&_StaderConfig.CallOpts) -} - -// POOLUTILS is a free data retrieval call binding the contract method 0x85e2fcd3. -// -// Solidity: function POOL_UTILS() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) POOLUTILS() ([32]byte, error) { - return _StaderConfig.Contract.POOLUTILS(&_StaderConfig.CallOpts) -} - -// PREDEPOSITSIZE is a free data retrieval call binding the contract method 0x0430246e. -// -// Solidity: function PRE_DEPOSIT_SIZE() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) PREDEPOSITSIZE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "PRE_DEPOSIT_SIZE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// PREDEPOSITSIZE is a free data retrieval call binding the contract method 0x0430246e. -// -// Solidity: function PRE_DEPOSIT_SIZE() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) PREDEPOSITSIZE() ([32]byte, error) { - return _StaderConfig.Contract.PREDEPOSITSIZE(&_StaderConfig.CallOpts) -} - -// PREDEPOSITSIZE is a free data retrieval call binding the contract method 0x0430246e. -// -// Solidity: function PRE_DEPOSIT_SIZE() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) PREDEPOSITSIZE() ([32]byte, error) { - return _StaderConfig.Contract.PREDEPOSITSIZE(&_StaderConfig.CallOpts) -} - -// REWARDTHRESHOLD is a free data retrieval call binding the contract method 0xe7bdba32. -// -// Solidity: function REWARD_THRESHOLD() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) REWARDTHRESHOLD(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "REWARD_THRESHOLD") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// REWARDTHRESHOLD is a free data retrieval call binding the contract method 0xe7bdba32. -// -// Solidity: function REWARD_THRESHOLD() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) REWARDTHRESHOLD() ([32]byte, error) { - return _StaderConfig.Contract.REWARDTHRESHOLD(&_StaderConfig.CallOpts) -} - -// REWARDTHRESHOLD is a free data retrieval call binding the contract method 0xe7bdba32. -// -// Solidity: function REWARD_THRESHOLD() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) REWARDTHRESHOLD() ([32]byte, error) { - return _StaderConfig.Contract.REWARDTHRESHOLD(&_StaderConfig.CallOpts) -} - -// SD is a free data retrieval call binding the contract method 0x384002a2. -// -// Solidity: function SD() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) SD(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "SD") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// SD is a free data retrieval call binding the contract method 0x384002a2. -// -// Solidity: function SD() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) SD() ([32]byte, error) { - return _StaderConfig.Contract.SD(&_StaderConfig.CallOpts) -} - -// SD is a free data retrieval call binding the contract method 0x384002a2. -// -// Solidity: function SD() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) SD() ([32]byte, error) { - return _StaderConfig.Contract.SD(&_StaderConfig.CallOpts) -} - -// SDCOLLATERAL is a free data retrieval call binding the contract method 0xf122961f. -// -// Solidity: function SD_COLLATERAL() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) SDCOLLATERAL(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "SD_COLLATERAL") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// SDCOLLATERAL is a free data retrieval call binding the contract method 0xf122961f. -// -// Solidity: function SD_COLLATERAL() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) SDCOLLATERAL() ([32]byte, error) { - return _StaderConfig.Contract.SDCOLLATERAL(&_StaderConfig.CallOpts) -} - -// SDCOLLATERAL is a free data retrieval call binding the contract method 0xf122961f. -// -// Solidity: function SD_COLLATERAL() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) SDCOLLATERAL() ([32]byte, error) { - return _StaderConfig.Contract.SDCOLLATERAL(&_StaderConfig.CallOpts) -} - -// SOCIALIZINGPOOLCYCLEDURATION is a free data retrieval call binding the contract method 0xbedcb34c. -// -// Solidity: function SOCIALIZING_POOL_CYCLE_DURATION() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) SOCIALIZINGPOOLCYCLEDURATION(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "SOCIALIZING_POOL_CYCLE_DURATION") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// SOCIALIZINGPOOLCYCLEDURATION is a free data retrieval call binding the contract method 0xbedcb34c. -// -// Solidity: function SOCIALIZING_POOL_CYCLE_DURATION() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) SOCIALIZINGPOOLCYCLEDURATION() ([32]byte, error) { - return _StaderConfig.Contract.SOCIALIZINGPOOLCYCLEDURATION(&_StaderConfig.CallOpts) -} - -// SOCIALIZINGPOOLCYCLEDURATION is a free data retrieval call binding the contract method 0xbedcb34c. -// -// Solidity: function SOCIALIZING_POOL_CYCLE_DURATION() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) SOCIALIZINGPOOLCYCLEDURATION() ([32]byte, error) { - return _StaderConfig.Contract.SOCIALIZINGPOOLCYCLEDURATION(&_StaderConfig.CallOpts) -} - -// SOCIALIZINGPOOLOPTINCOOLINGPERIOD is a free data retrieval call binding the contract method 0x686a8b67. -// -// Solidity: function SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) SOCIALIZINGPOOLOPTINCOOLINGPERIOD(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// SOCIALIZINGPOOLOPTINCOOLINGPERIOD is a free data retrieval call binding the contract method 0x686a8b67. -// -// Solidity: function SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) SOCIALIZINGPOOLOPTINCOOLINGPERIOD() ([32]byte, error) { - return _StaderConfig.Contract.SOCIALIZINGPOOLOPTINCOOLINGPERIOD(&_StaderConfig.CallOpts) -} - -// SOCIALIZINGPOOLOPTINCOOLINGPERIOD is a free data retrieval call binding the contract method 0x686a8b67. -// -// Solidity: function SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) SOCIALIZINGPOOLOPTINCOOLINGPERIOD() ([32]byte, error) { - return _StaderConfig.Contract.SOCIALIZINGPOOLOPTINCOOLINGPERIOD(&_StaderConfig.CallOpts) -} - -// STADERINSURANCEFUND is a free data retrieval call binding the contract method 0x1af0fff3. -// -// Solidity: function STADER_INSURANCE_FUND() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) STADERINSURANCEFUND(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "STADER_INSURANCE_FUND") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STADERINSURANCEFUND is a free data retrieval call binding the contract method 0x1af0fff3. -// -// Solidity: function STADER_INSURANCE_FUND() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) STADERINSURANCEFUND() ([32]byte, error) { - return _StaderConfig.Contract.STADERINSURANCEFUND(&_StaderConfig.CallOpts) -} - -// STADERINSURANCEFUND is a free data retrieval call binding the contract method 0x1af0fff3. -// -// Solidity: function STADER_INSURANCE_FUND() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) STADERINSURANCEFUND() ([32]byte, error) { - return _StaderConfig.Contract.STADERINSURANCEFUND(&_StaderConfig.CallOpts) -} - -// STADERORACLE is a free data retrieval call binding the contract method 0x3871d0f1. -// -// Solidity: function STADER_ORACLE() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) STADERORACLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "STADER_ORACLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STADERORACLE is a free data retrieval call binding the contract method 0x3871d0f1. -// -// Solidity: function STADER_ORACLE() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) STADERORACLE() ([32]byte, error) { - return _StaderConfig.Contract.STADERORACLE(&_StaderConfig.CallOpts) -} - -// STADERORACLE is a free data retrieval call binding the contract method 0x3871d0f1. -// -// Solidity: function STADER_ORACLE() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) STADERORACLE() ([32]byte, error) { - return _StaderConfig.Contract.STADERORACLE(&_StaderConfig.CallOpts) -} - -// STADERTREASURY is a free data retrieval call binding the contract method 0x841b83b3. -// -// Solidity: function STADER_TREASURY() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) STADERTREASURY(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "STADER_TREASURY") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STADERTREASURY is a free data retrieval call binding the contract method 0x841b83b3. -// -// Solidity: function STADER_TREASURY() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) STADERTREASURY() ([32]byte, error) { - return _StaderConfig.Contract.STADERTREASURY(&_StaderConfig.CallOpts) -} - -// STADERTREASURY is a free data retrieval call binding the contract method 0x841b83b3. -// -// Solidity: function STADER_TREASURY() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) STADERTREASURY() ([32]byte, error) { - return _StaderConfig.Contract.STADERTREASURY(&_StaderConfig.CallOpts) -} - -// STAKEPOOLMANAGER is a free data retrieval call binding the contract method 0xa53bddd6. -// -// Solidity: function STAKE_POOL_MANAGER() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) STAKEPOOLMANAGER(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "STAKE_POOL_MANAGER") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STAKEPOOLMANAGER is a free data retrieval call binding the contract method 0xa53bddd6. -// -// Solidity: function STAKE_POOL_MANAGER() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) STAKEPOOLMANAGER() ([32]byte, error) { - return _StaderConfig.Contract.STAKEPOOLMANAGER(&_StaderConfig.CallOpts) -} - -// STAKEPOOLMANAGER is a free data retrieval call binding the contract method 0xa53bddd6. -// -// Solidity: function STAKE_POOL_MANAGER() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) STAKEPOOLMANAGER() ([32]byte, error) { - return _StaderConfig.Contract.STAKEPOOLMANAGER(&_StaderConfig.CallOpts) -} - -// TOTALFEE is a free data retrieval call binding the contract method 0x63db7eae. -// -// Solidity: function TOTAL_FEE() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) TOTALFEE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "TOTAL_FEE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// TOTALFEE is a free data retrieval call binding the contract method 0x63db7eae. -// -// Solidity: function TOTAL_FEE() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) TOTALFEE() ([32]byte, error) { - return _StaderConfig.Contract.TOTALFEE(&_StaderConfig.CallOpts) -} - -// TOTALFEE is a free data retrieval call binding the contract method 0x63db7eae. -// -// Solidity: function TOTAL_FEE() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) TOTALFEE() ([32]byte, error) { - return _StaderConfig.Contract.TOTALFEE(&_StaderConfig.CallOpts) -} - -// USERWITHDRAWMANAGER is a free data retrieval call binding the contract method 0x36854d63. -// -// Solidity: function USER_WITHDRAW_MANAGER() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) USERWITHDRAWMANAGER(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "USER_WITHDRAW_MANAGER") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// USERWITHDRAWMANAGER is a free data retrieval call binding the contract method 0x36854d63. -// -// Solidity: function USER_WITHDRAW_MANAGER() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) USERWITHDRAWMANAGER() ([32]byte, error) { - return _StaderConfig.Contract.USERWITHDRAWMANAGER(&_StaderConfig.CallOpts) -} - -// USERWITHDRAWMANAGER is a free data retrieval call binding the contract method 0x36854d63. -// -// Solidity: function USER_WITHDRAW_MANAGER() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) USERWITHDRAWMANAGER() ([32]byte, error) { - return _StaderConfig.Contract.USERWITHDRAWMANAGER(&_StaderConfig.CallOpts) -} - -// VALIDATORWITHDRAWALVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x1c55cccd. -// -// Solidity: function VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) VALIDATORWITHDRAWALVAULTIMPLEMENTATION(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// VALIDATORWITHDRAWALVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x1c55cccd. -// -// Solidity: function VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) VALIDATORWITHDRAWALVAULTIMPLEMENTATION() ([32]byte, error) { - return _StaderConfig.Contract.VALIDATORWITHDRAWALVAULTIMPLEMENTATION(&_StaderConfig.CallOpts) -} - -// VALIDATORWITHDRAWALVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x1c55cccd. -// -// Solidity: function VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) VALIDATORWITHDRAWALVAULTIMPLEMENTATION() ([32]byte, error) { - return _StaderConfig.Contract.VALIDATORWITHDRAWALVAULTIMPLEMENTATION(&_StaderConfig.CallOpts) -} - -// VAULTFACTORY is a free data retrieval call binding the contract method 0x103f2907. -// -// Solidity: function VAULT_FACTORY() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) VAULTFACTORY(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "VAULT_FACTORY") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// VAULTFACTORY is a free data retrieval call binding the contract method 0x103f2907. -// -// Solidity: function VAULT_FACTORY() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) VAULTFACTORY() ([32]byte, error) { - return _StaderConfig.Contract.VAULTFACTORY(&_StaderConfig.CallOpts) -} - -// VAULTFACTORY is a free data retrieval call binding the contract method 0x103f2907. -// -// Solidity: function VAULT_FACTORY() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) VAULTFACTORY() ([32]byte, error) { - return _StaderConfig.Contract.VAULTFACTORY(&_StaderConfig.CallOpts) -} - -// WITHDRAWNKEYSBATCHSIZE is a free data retrieval call binding the contract method 0x88993d8b. -// -// Solidity: function WITHDRAWN_KEYS_BATCH_SIZE() view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) WITHDRAWNKEYSBATCHSIZE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "WITHDRAWN_KEYS_BATCH_SIZE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// WITHDRAWNKEYSBATCHSIZE is a free data retrieval call binding the contract method 0x88993d8b. -// -// Solidity: function WITHDRAWN_KEYS_BATCH_SIZE() view returns(bytes32) -func (_StaderConfig *StaderConfigSession) WITHDRAWNKEYSBATCHSIZE() ([32]byte, error) { - return _StaderConfig.Contract.WITHDRAWNKEYSBATCHSIZE(&_StaderConfig.CallOpts) -} - -// WITHDRAWNKEYSBATCHSIZE is a free data retrieval call binding the contract method 0x88993d8b. -// -// Solidity: function WITHDRAWN_KEYS_BATCH_SIZE() view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) WITHDRAWNKEYSBATCHSIZE() ([32]byte, error) { - return _StaderConfig.Contract.WITHDRAWNKEYSBATCHSIZE(&_StaderConfig.CallOpts) -} - -// GetAdmin is a free data retrieval call binding the contract method 0x6e9960c3. -// -// Solidity: function getAdmin() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetAdmin(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getAdmin") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetAdmin is a free data retrieval call binding the contract method 0x6e9960c3. -// -// Solidity: function getAdmin() view returns(address) -func (_StaderConfig *StaderConfigSession) GetAdmin() (common.Address, error) { - return _StaderConfig.Contract.GetAdmin(&_StaderConfig.CallOpts) -} - -// GetAdmin is a free data retrieval call binding the contract method 0x6e9960c3. -// -// Solidity: function getAdmin() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetAdmin() (common.Address, error) { - return _StaderConfig.Contract.GetAdmin(&_StaderConfig.CallOpts) -} - -// GetAuctionContract is a free data retrieval call binding the contract method 0x36c157f4. -// -// Solidity: function getAuctionContract() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetAuctionContract(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getAuctionContract") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetAuctionContract is a free data retrieval call binding the contract method 0x36c157f4. -// -// Solidity: function getAuctionContract() view returns(address) -func (_StaderConfig *StaderConfigSession) GetAuctionContract() (common.Address, error) { - return _StaderConfig.Contract.GetAuctionContract(&_StaderConfig.CallOpts) -} - -// GetAuctionContract is a free data retrieval call binding the contract method 0x36c157f4. -// -// Solidity: function getAuctionContract() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetAuctionContract() (common.Address, error) { - return _StaderConfig.Contract.GetAuctionContract(&_StaderConfig.CallOpts) -} - -// GetDecimals is a free data retrieval call binding the contract method 0xf0141d84. -// -// Solidity: function getDecimals() view returns(uint256) -func (_StaderConfig *StaderConfigCaller) GetDecimals(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getDecimals") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetDecimals is a free data retrieval call binding the contract method 0xf0141d84. -// -// Solidity: function getDecimals() view returns(uint256) -func (_StaderConfig *StaderConfigSession) GetDecimals() (*big.Int, error) { - return _StaderConfig.Contract.GetDecimals(&_StaderConfig.CallOpts) -} - -// GetDecimals is a free data retrieval call binding the contract method 0xf0141d84. -// -// Solidity: function getDecimals() view returns(uint256) -func (_StaderConfig *StaderConfigCallerSession) GetDecimals() (*big.Int, error) { - return _StaderConfig.Contract.GetDecimals(&_StaderConfig.CallOpts) -} - -// GetETHBalancePORFeedProxy is a free data retrieval call binding the contract method 0x489ed651. -// -// Solidity: function getETHBalancePORFeedProxy() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetETHBalancePORFeedProxy(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getETHBalancePORFeedProxy") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetETHBalancePORFeedProxy is a free data retrieval call binding the contract method 0x489ed651. -// -// Solidity: function getETHBalancePORFeedProxy() view returns(address) -func (_StaderConfig *StaderConfigSession) GetETHBalancePORFeedProxy() (common.Address, error) { - return _StaderConfig.Contract.GetETHBalancePORFeedProxy(&_StaderConfig.CallOpts) -} - -// GetETHBalancePORFeedProxy is a free data retrieval call binding the contract method 0x489ed651. -// -// Solidity: function getETHBalancePORFeedProxy() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetETHBalancePORFeedProxy() (common.Address, error) { - return _StaderConfig.Contract.GetETHBalancePORFeedProxy(&_StaderConfig.CallOpts) -} - -// GetETHDepositContract is a free data retrieval call binding the contract method 0x8f8b3867. -// -// Solidity: function getETHDepositContract() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetETHDepositContract(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getETHDepositContract") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetETHDepositContract is a free data retrieval call binding the contract method 0x8f8b3867. -// -// Solidity: function getETHDepositContract() view returns(address) -func (_StaderConfig *StaderConfigSession) GetETHDepositContract() (common.Address, error) { - return _StaderConfig.Contract.GetETHDepositContract(&_StaderConfig.CallOpts) -} - -// GetETHDepositContract is a free data retrieval call binding the contract method 0x8f8b3867. -// -// Solidity: function getETHDepositContract() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetETHDepositContract() (common.Address, error) { - return _StaderConfig.Contract.GetETHDepositContract(&_StaderConfig.CallOpts) -} - -// GetETHXSupplyPORFeedProxy is a free data retrieval call binding the contract method 0x2ca03f66. -// -// Solidity: function getETHXSupplyPORFeedProxy() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetETHXSupplyPORFeedProxy(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getETHXSupplyPORFeedProxy") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetETHXSupplyPORFeedProxy is a free data retrieval call binding the contract method 0x2ca03f66. -// -// Solidity: function getETHXSupplyPORFeedProxy() view returns(address) -func (_StaderConfig *StaderConfigSession) GetETHXSupplyPORFeedProxy() (common.Address, error) { - return _StaderConfig.Contract.GetETHXSupplyPORFeedProxy(&_StaderConfig.CallOpts) -} - -// GetETHXSupplyPORFeedProxy is a free data retrieval call binding the contract method 0x2ca03f66. -// -// Solidity: function getETHXSupplyPORFeedProxy() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetETHXSupplyPORFeedProxy() (common.Address, error) { - return _StaderConfig.Contract.GetETHXSupplyPORFeedProxy(&_StaderConfig.CallOpts) -} - -// GetETHxToken is a free data retrieval call binding the contract method 0xcc45dabe. -// -// Solidity: function getETHxToken() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetETHxToken(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getETHxToken") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetETHxToken is a free data retrieval call binding the contract method 0xcc45dabe. -// -// Solidity: function getETHxToken() view returns(address) -func (_StaderConfig *StaderConfigSession) GetETHxToken() (common.Address, error) { - return _StaderConfig.Contract.GetETHxToken(&_StaderConfig.CallOpts) -} - -// GetETHxToken is a free data retrieval call binding the contract method 0xcc45dabe. -// -// Solidity: function getETHxToken() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetETHxToken() (common.Address, error) { - return _StaderConfig.Contract.GetETHxToken(&_StaderConfig.CallOpts) -} - -// GetFullDepositSize is a free data retrieval call binding the contract method 0xfa71fcbb. -// -// Solidity: function getFullDepositSize() view returns(uint256) -func (_StaderConfig *StaderConfigCaller) GetFullDepositSize(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getFullDepositSize") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetFullDepositSize is a free data retrieval call binding the contract method 0xfa71fcbb. -// -// Solidity: function getFullDepositSize() view returns(uint256) -func (_StaderConfig *StaderConfigSession) GetFullDepositSize() (*big.Int, error) { - return _StaderConfig.Contract.GetFullDepositSize(&_StaderConfig.CallOpts) -} - -// GetFullDepositSize is a free data retrieval call binding the contract method 0xfa71fcbb. -// -// Solidity: function getFullDepositSize() view returns(uint256) -func (_StaderConfig *StaderConfigCallerSession) GetFullDepositSize() (*big.Int, error) { - return _StaderConfig.Contract.GetFullDepositSize(&_StaderConfig.CallOpts) -} - -// GetMaxDepositAmount is a free data retrieval call binding the contract method 0x5726a356. -// -// Solidity: function getMaxDepositAmount() view returns(uint256) -func (_StaderConfig *StaderConfigCaller) GetMaxDepositAmount(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getMaxDepositAmount") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetMaxDepositAmount is a free data retrieval call binding the contract method 0x5726a356. -// -// Solidity: function getMaxDepositAmount() view returns(uint256) -func (_StaderConfig *StaderConfigSession) GetMaxDepositAmount() (*big.Int, error) { - return _StaderConfig.Contract.GetMaxDepositAmount(&_StaderConfig.CallOpts) -} - -// GetMaxDepositAmount is a free data retrieval call binding the contract method 0x5726a356. -// -// Solidity: function getMaxDepositAmount() view returns(uint256) -func (_StaderConfig *StaderConfigCallerSession) GetMaxDepositAmount() (*big.Int, error) { - return _StaderConfig.Contract.GetMaxDepositAmount(&_StaderConfig.CallOpts) -} - -// GetMaxWithdrawAmount is a free data retrieval call binding the contract method 0x326a16a3. -// -// Solidity: function getMaxWithdrawAmount() view returns(uint256) -func (_StaderConfig *StaderConfigCaller) GetMaxWithdrawAmount(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getMaxWithdrawAmount") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetMaxWithdrawAmount is a free data retrieval call binding the contract method 0x326a16a3. -// -// Solidity: function getMaxWithdrawAmount() view returns(uint256) -func (_StaderConfig *StaderConfigSession) GetMaxWithdrawAmount() (*big.Int, error) { - return _StaderConfig.Contract.GetMaxWithdrawAmount(&_StaderConfig.CallOpts) -} - -// GetMaxWithdrawAmount is a free data retrieval call binding the contract method 0x326a16a3. -// -// Solidity: function getMaxWithdrawAmount() view returns(uint256) -func (_StaderConfig *StaderConfigCallerSession) GetMaxWithdrawAmount() (*big.Int, error) { - return _StaderConfig.Contract.GetMaxWithdrawAmount(&_StaderConfig.CallOpts) -} - -// GetMinBlockDelayToFinalizeWithdrawRequest is a free data retrieval call binding the contract method 0xd2cee8ba. -// -// Solidity: function getMinBlockDelayToFinalizeWithdrawRequest() view returns(uint256) -func (_StaderConfig *StaderConfigCaller) GetMinBlockDelayToFinalizeWithdrawRequest(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getMinBlockDelayToFinalizeWithdrawRequest") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetMinBlockDelayToFinalizeWithdrawRequest is a free data retrieval call binding the contract method 0xd2cee8ba. -// -// Solidity: function getMinBlockDelayToFinalizeWithdrawRequest() view returns(uint256) -func (_StaderConfig *StaderConfigSession) GetMinBlockDelayToFinalizeWithdrawRequest() (*big.Int, error) { - return _StaderConfig.Contract.GetMinBlockDelayToFinalizeWithdrawRequest(&_StaderConfig.CallOpts) -} - -// GetMinBlockDelayToFinalizeWithdrawRequest is a free data retrieval call binding the contract method 0xd2cee8ba. -// -// Solidity: function getMinBlockDelayToFinalizeWithdrawRequest() view returns(uint256) -func (_StaderConfig *StaderConfigCallerSession) GetMinBlockDelayToFinalizeWithdrawRequest() (*big.Int, error) { - return _StaderConfig.Contract.GetMinBlockDelayToFinalizeWithdrawRequest(&_StaderConfig.CallOpts) -} - -// GetMinDepositAmount is a free data retrieval call binding the contract method 0xf4914d33. -// -// Solidity: function getMinDepositAmount() view returns(uint256) -func (_StaderConfig *StaderConfigCaller) GetMinDepositAmount(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getMinDepositAmount") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetMinDepositAmount is a free data retrieval call binding the contract method 0xf4914d33. -// -// Solidity: function getMinDepositAmount() view returns(uint256) -func (_StaderConfig *StaderConfigSession) GetMinDepositAmount() (*big.Int, error) { - return _StaderConfig.Contract.GetMinDepositAmount(&_StaderConfig.CallOpts) -} - -// GetMinDepositAmount is a free data retrieval call binding the contract method 0xf4914d33. -// -// Solidity: function getMinDepositAmount() view returns(uint256) -func (_StaderConfig *StaderConfigCallerSession) GetMinDepositAmount() (*big.Int, error) { - return _StaderConfig.Contract.GetMinDepositAmount(&_StaderConfig.CallOpts) -} - -// GetMinWithdrawAmount is a free data retrieval call binding the contract method 0x14e1b8fd. -// -// Solidity: function getMinWithdrawAmount() view returns(uint256) -func (_StaderConfig *StaderConfigCaller) GetMinWithdrawAmount(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getMinWithdrawAmount") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetMinWithdrawAmount is a free data retrieval call binding the contract method 0x14e1b8fd. -// -// Solidity: function getMinWithdrawAmount() view returns(uint256) -func (_StaderConfig *StaderConfigSession) GetMinWithdrawAmount() (*big.Int, error) { - return _StaderConfig.Contract.GetMinWithdrawAmount(&_StaderConfig.CallOpts) -} - -// GetMinWithdrawAmount is a free data retrieval call binding the contract method 0x14e1b8fd. -// -// Solidity: function getMinWithdrawAmount() view returns(uint256) -func (_StaderConfig *StaderConfigCallerSession) GetMinWithdrawAmount() (*big.Int, error) { - return _StaderConfig.Contract.GetMinWithdrawAmount(&_StaderConfig.CallOpts) -} - -// GetNodeELRewardVaultImplementation is a free data retrieval call binding the contract method 0xe8fe1873. -// -// Solidity: function getNodeELRewardVaultImplementation() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetNodeELRewardVaultImplementation(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getNodeELRewardVaultImplementation") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetNodeELRewardVaultImplementation is a free data retrieval call binding the contract method 0xe8fe1873. -// -// Solidity: function getNodeELRewardVaultImplementation() view returns(address) -func (_StaderConfig *StaderConfigSession) GetNodeELRewardVaultImplementation() (common.Address, error) { - return _StaderConfig.Contract.GetNodeELRewardVaultImplementation(&_StaderConfig.CallOpts) -} - -// GetNodeELRewardVaultImplementation is a free data retrieval call binding the contract method 0xe8fe1873. -// -// Solidity: function getNodeELRewardVaultImplementation() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetNodeELRewardVaultImplementation() (common.Address, error) { - return _StaderConfig.Contract.GetNodeELRewardVaultImplementation(&_StaderConfig.CallOpts) -} - -// GetOperatorMaxNameLength is a free data retrieval call binding the contract method 0x10deba2b. -// -// Solidity: function getOperatorMaxNameLength() view returns(uint256) -func (_StaderConfig *StaderConfigCaller) GetOperatorMaxNameLength(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getOperatorMaxNameLength") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetOperatorMaxNameLength is a free data retrieval call binding the contract method 0x10deba2b. -// -// Solidity: function getOperatorMaxNameLength() view returns(uint256) -func (_StaderConfig *StaderConfigSession) GetOperatorMaxNameLength() (*big.Int, error) { - return _StaderConfig.Contract.GetOperatorMaxNameLength(&_StaderConfig.CallOpts) -} - -// GetOperatorMaxNameLength is a free data retrieval call binding the contract method 0x10deba2b. -// -// Solidity: function getOperatorMaxNameLength() view returns(uint256) -func (_StaderConfig *StaderConfigCallerSession) GetOperatorMaxNameLength() (*big.Int, error) { - return _StaderConfig.Contract.GetOperatorMaxNameLength(&_StaderConfig.CallOpts) -} - -// GetOperatorRewardsCollector is a free data retrieval call binding the contract method 0x278671bb. -// -// Solidity: function getOperatorRewardsCollector() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetOperatorRewardsCollector(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getOperatorRewardsCollector") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetOperatorRewardsCollector is a free data retrieval call binding the contract method 0x278671bb. -// -// Solidity: function getOperatorRewardsCollector() view returns(address) -func (_StaderConfig *StaderConfigSession) GetOperatorRewardsCollector() (common.Address, error) { - return _StaderConfig.Contract.GetOperatorRewardsCollector(&_StaderConfig.CallOpts) -} - -// GetOperatorRewardsCollector is a free data retrieval call binding the contract method 0x278671bb. -// -// Solidity: function getOperatorRewardsCollector() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetOperatorRewardsCollector() (common.Address, error) { - return _StaderConfig.Contract.GetOperatorRewardsCollector(&_StaderConfig.CallOpts) -} - -// GetPenaltyContract is a free data retrieval call binding the contract method 0x8910115c. -// -// Solidity: function getPenaltyContract() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetPenaltyContract(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getPenaltyContract") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetPenaltyContract is a free data retrieval call binding the contract method 0x8910115c. -// -// Solidity: function getPenaltyContract() view returns(address) -func (_StaderConfig *StaderConfigSession) GetPenaltyContract() (common.Address, error) { - return _StaderConfig.Contract.GetPenaltyContract(&_StaderConfig.CallOpts) -} - -// GetPenaltyContract is a free data retrieval call binding the contract method 0x8910115c. -// -// Solidity: function getPenaltyContract() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetPenaltyContract() (common.Address, error) { - return _StaderConfig.Contract.GetPenaltyContract(&_StaderConfig.CallOpts) -} - -// GetPermissionedNodeRegistry is a free data retrieval call binding the contract method 0x5edc686e. -// -// Solidity: function getPermissionedNodeRegistry() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetPermissionedNodeRegistry(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getPermissionedNodeRegistry") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetPermissionedNodeRegistry is a free data retrieval call binding the contract method 0x5edc686e. -// -// Solidity: function getPermissionedNodeRegistry() view returns(address) -func (_StaderConfig *StaderConfigSession) GetPermissionedNodeRegistry() (common.Address, error) { - return _StaderConfig.Contract.GetPermissionedNodeRegistry(&_StaderConfig.CallOpts) -} - -// GetPermissionedNodeRegistry is a free data retrieval call binding the contract method 0x5edc686e. -// -// Solidity: function getPermissionedNodeRegistry() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetPermissionedNodeRegistry() (common.Address, error) { - return _StaderConfig.Contract.GetPermissionedNodeRegistry(&_StaderConfig.CallOpts) -} - -// GetPermissionedPool is a free data retrieval call binding the contract method 0xa0b4079f. -// -// Solidity: function getPermissionedPool() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetPermissionedPool(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getPermissionedPool") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetPermissionedPool is a free data retrieval call binding the contract method 0xa0b4079f. -// -// Solidity: function getPermissionedPool() view returns(address) -func (_StaderConfig *StaderConfigSession) GetPermissionedPool() (common.Address, error) { - return _StaderConfig.Contract.GetPermissionedPool(&_StaderConfig.CallOpts) -} - -// GetPermissionedPool is a free data retrieval call binding the contract method 0xa0b4079f. -// -// Solidity: function getPermissionedPool() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetPermissionedPool() (common.Address, error) { - return _StaderConfig.Contract.GetPermissionedPool(&_StaderConfig.CallOpts) -} - -// GetPermissionedSocializingPool is a free data retrieval call binding the contract method 0xa469e247. -// -// Solidity: function getPermissionedSocializingPool() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetPermissionedSocializingPool(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getPermissionedSocializingPool") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetPermissionedSocializingPool is a free data retrieval call binding the contract method 0xa469e247. -// -// Solidity: function getPermissionedSocializingPool() view returns(address) -func (_StaderConfig *StaderConfigSession) GetPermissionedSocializingPool() (common.Address, error) { - return _StaderConfig.Contract.GetPermissionedSocializingPool(&_StaderConfig.CallOpts) -} - -// GetPermissionedSocializingPool is a free data retrieval call binding the contract method 0xa469e247. -// -// Solidity: function getPermissionedSocializingPool() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetPermissionedSocializingPool() (common.Address, error) { - return _StaderConfig.Contract.GetPermissionedSocializingPool(&_StaderConfig.CallOpts) -} - -// GetPermissionlessNodeRegistry is a free data retrieval call binding the contract method 0x360374a4. -// -// Solidity: function getPermissionlessNodeRegistry() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetPermissionlessNodeRegistry(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getPermissionlessNodeRegistry") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetPermissionlessNodeRegistry is a free data retrieval call binding the contract method 0x360374a4. -// -// Solidity: function getPermissionlessNodeRegistry() view returns(address) -func (_StaderConfig *StaderConfigSession) GetPermissionlessNodeRegistry() (common.Address, error) { - return _StaderConfig.Contract.GetPermissionlessNodeRegistry(&_StaderConfig.CallOpts) -} - -// GetPermissionlessNodeRegistry is a free data retrieval call binding the contract method 0x360374a4. -// -// Solidity: function getPermissionlessNodeRegistry() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetPermissionlessNodeRegistry() (common.Address, error) { - return _StaderConfig.Contract.GetPermissionlessNodeRegistry(&_StaderConfig.CallOpts) -} - -// GetPermissionlessPool is a free data retrieval call binding the contract method 0x9ca76b73. -// -// Solidity: function getPermissionlessPool() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetPermissionlessPool(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getPermissionlessPool") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetPermissionlessPool is a free data retrieval call binding the contract method 0x9ca76b73. -// -// Solidity: function getPermissionlessPool() view returns(address) -func (_StaderConfig *StaderConfigSession) GetPermissionlessPool() (common.Address, error) { - return _StaderConfig.Contract.GetPermissionlessPool(&_StaderConfig.CallOpts) -} - -// GetPermissionlessPool is a free data retrieval call binding the contract method 0x9ca76b73. -// -// Solidity: function getPermissionlessPool() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetPermissionlessPool() (common.Address, error) { - return _StaderConfig.Contract.GetPermissionlessPool(&_StaderConfig.CallOpts) -} - -// GetPermissionlessSocializingPool is a free data retrieval call binding the contract method 0x0a3fbd9a. -// -// Solidity: function getPermissionlessSocializingPool() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetPermissionlessSocializingPool(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getPermissionlessSocializingPool") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetPermissionlessSocializingPool is a free data retrieval call binding the contract method 0x0a3fbd9a. -// -// Solidity: function getPermissionlessSocializingPool() view returns(address) -func (_StaderConfig *StaderConfigSession) GetPermissionlessSocializingPool() (common.Address, error) { - return _StaderConfig.Contract.GetPermissionlessSocializingPool(&_StaderConfig.CallOpts) -} - -// GetPermissionlessSocializingPool is a free data retrieval call binding the contract method 0x0a3fbd9a. -// -// Solidity: function getPermissionlessSocializingPool() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetPermissionlessSocializingPool() (common.Address, error) { - return _StaderConfig.Contract.GetPermissionlessSocializingPool(&_StaderConfig.CallOpts) -} - -// GetPoolSelector is a free data retrieval call binding the contract method 0x5458a106. -// -// Solidity: function getPoolSelector() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetPoolSelector(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getPoolSelector") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetPoolSelector is a free data retrieval call binding the contract method 0x5458a106. -// -// Solidity: function getPoolSelector() view returns(address) -func (_StaderConfig *StaderConfigSession) GetPoolSelector() (common.Address, error) { - return _StaderConfig.Contract.GetPoolSelector(&_StaderConfig.CallOpts) -} - -// GetPoolSelector is a free data retrieval call binding the contract method 0x5458a106. -// -// Solidity: function getPoolSelector() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetPoolSelector() (common.Address, error) { - return _StaderConfig.Contract.GetPoolSelector(&_StaderConfig.CallOpts) -} - -// GetPoolUtils is a free data retrieval call binding the contract method 0x6ccb9d70. -// -// Solidity: function getPoolUtils() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetPoolUtils(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getPoolUtils") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetPoolUtils is a free data retrieval call binding the contract method 0x6ccb9d70. -// -// Solidity: function getPoolUtils() view returns(address) -func (_StaderConfig *StaderConfigSession) GetPoolUtils() (common.Address, error) { - return _StaderConfig.Contract.GetPoolUtils(&_StaderConfig.CallOpts) -} - -// GetPoolUtils is a free data retrieval call binding the contract method 0x6ccb9d70. -// -// Solidity: function getPoolUtils() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetPoolUtils() (common.Address, error) { - return _StaderConfig.Contract.GetPoolUtils(&_StaderConfig.CallOpts) -} - -// GetPreDepositSize is a free data retrieval call binding the contract method 0x08297645. -// -// Solidity: function getPreDepositSize() view returns(uint256) -func (_StaderConfig *StaderConfigCaller) GetPreDepositSize(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getPreDepositSize") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetPreDepositSize is a free data retrieval call binding the contract method 0x08297645. -// -// Solidity: function getPreDepositSize() view returns(uint256) -func (_StaderConfig *StaderConfigSession) GetPreDepositSize() (*big.Int, error) { - return _StaderConfig.Contract.GetPreDepositSize(&_StaderConfig.CallOpts) -} - -// GetPreDepositSize is a free data retrieval call binding the contract method 0x08297645. -// -// Solidity: function getPreDepositSize() view returns(uint256) -func (_StaderConfig *StaderConfigCallerSession) GetPreDepositSize() (*big.Int, error) { - return _StaderConfig.Contract.GetPreDepositSize(&_StaderConfig.CallOpts) -} - -// GetRewardsThreshold is a free data retrieval call binding the contract method 0x18829fc3. -// -// Solidity: function getRewardsThreshold() view returns(uint256) -func (_StaderConfig *StaderConfigCaller) GetRewardsThreshold(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getRewardsThreshold") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetRewardsThreshold is a free data retrieval call binding the contract method 0x18829fc3. -// -// Solidity: function getRewardsThreshold() view returns(uint256) -func (_StaderConfig *StaderConfigSession) GetRewardsThreshold() (*big.Int, error) { - return _StaderConfig.Contract.GetRewardsThreshold(&_StaderConfig.CallOpts) -} - -// GetRewardsThreshold is a free data retrieval call binding the contract method 0x18829fc3. -// -// Solidity: function getRewardsThreshold() view returns(uint256) -func (_StaderConfig *StaderConfigCallerSession) GetRewardsThreshold() (*big.Int, error) { - return _StaderConfig.Contract.GetRewardsThreshold(&_StaderConfig.CallOpts) -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_StaderConfig *StaderConfigCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getRoleAdmin", role) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_StaderConfig *StaderConfigSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _StaderConfig.Contract.GetRoleAdmin(&_StaderConfig.CallOpts, role) -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_StaderConfig *StaderConfigCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _StaderConfig.Contract.GetRoleAdmin(&_StaderConfig.CallOpts, role) -} - -// GetSDCollateral is a free data retrieval call binding the contract method 0xaa953795. -// -// Solidity: function getSDCollateral() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetSDCollateral(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getSDCollateral") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetSDCollateral is a free data retrieval call binding the contract method 0xaa953795. -// -// Solidity: function getSDCollateral() view returns(address) -func (_StaderConfig *StaderConfigSession) GetSDCollateral() (common.Address, error) { - return _StaderConfig.Contract.GetSDCollateral(&_StaderConfig.CallOpts) -} - -// GetSDCollateral is a free data retrieval call binding the contract method 0xaa953795. -// -// Solidity: function getSDCollateral() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetSDCollateral() (common.Address, error) { - return _StaderConfig.Contract.GetSDCollateral(&_StaderConfig.CallOpts) -} - -// GetSocializingPoolCycleDuration is a free data retrieval call binding the contract method 0x1ca197a5. -// -// Solidity: function getSocializingPoolCycleDuration() view returns(uint256) -func (_StaderConfig *StaderConfigCaller) GetSocializingPoolCycleDuration(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getSocializingPoolCycleDuration") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetSocializingPoolCycleDuration is a free data retrieval call binding the contract method 0x1ca197a5. -// -// Solidity: function getSocializingPoolCycleDuration() view returns(uint256) -func (_StaderConfig *StaderConfigSession) GetSocializingPoolCycleDuration() (*big.Int, error) { - return _StaderConfig.Contract.GetSocializingPoolCycleDuration(&_StaderConfig.CallOpts) -} - -// GetSocializingPoolCycleDuration is a free data retrieval call binding the contract method 0x1ca197a5. -// -// Solidity: function getSocializingPoolCycleDuration() view returns(uint256) -func (_StaderConfig *StaderConfigCallerSession) GetSocializingPoolCycleDuration() (*big.Int, error) { - return _StaderConfig.Contract.GetSocializingPoolCycleDuration(&_StaderConfig.CallOpts) -} - -// GetSocializingPoolOptInCoolingPeriod is a free data retrieval call binding the contract method 0x6e0fddfc. -// -// Solidity: function getSocializingPoolOptInCoolingPeriod() view returns(uint256) -func (_StaderConfig *StaderConfigCaller) GetSocializingPoolOptInCoolingPeriod(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getSocializingPoolOptInCoolingPeriod") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetSocializingPoolOptInCoolingPeriod is a free data retrieval call binding the contract method 0x6e0fddfc. -// -// Solidity: function getSocializingPoolOptInCoolingPeriod() view returns(uint256) -func (_StaderConfig *StaderConfigSession) GetSocializingPoolOptInCoolingPeriod() (*big.Int, error) { - return _StaderConfig.Contract.GetSocializingPoolOptInCoolingPeriod(&_StaderConfig.CallOpts) -} - -// GetSocializingPoolOptInCoolingPeriod is a free data retrieval call binding the contract method 0x6e0fddfc. -// -// Solidity: function getSocializingPoolOptInCoolingPeriod() view returns(uint256) -func (_StaderConfig *StaderConfigCallerSession) GetSocializingPoolOptInCoolingPeriod() (*big.Int, error) { - return _StaderConfig.Contract.GetSocializingPoolOptInCoolingPeriod(&_StaderConfig.CallOpts) -} - -// GetStaderInsuranceFund is a free data retrieval call binding the contract method 0xb5cfee6c. -// -// Solidity: function getStaderInsuranceFund() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetStaderInsuranceFund(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getStaderInsuranceFund") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetStaderInsuranceFund is a free data retrieval call binding the contract method 0xb5cfee6c. -// -// Solidity: function getStaderInsuranceFund() view returns(address) -func (_StaderConfig *StaderConfigSession) GetStaderInsuranceFund() (common.Address, error) { - return _StaderConfig.Contract.GetStaderInsuranceFund(&_StaderConfig.CallOpts) -} - -// GetStaderInsuranceFund is a free data retrieval call binding the contract method 0xb5cfee6c. -// -// Solidity: function getStaderInsuranceFund() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetStaderInsuranceFund() (common.Address, error) { - return _StaderConfig.Contract.GetStaderInsuranceFund(&_StaderConfig.CallOpts) -} - -// GetStaderOracle is a free data retrieval call binding the contract method 0xdefd024d. -// -// Solidity: function getStaderOracle() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetStaderOracle(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getStaderOracle") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetStaderOracle is a free data retrieval call binding the contract method 0xdefd024d. -// -// Solidity: function getStaderOracle() view returns(address) -func (_StaderConfig *StaderConfigSession) GetStaderOracle() (common.Address, error) { - return _StaderConfig.Contract.GetStaderOracle(&_StaderConfig.CallOpts) -} - -// GetStaderOracle is a free data retrieval call binding the contract method 0xdefd024d. -// -// Solidity: function getStaderOracle() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetStaderOracle() (common.Address, error) { - return _StaderConfig.Contract.GetStaderOracle(&_StaderConfig.CallOpts) -} - -// GetStaderToken is a free data retrieval call binding the contract method 0xe069f714. -// -// Solidity: function getStaderToken() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetStaderToken(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getStaderToken") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetStaderToken is a free data retrieval call binding the contract method 0xe069f714. -// -// Solidity: function getStaderToken() view returns(address) -func (_StaderConfig *StaderConfigSession) GetStaderToken() (common.Address, error) { - return _StaderConfig.Contract.GetStaderToken(&_StaderConfig.CallOpts) -} - -// GetStaderToken is a free data retrieval call binding the contract method 0xe069f714. -// -// Solidity: function getStaderToken() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetStaderToken() (common.Address, error) { - return _StaderConfig.Contract.GetStaderToken(&_StaderConfig.CallOpts) -} - -// GetStaderTreasury is a free data retrieval call binding the contract method 0x72ce78b0. -// -// Solidity: function getStaderTreasury() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetStaderTreasury(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getStaderTreasury") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetStaderTreasury is a free data retrieval call binding the contract method 0x72ce78b0. -// -// Solidity: function getStaderTreasury() view returns(address) -func (_StaderConfig *StaderConfigSession) GetStaderTreasury() (common.Address, error) { - return _StaderConfig.Contract.GetStaderTreasury(&_StaderConfig.CallOpts) -} - -// GetStaderTreasury is a free data retrieval call binding the contract method 0x72ce78b0. -// -// Solidity: function getStaderTreasury() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetStaderTreasury() (common.Address, error) { - return _StaderConfig.Contract.GetStaderTreasury(&_StaderConfig.CallOpts) -} - -// GetStakePoolManager is a free data retrieval call binding the contract method 0x2ec5e018. -// -// Solidity: function getStakePoolManager() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetStakePoolManager(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getStakePoolManager") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetStakePoolManager is a free data retrieval call binding the contract method 0x2ec5e018. -// -// Solidity: function getStakePoolManager() view returns(address) -func (_StaderConfig *StaderConfigSession) GetStakePoolManager() (common.Address, error) { - return _StaderConfig.Contract.GetStakePoolManager(&_StaderConfig.CallOpts) -} - -// GetStakePoolManager is a free data retrieval call binding the contract method 0x2ec5e018. -// -// Solidity: function getStakePoolManager() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetStakePoolManager() (common.Address, error) { - return _StaderConfig.Contract.GetStakePoolManager(&_StaderConfig.CallOpts) -} - -// GetStakedEthPerNode is a free data retrieval call binding the contract method 0xff387f3a. -// -// Solidity: function getStakedEthPerNode() view returns(uint256) -func (_StaderConfig *StaderConfigCaller) GetStakedEthPerNode(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getStakedEthPerNode") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetStakedEthPerNode is a free data retrieval call binding the contract method 0xff387f3a. -// -// Solidity: function getStakedEthPerNode() view returns(uint256) -func (_StaderConfig *StaderConfigSession) GetStakedEthPerNode() (*big.Int, error) { - return _StaderConfig.Contract.GetStakedEthPerNode(&_StaderConfig.CallOpts) -} - -// GetStakedEthPerNode is a free data retrieval call binding the contract method 0xff387f3a. -// -// Solidity: function getStakedEthPerNode() view returns(uint256) -func (_StaderConfig *StaderConfigCallerSession) GetStakedEthPerNode() (*big.Int, error) { - return _StaderConfig.Contract.GetStakedEthPerNode(&_StaderConfig.CallOpts) -} - -// GetTotalFee is a free data retrieval call binding the contract method 0x7ae316d0. -// -// Solidity: function getTotalFee() view returns(uint256) -func (_StaderConfig *StaderConfigCaller) GetTotalFee(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getTotalFee") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetTotalFee is a free data retrieval call binding the contract method 0x7ae316d0. -// -// Solidity: function getTotalFee() view returns(uint256) -func (_StaderConfig *StaderConfigSession) GetTotalFee() (*big.Int, error) { - return _StaderConfig.Contract.GetTotalFee(&_StaderConfig.CallOpts) -} - -// GetTotalFee is a free data retrieval call binding the contract method 0x7ae316d0. -// -// Solidity: function getTotalFee() view returns(uint256) -func (_StaderConfig *StaderConfigCallerSession) GetTotalFee() (*big.Int, error) { - return _StaderConfig.Contract.GetTotalFee(&_StaderConfig.CallOpts) -} - -// GetUserWithdrawManager is a free data retrieval call binding the contract method 0xecf170a8. -// -// Solidity: function getUserWithdrawManager() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetUserWithdrawManager(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getUserWithdrawManager") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetUserWithdrawManager is a free data retrieval call binding the contract method 0xecf170a8. -// -// Solidity: function getUserWithdrawManager() view returns(address) -func (_StaderConfig *StaderConfigSession) GetUserWithdrawManager() (common.Address, error) { - return _StaderConfig.Contract.GetUserWithdrawManager(&_StaderConfig.CallOpts) -} - -// GetUserWithdrawManager is a free data retrieval call binding the contract method 0xecf170a8. -// -// Solidity: function getUserWithdrawManager() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetUserWithdrawManager() (common.Address, error) { - return _StaderConfig.Contract.GetUserWithdrawManager(&_StaderConfig.CallOpts) -} - -// GetValidatorWithdrawalVaultImplementation is a free data retrieval call binding the contract method 0x6d28ad1c. -// -// Solidity: function getValidatorWithdrawalVaultImplementation() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetValidatorWithdrawalVaultImplementation(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getValidatorWithdrawalVaultImplementation") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetValidatorWithdrawalVaultImplementation is a free data retrieval call binding the contract method 0x6d28ad1c. -// -// Solidity: function getValidatorWithdrawalVaultImplementation() view returns(address) -func (_StaderConfig *StaderConfigSession) GetValidatorWithdrawalVaultImplementation() (common.Address, error) { - return _StaderConfig.Contract.GetValidatorWithdrawalVaultImplementation(&_StaderConfig.CallOpts) -} - -// GetValidatorWithdrawalVaultImplementation is a free data retrieval call binding the contract method 0x6d28ad1c. -// -// Solidity: function getValidatorWithdrawalVaultImplementation() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetValidatorWithdrawalVaultImplementation() (common.Address, error) { - return _StaderConfig.Contract.GetValidatorWithdrawalVaultImplementation(&_StaderConfig.CallOpts) -} - -// GetVaultFactory is a free data retrieval call binding the contract method 0x18bcb284. -// -// Solidity: function getVaultFactory() view returns(address) -func (_StaderConfig *StaderConfigCaller) GetVaultFactory(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getVaultFactory") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetVaultFactory is a free data retrieval call binding the contract method 0x18bcb284. -// -// Solidity: function getVaultFactory() view returns(address) -func (_StaderConfig *StaderConfigSession) GetVaultFactory() (common.Address, error) { - return _StaderConfig.Contract.GetVaultFactory(&_StaderConfig.CallOpts) -} - -// GetVaultFactory is a free data retrieval call binding the contract method 0x18bcb284. -// -// Solidity: function getVaultFactory() view returns(address) -func (_StaderConfig *StaderConfigCallerSession) GetVaultFactory() (common.Address, error) { - return _StaderConfig.Contract.GetVaultFactory(&_StaderConfig.CallOpts) -} - -// GetWithdrawnKeyBatchSize is a free data retrieval call binding the contract method 0xb479a517. -// -// Solidity: function getWithdrawnKeyBatchSize() view returns(uint256) -func (_StaderConfig *StaderConfigCaller) GetWithdrawnKeyBatchSize(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "getWithdrawnKeyBatchSize") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetWithdrawnKeyBatchSize is a free data retrieval call binding the contract method 0xb479a517. -// -// Solidity: function getWithdrawnKeyBatchSize() view returns(uint256) -func (_StaderConfig *StaderConfigSession) GetWithdrawnKeyBatchSize() (*big.Int, error) { - return _StaderConfig.Contract.GetWithdrawnKeyBatchSize(&_StaderConfig.CallOpts) -} - -// GetWithdrawnKeyBatchSize is a free data retrieval call binding the contract method 0xb479a517. -// -// Solidity: function getWithdrawnKeyBatchSize() view returns(uint256) -func (_StaderConfig *StaderConfigCallerSession) GetWithdrawnKeyBatchSize() (*big.Int, error) { - return _StaderConfig.Contract.GetWithdrawnKeyBatchSize(&_StaderConfig.CallOpts) -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_StaderConfig *StaderConfigCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "hasRole", role, account) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_StaderConfig *StaderConfigSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _StaderConfig.Contract.HasRole(&_StaderConfig.CallOpts, role, account) -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_StaderConfig *StaderConfigCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _StaderConfig.Contract.HasRole(&_StaderConfig.CallOpts, role, account) -} - -// OnlyManagerRole is a free data retrieval call binding the contract method 0x6240fb9c. -// -// Solidity: function onlyManagerRole(address account) view returns(bool) -func (_StaderConfig *StaderConfigCaller) OnlyManagerRole(opts *bind.CallOpts, account common.Address) (bool, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "onlyManagerRole", account) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// OnlyManagerRole is a free data retrieval call binding the contract method 0x6240fb9c. -// -// Solidity: function onlyManagerRole(address account) view returns(bool) -func (_StaderConfig *StaderConfigSession) OnlyManagerRole(account common.Address) (bool, error) { - return _StaderConfig.Contract.OnlyManagerRole(&_StaderConfig.CallOpts, account) -} - -// OnlyManagerRole is a free data retrieval call binding the contract method 0x6240fb9c. -// -// Solidity: function onlyManagerRole(address account) view returns(bool) -func (_StaderConfig *StaderConfigCallerSession) OnlyManagerRole(account common.Address) (bool, error) { - return _StaderConfig.Contract.OnlyManagerRole(&_StaderConfig.CallOpts, account) -} - -// OnlyOperatorRole is a free data retrieval call binding the contract method 0x53f5713b. -// -// Solidity: function onlyOperatorRole(address account) view returns(bool) -func (_StaderConfig *StaderConfigCaller) OnlyOperatorRole(opts *bind.CallOpts, account common.Address) (bool, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "onlyOperatorRole", account) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// OnlyOperatorRole is a free data retrieval call binding the contract method 0x53f5713b. -// -// Solidity: function onlyOperatorRole(address account) view returns(bool) -func (_StaderConfig *StaderConfigSession) OnlyOperatorRole(account common.Address) (bool, error) { - return _StaderConfig.Contract.OnlyOperatorRole(&_StaderConfig.CallOpts, account) -} - -// OnlyOperatorRole is a free data retrieval call binding the contract method 0x53f5713b. -// -// Solidity: function onlyOperatorRole(address account) view returns(bool) -func (_StaderConfig *StaderConfigCallerSession) OnlyOperatorRole(account common.Address) (bool, error) { - return _StaderConfig.Contract.OnlyOperatorRole(&_StaderConfig.CallOpts, account) -} - -// OnlyStaderContract is a free data retrieval call binding the contract method 0xb3123922. -// -// Solidity: function onlyStaderContract(address _addr, bytes32 _contractName) view returns(bool) -func (_StaderConfig *StaderConfigCaller) OnlyStaderContract(opts *bind.CallOpts, _addr common.Address, _contractName [32]byte) (bool, error) { - var out []interface{} - err := _StaderConfig.contract.Call(opts, &out, "onlyStaderContract", _addr, _contractName) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// OnlyStaderContract is a free data retrieval call binding the contract method 0xb3123922. -// -// Solidity: function onlyStaderContract(address _addr, bytes32 _contractName) view returns(bool) -func (_StaderConfig *StaderConfigSession) OnlyStaderContract(_addr common.Address, _contractName [32]byte) (bool, error) { - return _StaderConfig.Contract.OnlyStaderContract(&_StaderConfig.CallOpts, _addr, _contractName) -} - -// OnlyStaderContract is a free data retrieval call binding the contract method 0xb3123922. -// -// Solidity: function onlyStaderContract(address _addr, bytes32 _contractName) view returns(bool) -func (_StaderConfig *StaderConfigCallerSession) OnlyStaderContract(_addr common.Address, _contractName [32]byte) (bool, error) { - return _StaderConfig.Contract.OnlyStaderContract(&_StaderConfig.CallOpts, _addr, _contractName) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_StaderConfig *StaderConfigCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { - var out []interface{} - err := _StaderConfig.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 (_StaderConfig *StaderConfigSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _StaderConfig.Contract.SupportsInterface(&_StaderConfig.CallOpts, interfaceId) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_StaderConfig *StaderConfigCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _StaderConfig.Contract.SupportsInterface(&_StaderConfig.CallOpts, interfaceId) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_StaderConfig *StaderConfigTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "grantRole", role, account) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_StaderConfig *StaderConfigSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.GrantRole(&_StaderConfig.TransactOpts, role, account) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_StaderConfig *StaderConfigTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.GrantRole(&_StaderConfig.TransactOpts, role, account) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _admin, address _ethDepositContract) returns() -func (_StaderConfig *StaderConfigTransactor) Initialize(opts *bind.TransactOpts, _admin common.Address, _ethDepositContract common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "initialize", _admin, _ethDepositContract) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _admin, address _ethDepositContract) returns() -func (_StaderConfig *StaderConfigSession) Initialize(_admin common.Address, _ethDepositContract common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.Initialize(&_StaderConfig.TransactOpts, _admin, _ethDepositContract) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _admin, address _ethDepositContract) returns() -func (_StaderConfig *StaderConfigTransactorSession) Initialize(_admin common.Address, _ethDepositContract common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.Initialize(&_StaderConfig.TransactOpts, _admin, _ethDepositContract) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address account) returns() -func (_StaderConfig *StaderConfigTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "renounceRole", role, account) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address account) returns() -func (_StaderConfig *StaderConfigSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.RenounceRole(&_StaderConfig.TransactOpts, role, account) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address account) returns() -func (_StaderConfig *StaderConfigTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.RenounceRole(&_StaderConfig.TransactOpts, role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_StaderConfig *StaderConfigTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "revokeRole", role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_StaderConfig *StaderConfigSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.RevokeRole(&_StaderConfig.TransactOpts, role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_StaderConfig *StaderConfigTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.RevokeRole(&_StaderConfig.TransactOpts, role, account) -} - -// UpdateAdmin is a paid mutator transaction binding the contract method 0xe2f273bd. -// -// Solidity: function updateAdmin(address _admin) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateAdmin(opts *bind.TransactOpts, _admin common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateAdmin", _admin) -} - -// UpdateAdmin is a paid mutator transaction binding the contract method 0xe2f273bd. -// -// Solidity: function updateAdmin(address _admin) returns() -func (_StaderConfig *StaderConfigSession) UpdateAdmin(_admin common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateAdmin(&_StaderConfig.TransactOpts, _admin) -} - -// UpdateAdmin is a paid mutator transaction binding the contract method 0xe2f273bd. -// -// Solidity: function updateAdmin(address _admin) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateAdmin(_admin common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateAdmin(&_StaderConfig.TransactOpts, _admin) -} - -// UpdateAuctionContract is a paid mutator transaction binding the contract method 0x121669f1. -// -// Solidity: function updateAuctionContract(address _auctionContract) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateAuctionContract(opts *bind.TransactOpts, _auctionContract common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateAuctionContract", _auctionContract) -} - -// UpdateAuctionContract is a paid mutator transaction binding the contract method 0x121669f1. -// -// Solidity: function updateAuctionContract(address _auctionContract) returns() -func (_StaderConfig *StaderConfigSession) UpdateAuctionContract(_auctionContract common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateAuctionContract(&_StaderConfig.TransactOpts, _auctionContract) -} - -// UpdateAuctionContract is a paid mutator transaction binding the contract method 0x121669f1. -// -// Solidity: function updateAuctionContract(address _auctionContract) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateAuctionContract(_auctionContract common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateAuctionContract(&_StaderConfig.TransactOpts, _auctionContract) -} - -// UpdateETHBalancePORFeedProxy is a paid mutator transaction binding the contract method 0x403efe7f. -// -// Solidity: function updateETHBalancePORFeedProxy(address _ethBalanceProxy) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateETHBalancePORFeedProxy(opts *bind.TransactOpts, _ethBalanceProxy common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateETHBalancePORFeedProxy", _ethBalanceProxy) -} - -// UpdateETHBalancePORFeedProxy is a paid mutator transaction binding the contract method 0x403efe7f. -// -// Solidity: function updateETHBalancePORFeedProxy(address _ethBalanceProxy) returns() -func (_StaderConfig *StaderConfigSession) UpdateETHBalancePORFeedProxy(_ethBalanceProxy common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateETHBalancePORFeedProxy(&_StaderConfig.TransactOpts, _ethBalanceProxy) -} - -// UpdateETHBalancePORFeedProxy is a paid mutator transaction binding the contract method 0x403efe7f. -// -// Solidity: function updateETHBalancePORFeedProxy(address _ethBalanceProxy) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateETHBalancePORFeedProxy(_ethBalanceProxy common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateETHBalancePORFeedProxy(&_StaderConfig.TransactOpts, _ethBalanceProxy) -} - -// UpdateETHXSupplyPORFeedProxy is a paid mutator transaction binding the contract method 0x72195b3e. -// -// Solidity: function updateETHXSupplyPORFeedProxy(address _ethXSupplyProxy) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateETHXSupplyPORFeedProxy(opts *bind.TransactOpts, _ethXSupplyProxy common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateETHXSupplyPORFeedProxy", _ethXSupplyProxy) -} - -// UpdateETHXSupplyPORFeedProxy is a paid mutator transaction binding the contract method 0x72195b3e. -// -// Solidity: function updateETHXSupplyPORFeedProxy(address _ethXSupplyProxy) returns() -func (_StaderConfig *StaderConfigSession) UpdateETHXSupplyPORFeedProxy(_ethXSupplyProxy common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateETHXSupplyPORFeedProxy(&_StaderConfig.TransactOpts, _ethXSupplyProxy) -} - -// UpdateETHXSupplyPORFeedProxy is a paid mutator transaction binding the contract method 0x72195b3e. -// -// Solidity: function updateETHXSupplyPORFeedProxy(address _ethXSupplyProxy) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateETHXSupplyPORFeedProxy(_ethXSupplyProxy common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateETHXSupplyPORFeedProxy(&_StaderConfig.TransactOpts, _ethXSupplyProxy) -} - -// UpdateETHxToken is a paid mutator transaction binding the contract method 0xb9894a11. -// -// Solidity: function updateETHxToken(address _ethX) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateETHxToken(opts *bind.TransactOpts, _ethX common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateETHxToken", _ethX) -} - -// UpdateETHxToken is a paid mutator transaction binding the contract method 0xb9894a11. -// -// Solidity: function updateETHxToken(address _ethX) returns() -func (_StaderConfig *StaderConfigSession) UpdateETHxToken(_ethX common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateETHxToken(&_StaderConfig.TransactOpts, _ethX) -} - -// UpdateETHxToken is a paid mutator transaction binding the contract method 0xb9894a11. -// -// Solidity: function updateETHxToken(address _ethX) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateETHxToken(_ethX common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateETHxToken(&_StaderConfig.TransactOpts, _ethX) -} - -// UpdateMaxDepositAmount is a paid mutator transaction binding the contract method 0x0945d42c. -// -// Solidity: function updateMaxDepositAmount(uint256 _maxDepositAmount) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateMaxDepositAmount(opts *bind.TransactOpts, _maxDepositAmount *big.Int) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateMaxDepositAmount", _maxDepositAmount) -} - -// UpdateMaxDepositAmount is a paid mutator transaction binding the contract method 0x0945d42c. -// -// Solidity: function updateMaxDepositAmount(uint256 _maxDepositAmount) returns() -func (_StaderConfig *StaderConfigSession) UpdateMaxDepositAmount(_maxDepositAmount *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateMaxDepositAmount(&_StaderConfig.TransactOpts, _maxDepositAmount) -} - -// UpdateMaxDepositAmount is a paid mutator transaction binding the contract method 0x0945d42c. -// -// Solidity: function updateMaxDepositAmount(uint256 _maxDepositAmount) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateMaxDepositAmount(_maxDepositAmount *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateMaxDepositAmount(&_StaderConfig.TransactOpts, _maxDepositAmount) -} - -// UpdateMaxWithdrawAmount is a paid mutator transaction binding the contract method 0x5b9cc8b1. -// -// Solidity: function updateMaxWithdrawAmount(uint256 _maxWithdrawAmount) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateMaxWithdrawAmount(opts *bind.TransactOpts, _maxWithdrawAmount *big.Int) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateMaxWithdrawAmount", _maxWithdrawAmount) -} - -// UpdateMaxWithdrawAmount is a paid mutator transaction binding the contract method 0x5b9cc8b1. -// -// Solidity: function updateMaxWithdrawAmount(uint256 _maxWithdrawAmount) returns() -func (_StaderConfig *StaderConfigSession) UpdateMaxWithdrawAmount(_maxWithdrawAmount *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateMaxWithdrawAmount(&_StaderConfig.TransactOpts, _maxWithdrawAmount) -} - -// UpdateMaxWithdrawAmount is a paid mutator transaction binding the contract method 0x5b9cc8b1. -// -// Solidity: function updateMaxWithdrawAmount(uint256 _maxWithdrawAmount) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateMaxWithdrawAmount(_maxWithdrawAmount *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateMaxWithdrawAmount(&_StaderConfig.TransactOpts, _maxWithdrawAmount) -} - -// UpdateMinBlockDelayToFinalizeWithdrawRequest is a paid mutator transaction binding the contract method 0x723b732c. -// -// Solidity: function updateMinBlockDelayToFinalizeWithdrawRequest(uint256 _minBlockDelay) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateMinBlockDelayToFinalizeWithdrawRequest(opts *bind.TransactOpts, _minBlockDelay *big.Int) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateMinBlockDelayToFinalizeWithdrawRequest", _minBlockDelay) -} - -// UpdateMinBlockDelayToFinalizeWithdrawRequest is a paid mutator transaction binding the contract method 0x723b732c. -// -// Solidity: function updateMinBlockDelayToFinalizeWithdrawRequest(uint256 _minBlockDelay) returns() -func (_StaderConfig *StaderConfigSession) UpdateMinBlockDelayToFinalizeWithdrawRequest(_minBlockDelay *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateMinBlockDelayToFinalizeWithdrawRequest(&_StaderConfig.TransactOpts, _minBlockDelay) -} - -// UpdateMinBlockDelayToFinalizeWithdrawRequest is a paid mutator transaction binding the contract method 0x723b732c. -// -// Solidity: function updateMinBlockDelayToFinalizeWithdrawRequest(uint256 _minBlockDelay) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateMinBlockDelayToFinalizeWithdrawRequest(_minBlockDelay *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateMinBlockDelayToFinalizeWithdrawRequest(&_StaderConfig.TransactOpts, _minBlockDelay) -} - -// UpdateMinDepositAmount is a paid mutator transaction binding the contract method 0x84780205. -// -// Solidity: function updateMinDepositAmount(uint256 _minDepositAmount) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateMinDepositAmount(opts *bind.TransactOpts, _minDepositAmount *big.Int) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateMinDepositAmount", _minDepositAmount) -} - -// UpdateMinDepositAmount is a paid mutator transaction binding the contract method 0x84780205. -// -// Solidity: function updateMinDepositAmount(uint256 _minDepositAmount) returns() -func (_StaderConfig *StaderConfigSession) UpdateMinDepositAmount(_minDepositAmount *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateMinDepositAmount(&_StaderConfig.TransactOpts, _minDepositAmount) -} - -// UpdateMinDepositAmount is a paid mutator transaction binding the contract method 0x84780205. -// -// Solidity: function updateMinDepositAmount(uint256 _minDepositAmount) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateMinDepositAmount(_minDepositAmount *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateMinDepositAmount(&_StaderConfig.TransactOpts, _minDepositAmount) -} - -// UpdateMinWithdrawAmount is a paid mutator transaction binding the contract method 0xff4f3546. -// -// Solidity: function updateMinWithdrawAmount(uint256 _minWithdrawAmount) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateMinWithdrawAmount(opts *bind.TransactOpts, _minWithdrawAmount *big.Int) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateMinWithdrawAmount", _minWithdrawAmount) -} - -// UpdateMinWithdrawAmount is a paid mutator transaction binding the contract method 0xff4f3546. -// -// Solidity: function updateMinWithdrawAmount(uint256 _minWithdrawAmount) returns() -func (_StaderConfig *StaderConfigSession) UpdateMinWithdrawAmount(_minWithdrawAmount *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateMinWithdrawAmount(&_StaderConfig.TransactOpts, _minWithdrawAmount) -} - -// UpdateMinWithdrawAmount is a paid mutator transaction binding the contract method 0xff4f3546. -// -// Solidity: function updateMinWithdrawAmount(uint256 _minWithdrawAmount) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateMinWithdrawAmount(_minWithdrawAmount *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateMinWithdrawAmount(&_StaderConfig.TransactOpts, _minWithdrawAmount) -} - -// UpdateNodeELRewardImplementation is a paid mutator transaction binding the contract method 0x5be6ce69. -// -// Solidity: function updateNodeELRewardImplementation(address _nodeELRewardVaultImpl) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateNodeELRewardImplementation(opts *bind.TransactOpts, _nodeELRewardVaultImpl common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateNodeELRewardImplementation", _nodeELRewardVaultImpl) -} - -// UpdateNodeELRewardImplementation is a paid mutator transaction binding the contract method 0x5be6ce69. -// -// Solidity: function updateNodeELRewardImplementation(address _nodeELRewardVaultImpl) returns() -func (_StaderConfig *StaderConfigSession) UpdateNodeELRewardImplementation(_nodeELRewardVaultImpl common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateNodeELRewardImplementation(&_StaderConfig.TransactOpts, _nodeELRewardVaultImpl) -} - -// UpdateNodeELRewardImplementation is a paid mutator transaction binding the contract method 0x5be6ce69. -// -// Solidity: function updateNodeELRewardImplementation(address _nodeELRewardVaultImpl) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateNodeELRewardImplementation(_nodeELRewardVaultImpl common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateNodeELRewardImplementation(&_StaderConfig.TransactOpts, _nodeELRewardVaultImpl) -} - -// UpdateOperatorRewardsCollector is a paid mutator transaction binding the contract method 0x1de03db8. -// -// Solidity: function updateOperatorRewardsCollector(address _operatorRewardsCollector) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateOperatorRewardsCollector(opts *bind.TransactOpts, _operatorRewardsCollector common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateOperatorRewardsCollector", _operatorRewardsCollector) -} - -// UpdateOperatorRewardsCollector is a paid mutator transaction binding the contract method 0x1de03db8. -// -// Solidity: function updateOperatorRewardsCollector(address _operatorRewardsCollector) returns() -func (_StaderConfig *StaderConfigSession) UpdateOperatorRewardsCollector(_operatorRewardsCollector common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateOperatorRewardsCollector(&_StaderConfig.TransactOpts, _operatorRewardsCollector) -} - -// UpdateOperatorRewardsCollector is a paid mutator transaction binding the contract method 0x1de03db8. -// -// Solidity: function updateOperatorRewardsCollector(address _operatorRewardsCollector) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateOperatorRewardsCollector(_operatorRewardsCollector common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateOperatorRewardsCollector(&_StaderConfig.TransactOpts, _operatorRewardsCollector) -} - -// UpdatePenaltyContract is a paid mutator transaction binding the contract method 0xf83c7787. -// -// Solidity: function updatePenaltyContract(address _penaltyContract) returns() -func (_StaderConfig *StaderConfigTransactor) UpdatePenaltyContract(opts *bind.TransactOpts, _penaltyContract common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updatePenaltyContract", _penaltyContract) -} - -// UpdatePenaltyContract is a paid mutator transaction binding the contract method 0xf83c7787. -// -// Solidity: function updatePenaltyContract(address _penaltyContract) returns() -func (_StaderConfig *StaderConfigSession) UpdatePenaltyContract(_penaltyContract common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePenaltyContract(&_StaderConfig.TransactOpts, _penaltyContract) -} - -// UpdatePenaltyContract is a paid mutator transaction binding the contract method 0xf83c7787. -// -// Solidity: function updatePenaltyContract(address _penaltyContract) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdatePenaltyContract(_penaltyContract common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePenaltyContract(&_StaderConfig.TransactOpts, _penaltyContract) -} - -// UpdatePermissionedNodeRegistry is a paid mutator transaction binding the contract method 0x3c128dad. -// -// Solidity: function updatePermissionedNodeRegistry(address _permissionedNodeRegistry) returns() -func (_StaderConfig *StaderConfigTransactor) UpdatePermissionedNodeRegistry(opts *bind.TransactOpts, _permissionedNodeRegistry common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updatePermissionedNodeRegistry", _permissionedNodeRegistry) -} - -// UpdatePermissionedNodeRegistry is a paid mutator transaction binding the contract method 0x3c128dad. -// -// Solidity: function updatePermissionedNodeRegistry(address _permissionedNodeRegistry) returns() -func (_StaderConfig *StaderConfigSession) UpdatePermissionedNodeRegistry(_permissionedNodeRegistry common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePermissionedNodeRegistry(&_StaderConfig.TransactOpts, _permissionedNodeRegistry) -} - -// UpdatePermissionedNodeRegistry is a paid mutator transaction binding the contract method 0x3c128dad. -// -// Solidity: function updatePermissionedNodeRegistry(address _permissionedNodeRegistry) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionedNodeRegistry(_permissionedNodeRegistry common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePermissionedNodeRegistry(&_StaderConfig.TransactOpts, _permissionedNodeRegistry) -} - -// UpdatePermissionedPool is a paid mutator transaction binding the contract method 0xb549dbff. -// -// Solidity: function updatePermissionedPool(address _permissionedPool) returns() -func (_StaderConfig *StaderConfigTransactor) UpdatePermissionedPool(opts *bind.TransactOpts, _permissionedPool common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updatePermissionedPool", _permissionedPool) -} - -// UpdatePermissionedPool is a paid mutator transaction binding the contract method 0xb549dbff. -// -// Solidity: function updatePermissionedPool(address _permissionedPool) returns() -func (_StaderConfig *StaderConfigSession) UpdatePermissionedPool(_permissionedPool common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePermissionedPool(&_StaderConfig.TransactOpts, _permissionedPool) -} - -// UpdatePermissionedPool is a paid mutator transaction binding the contract method 0xb549dbff. -// -// Solidity: function updatePermissionedPool(address _permissionedPool) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionedPool(_permissionedPool common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePermissionedPool(&_StaderConfig.TransactOpts, _permissionedPool) -} - -// UpdatePermissionedSocializingPool is a paid mutator transaction binding the contract method 0xe4f59b6c. -// -// Solidity: function updatePermissionedSocializingPool(address _permissionedSocializePool) returns() -func (_StaderConfig *StaderConfigTransactor) UpdatePermissionedSocializingPool(opts *bind.TransactOpts, _permissionedSocializePool common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updatePermissionedSocializingPool", _permissionedSocializePool) -} - -// UpdatePermissionedSocializingPool is a paid mutator transaction binding the contract method 0xe4f59b6c. -// -// Solidity: function updatePermissionedSocializingPool(address _permissionedSocializePool) returns() -func (_StaderConfig *StaderConfigSession) UpdatePermissionedSocializingPool(_permissionedSocializePool common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePermissionedSocializingPool(&_StaderConfig.TransactOpts, _permissionedSocializePool) -} - -// UpdatePermissionedSocializingPool is a paid mutator transaction binding the contract method 0xe4f59b6c. -// -// Solidity: function updatePermissionedSocializingPool(address _permissionedSocializePool) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionedSocializingPool(_permissionedSocializePool common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePermissionedSocializingPool(&_StaderConfig.TransactOpts, _permissionedSocializePool) -} - -// UpdatePermissionlessNodeRegistry is a paid mutator transaction binding the contract method 0xf63718e7. -// -// Solidity: function updatePermissionlessNodeRegistry(address _permissionlessNodeRegistry) returns() -func (_StaderConfig *StaderConfigTransactor) UpdatePermissionlessNodeRegistry(opts *bind.TransactOpts, _permissionlessNodeRegistry common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updatePermissionlessNodeRegistry", _permissionlessNodeRegistry) -} - -// UpdatePermissionlessNodeRegistry is a paid mutator transaction binding the contract method 0xf63718e7. -// -// Solidity: function updatePermissionlessNodeRegistry(address _permissionlessNodeRegistry) returns() -func (_StaderConfig *StaderConfigSession) UpdatePermissionlessNodeRegistry(_permissionlessNodeRegistry common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePermissionlessNodeRegistry(&_StaderConfig.TransactOpts, _permissionlessNodeRegistry) -} - -// UpdatePermissionlessNodeRegistry is a paid mutator transaction binding the contract method 0xf63718e7. -// -// Solidity: function updatePermissionlessNodeRegistry(address _permissionlessNodeRegistry) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionlessNodeRegistry(_permissionlessNodeRegistry common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePermissionlessNodeRegistry(&_StaderConfig.TransactOpts, _permissionlessNodeRegistry) -} - -// UpdatePermissionlessPool is a paid mutator transaction binding the contract method 0xc20573c1. -// -// Solidity: function updatePermissionlessPool(address _permissionlessPool) returns() -func (_StaderConfig *StaderConfigTransactor) UpdatePermissionlessPool(opts *bind.TransactOpts, _permissionlessPool common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updatePermissionlessPool", _permissionlessPool) -} - -// UpdatePermissionlessPool is a paid mutator transaction binding the contract method 0xc20573c1. -// -// Solidity: function updatePermissionlessPool(address _permissionlessPool) returns() -func (_StaderConfig *StaderConfigSession) UpdatePermissionlessPool(_permissionlessPool common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePermissionlessPool(&_StaderConfig.TransactOpts, _permissionlessPool) -} - -// UpdatePermissionlessPool is a paid mutator transaction binding the contract method 0xc20573c1. -// -// Solidity: function updatePermissionlessPool(address _permissionlessPool) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionlessPool(_permissionlessPool common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePermissionlessPool(&_StaderConfig.TransactOpts, _permissionlessPool) -} - -// UpdatePermissionlessSocializingPool is a paid mutator transaction binding the contract method 0x1049e32e. -// -// Solidity: function updatePermissionlessSocializingPool(address _permissionlessSocializePool) returns() -func (_StaderConfig *StaderConfigTransactor) UpdatePermissionlessSocializingPool(opts *bind.TransactOpts, _permissionlessSocializePool common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updatePermissionlessSocializingPool", _permissionlessSocializePool) -} - -// UpdatePermissionlessSocializingPool is a paid mutator transaction binding the contract method 0x1049e32e. -// -// Solidity: function updatePermissionlessSocializingPool(address _permissionlessSocializePool) returns() -func (_StaderConfig *StaderConfigSession) UpdatePermissionlessSocializingPool(_permissionlessSocializePool common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePermissionlessSocializingPool(&_StaderConfig.TransactOpts, _permissionlessSocializePool) -} - -// UpdatePermissionlessSocializingPool is a paid mutator transaction binding the contract method 0x1049e32e. -// -// Solidity: function updatePermissionlessSocializingPool(address _permissionlessSocializePool) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionlessSocializingPool(_permissionlessSocializePool common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePermissionlessSocializingPool(&_StaderConfig.TransactOpts, _permissionlessSocializePool) -} - -// UpdatePoolSelector is a paid mutator transaction binding the contract method 0x047cb439. -// -// Solidity: function updatePoolSelector(address _poolSelector) returns() -func (_StaderConfig *StaderConfigTransactor) UpdatePoolSelector(opts *bind.TransactOpts, _poolSelector common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updatePoolSelector", _poolSelector) -} - -// UpdatePoolSelector is a paid mutator transaction binding the contract method 0x047cb439. -// -// Solidity: function updatePoolSelector(address _poolSelector) returns() -func (_StaderConfig *StaderConfigSession) UpdatePoolSelector(_poolSelector common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePoolSelector(&_StaderConfig.TransactOpts, _poolSelector) -} - -// UpdatePoolSelector is a paid mutator transaction binding the contract method 0x047cb439. -// -// Solidity: function updatePoolSelector(address _poolSelector) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdatePoolSelector(_poolSelector common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePoolSelector(&_StaderConfig.TransactOpts, _poolSelector) -} - -// UpdatePoolUtils is a paid mutator transaction binding the contract method 0x2651644c. -// -// Solidity: function updatePoolUtils(address _poolUtils) returns() -func (_StaderConfig *StaderConfigTransactor) UpdatePoolUtils(opts *bind.TransactOpts, _poolUtils common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updatePoolUtils", _poolUtils) -} - -// UpdatePoolUtils is a paid mutator transaction binding the contract method 0x2651644c. -// -// Solidity: function updatePoolUtils(address _poolUtils) returns() -func (_StaderConfig *StaderConfigSession) UpdatePoolUtils(_poolUtils common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePoolUtils(&_StaderConfig.TransactOpts, _poolUtils) -} - -// UpdatePoolUtils is a paid mutator transaction binding the contract method 0x2651644c. -// -// Solidity: function updatePoolUtils(address _poolUtils) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdatePoolUtils(_poolUtils common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdatePoolUtils(&_StaderConfig.TransactOpts, _poolUtils) -} - -// UpdateRewardsThreshold is a paid mutator transaction binding the contract method 0x572c686a. -// -// Solidity: function updateRewardsThreshold(uint256 _rewardsThreshold) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateRewardsThreshold(opts *bind.TransactOpts, _rewardsThreshold *big.Int) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateRewardsThreshold", _rewardsThreshold) -} - -// UpdateRewardsThreshold is a paid mutator transaction binding the contract method 0x572c686a. -// -// Solidity: function updateRewardsThreshold(uint256 _rewardsThreshold) returns() -func (_StaderConfig *StaderConfigSession) UpdateRewardsThreshold(_rewardsThreshold *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateRewardsThreshold(&_StaderConfig.TransactOpts, _rewardsThreshold) -} - -// UpdateRewardsThreshold is a paid mutator transaction binding the contract method 0x572c686a. -// -// Solidity: function updateRewardsThreshold(uint256 _rewardsThreshold) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateRewardsThreshold(_rewardsThreshold *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateRewardsThreshold(&_StaderConfig.TransactOpts, _rewardsThreshold) -} - -// UpdateSDCollateral is a paid mutator transaction binding the contract method 0x34d17d74. -// -// Solidity: function updateSDCollateral(address _sdCollateral) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateSDCollateral(opts *bind.TransactOpts, _sdCollateral common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateSDCollateral", _sdCollateral) -} - -// UpdateSDCollateral is a paid mutator transaction binding the contract method 0x34d17d74. -// -// Solidity: function updateSDCollateral(address _sdCollateral) returns() -func (_StaderConfig *StaderConfigSession) UpdateSDCollateral(_sdCollateral common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateSDCollateral(&_StaderConfig.TransactOpts, _sdCollateral) -} - -// UpdateSDCollateral is a paid mutator transaction binding the contract method 0x34d17d74. -// -// Solidity: function updateSDCollateral(address _sdCollateral) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateSDCollateral(_sdCollateral common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateSDCollateral(&_StaderConfig.TransactOpts, _sdCollateral) -} - -// UpdateSocializingPoolCycleDuration is a paid mutator transaction binding the contract method 0x6870bb2b. -// -// Solidity: function updateSocializingPoolCycleDuration(uint256 _socializingPoolCycleDuration) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateSocializingPoolCycleDuration(opts *bind.TransactOpts, _socializingPoolCycleDuration *big.Int) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateSocializingPoolCycleDuration", _socializingPoolCycleDuration) -} - -// UpdateSocializingPoolCycleDuration is a paid mutator transaction binding the contract method 0x6870bb2b. -// -// Solidity: function updateSocializingPoolCycleDuration(uint256 _socializingPoolCycleDuration) returns() -func (_StaderConfig *StaderConfigSession) UpdateSocializingPoolCycleDuration(_socializingPoolCycleDuration *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateSocializingPoolCycleDuration(&_StaderConfig.TransactOpts, _socializingPoolCycleDuration) -} - -// UpdateSocializingPoolCycleDuration is a paid mutator transaction binding the contract method 0x6870bb2b. -// -// Solidity: function updateSocializingPoolCycleDuration(uint256 _socializingPoolCycleDuration) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateSocializingPoolCycleDuration(_socializingPoolCycleDuration *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateSocializingPoolCycleDuration(&_StaderConfig.TransactOpts, _socializingPoolCycleDuration) -} - -// UpdateSocializingPoolOptInCoolingPeriod is a paid mutator transaction binding the contract method 0x8a4cfb58. -// -// Solidity: function updateSocializingPoolOptInCoolingPeriod(uint256 _SocializePoolOptInCoolingPeriod) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateSocializingPoolOptInCoolingPeriod(opts *bind.TransactOpts, _SocializePoolOptInCoolingPeriod *big.Int) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateSocializingPoolOptInCoolingPeriod", _SocializePoolOptInCoolingPeriod) -} - -// UpdateSocializingPoolOptInCoolingPeriod is a paid mutator transaction binding the contract method 0x8a4cfb58. -// -// Solidity: function updateSocializingPoolOptInCoolingPeriod(uint256 _SocializePoolOptInCoolingPeriod) returns() -func (_StaderConfig *StaderConfigSession) UpdateSocializingPoolOptInCoolingPeriod(_SocializePoolOptInCoolingPeriod *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateSocializingPoolOptInCoolingPeriod(&_StaderConfig.TransactOpts, _SocializePoolOptInCoolingPeriod) -} - -// UpdateSocializingPoolOptInCoolingPeriod is a paid mutator transaction binding the contract method 0x8a4cfb58. -// -// Solidity: function updateSocializingPoolOptInCoolingPeriod(uint256 _SocializePoolOptInCoolingPeriod) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateSocializingPoolOptInCoolingPeriod(_SocializePoolOptInCoolingPeriod *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateSocializingPoolOptInCoolingPeriod(&_StaderConfig.TransactOpts, _SocializePoolOptInCoolingPeriod) -} - -// UpdateStaderInsuranceFund is a paid mutator transaction binding the contract method 0xaa2f56c7. -// -// Solidity: function updateStaderInsuranceFund(address _staderInsuranceFund) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateStaderInsuranceFund(opts *bind.TransactOpts, _staderInsuranceFund common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateStaderInsuranceFund", _staderInsuranceFund) -} - -// UpdateStaderInsuranceFund is a paid mutator transaction binding the contract method 0xaa2f56c7. -// -// Solidity: function updateStaderInsuranceFund(address _staderInsuranceFund) returns() -func (_StaderConfig *StaderConfigSession) UpdateStaderInsuranceFund(_staderInsuranceFund common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateStaderInsuranceFund(&_StaderConfig.TransactOpts, _staderInsuranceFund) -} - -// UpdateStaderInsuranceFund is a paid mutator transaction binding the contract method 0xaa2f56c7. -// -// Solidity: function updateStaderInsuranceFund(address _staderInsuranceFund) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateStaderInsuranceFund(_staderInsuranceFund common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateStaderInsuranceFund(&_StaderConfig.TransactOpts, _staderInsuranceFund) -} - -// UpdateStaderOracle is a paid mutator transaction binding the contract method 0xca78360c. -// -// Solidity: function updateStaderOracle(address _staderOracle) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateStaderOracle(opts *bind.TransactOpts, _staderOracle common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateStaderOracle", _staderOracle) -} - -// UpdateStaderOracle is a paid mutator transaction binding the contract method 0xca78360c. -// -// Solidity: function updateStaderOracle(address _staderOracle) returns() -func (_StaderConfig *StaderConfigSession) UpdateStaderOracle(_staderOracle common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateStaderOracle(&_StaderConfig.TransactOpts, _staderOracle) -} - -// UpdateStaderOracle is a paid mutator transaction binding the contract method 0xca78360c. -// -// Solidity: function updateStaderOracle(address _staderOracle) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateStaderOracle(_staderOracle common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateStaderOracle(&_StaderConfig.TransactOpts, _staderOracle) -} - -// UpdateStaderToken is a paid mutator transaction binding the contract method 0x83148593. -// -// Solidity: function updateStaderToken(address _staderToken) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateStaderToken(opts *bind.TransactOpts, _staderToken common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateStaderToken", _staderToken) -} - -// UpdateStaderToken is a paid mutator transaction binding the contract method 0x83148593. -// -// Solidity: function updateStaderToken(address _staderToken) returns() -func (_StaderConfig *StaderConfigSession) UpdateStaderToken(_staderToken common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateStaderToken(&_StaderConfig.TransactOpts, _staderToken) -} - -// UpdateStaderToken is a paid mutator transaction binding the contract method 0x83148593. -// -// Solidity: function updateStaderToken(address _staderToken) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateStaderToken(_staderToken common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateStaderToken(&_StaderConfig.TransactOpts, _staderToken) -} - -// UpdateStaderTreasury is a paid mutator transaction binding the contract method 0x7b4cd7ec. -// -// Solidity: function updateStaderTreasury(address _staderTreasury) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateStaderTreasury(opts *bind.TransactOpts, _staderTreasury common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateStaderTreasury", _staderTreasury) -} - -// UpdateStaderTreasury is a paid mutator transaction binding the contract method 0x7b4cd7ec. -// -// Solidity: function updateStaderTreasury(address _staderTreasury) returns() -func (_StaderConfig *StaderConfigSession) UpdateStaderTreasury(_staderTreasury common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateStaderTreasury(&_StaderConfig.TransactOpts, _staderTreasury) -} - -// UpdateStaderTreasury is a paid mutator transaction binding the contract method 0x7b4cd7ec. -// -// Solidity: function updateStaderTreasury(address _staderTreasury) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateStaderTreasury(_staderTreasury common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateStaderTreasury(&_StaderConfig.TransactOpts, _staderTreasury) -} - -// UpdateStakePoolManager is a paid mutator transaction binding the contract method 0x368f9d17. -// -// Solidity: function updateStakePoolManager(address _stakePoolManager) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateStakePoolManager(opts *bind.TransactOpts, _stakePoolManager common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateStakePoolManager", _stakePoolManager) -} - -// UpdateStakePoolManager is a paid mutator transaction binding the contract method 0x368f9d17. -// -// Solidity: function updateStakePoolManager(address _stakePoolManager) returns() -func (_StaderConfig *StaderConfigSession) UpdateStakePoolManager(_stakePoolManager common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateStakePoolManager(&_StaderConfig.TransactOpts, _stakePoolManager) -} - -// UpdateStakePoolManager is a paid mutator transaction binding the contract method 0x368f9d17. -// -// Solidity: function updateStakePoolManager(address _stakePoolManager) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateStakePoolManager(_stakePoolManager common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateStakePoolManager(&_StaderConfig.TransactOpts, _stakePoolManager) -} - -// UpdateUserWithdrawManager is a paid mutator transaction binding the contract method 0x088ee72d. -// -// Solidity: function updateUserWithdrawManager(address _userWithdrawManager) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateUserWithdrawManager(opts *bind.TransactOpts, _userWithdrawManager common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateUserWithdrawManager", _userWithdrawManager) -} - -// UpdateUserWithdrawManager is a paid mutator transaction binding the contract method 0x088ee72d. -// -// Solidity: function updateUserWithdrawManager(address _userWithdrawManager) returns() -func (_StaderConfig *StaderConfigSession) UpdateUserWithdrawManager(_userWithdrawManager common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateUserWithdrawManager(&_StaderConfig.TransactOpts, _userWithdrawManager) -} - -// UpdateUserWithdrawManager is a paid mutator transaction binding the contract method 0x088ee72d. -// -// Solidity: function updateUserWithdrawManager(address _userWithdrawManager) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateUserWithdrawManager(_userWithdrawManager common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateUserWithdrawManager(&_StaderConfig.TransactOpts, _userWithdrawManager) -} - -// UpdateValidatorWithdrawalVaultImplementation is a paid mutator transaction binding the contract method 0x5b5961fc. -// -// Solidity: function updateValidatorWithdrawalVaultImplementation(address _validatorWithdrawalVaultImpl) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateValidatorWithdrawalVaultImplementation(opts *bind.TransactOpts, _validatorWithdrawalVaultImpl common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateValidatorWithdrawalVaultImplementation", _validatorWithdrawalVaultImpl) -} - -// UpdateValidatorWithdrawalVaultImplementation is a paid mutator transaction binding the contract method 0x5b5961fc. -// -// Solidity: function updateValidatorWithdrawalVaultImplementation(address _validatorWithdrawalVaultImpl) returns() -func (_StaderConfig *StaderConfigSession) UpdateValidatorWithdrawalVaultImplementation(_validatorWithdrawalVaultImpl common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateValidatorWithdrawalVaultImplementation(&_StaderConfig.TransactOpts, _validatorWithdrawalVaultImpl) -} - -// UpdateValidatorWithdrawalVaultImplementation is a paid mutator transaction binding the contract method 0x5b5961fc. -// -// Solidity: function updateValidatorWithdrawalVaultImplementation(address _validatorWithdrawalVaultImpl) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateValidatorWithdrawalVaultImplementation(_validatorWithdrawalVaultImpl common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateValidatorWithdrawalVaultImplementation(&_StaderConfig.TransactOpts, _validatorWithdrawalVaultImpl) -} - -// UpdateVaultFactory is a paid mutator transaction binding the contract method 0x98c35927. -// -// Solidity: function updateVaultFactory(address _vaultFactory) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateVaultFactory(opts *bind.TransactOpts, _vaultFactory common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateVaultFactory", _vaultFactory) -} - -// UpdateVaultFactory is a paid mutator transaction binding the contract method 0x98c35927. -// -// Solidity: function updateVaultFactory(address _vaultFactory) returns() -func (_StaderConfig *StaderConfigSession) UpdateVaultFactory(_vaultFactory common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateVaultFactory(&_StaderConfig.TransactOpts, _vaultFactory) -} - -// UpdateVaultFactory is a paid mutator transaction binding the contract method 0x98c35927. -// -// Solidity: function updateVaultFactory(address _vaultFactory) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateVaultFactory(_vaultFactory common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateVaultFactory(&_StaderConfig.TransactOpts, _vaultFactory) -} - -// UpdateWithdrawnKeysBatchSize is a paid mutator transaction binding the contract method 0xbbb99bb5. -// -// Solidity: function updateWithdrawnKeysBatchSize(uint256 _withdrawnKeysBatchSize) returns() -func (_StaderConfig *StaderConfigTransactor) UpdateWithdrawnKeysBatchSize(opts *bind.TransactOpts, _withdrawnKeysBatchSize *big.Int) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "updateWithdrawnKeysBatchSize", _withdrawnKeysBatchSize) -} - -// UpdateWithdrawnKeysBatchSize is a paid mutator transaction binding the contract method 0xbbb99bb5. -// -// Solidity: function updateWithdrawnKeysBatchSize(uint256 _withdrawnKeysBatchSize) returns() -func (_StaderConfig *StaderConfigSession) UpdateWithdrawnKeysBatchSize(_withdrawnKeysBatchSize *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateWithdrawnKeysBatchSize(&_StaderConfig.TransactOpts, _withdrawnKeysBatchSize) -} - -// UpdateWithdrawnKeysBatchSize is a paid mutator transaction binding the contract method 0xbbb99bb5. -// -// Solidity: function updateWithdrawnKeysBatchSize(uint256 _withdrawnKeysBatchSize) returns() -func (_StaderConfig *StaderConfigTransactorSession) UpdateWithdrawnKeysBatchSize(_withdrawnKeysBatchSize *big.Int) (*types.Transaction, error) { - return _StaderConfig.Contract.UpdateWithdrawnKeysBatchSize(&_StaderConfig.TransactOpts, _withdrawnKeysBatchSize) -} - -// StaderConfigInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the StaderConfig contract. -type StaderConfigInitializedIterator struct { - Event *StaderConfigInitialized // 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 *StaderConfigInitializedIterator) 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(StaderConfigInitialized) - if err := 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(StaderConfigInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *StaderConfigInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StaderConfigInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StaderConfigInitialized represents a Initialized event raised by the StaderConfig contract. -type StaderConfigInitialized 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 (_StaderConfig *StaderConfigFilterer) FilterInitialized(opts *bind.FilterOpts) (*StaderConfigInitializedIterator, error) { - - logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &StaderConfigInitializedIterator{contract: _StaderConfig.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 (_StaderConfig *StaderConfigFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *StaderConfigInitialized) (event.Subscription, error) { - - logs, sub, err := _StaderConfig.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(StaderConfigInitialized) - if err := _StaderConfig.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 (_StaderConfig *StaderConfigFilterer) ParseInitialized(log types.Log) (*StaderConfigInitialized, error) { - event := new(StaderConfigInitialized) - if err := _StaderConfig.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StaderConfigRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the StaderConfig contract. -type StaderConfigRoleAdminChangedIterator struct { - Event *StaderConfigRoleAdminChanged // 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 *StaderConfigRoleAdminChangedIterator) 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(StaderConfigRoleAdminChanged) - if err := 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(StaderConfigRoleAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *StaderConfigRoleAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StaderConfigRoleAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StaderConfigRoleAdminChanged represents a RoleAdminChanged event raised by the StaderConfig contract. -type StaderConfigRoleAdminChanged struct { - Role [32]byte - PreviousAdminRole [32]byte - NewAdminRole [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_StaderConfig *StaderConfigFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*StaderConfigRoleAdminChangedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var previousAdminRoleRule []interface{} - for _, previousAdminRoleItem := range previousAdminRole { - previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) - } - var newAdminRoleRule []interface{} - for _, newAdminRoleItem := range newAdminRole { - newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) - } - - logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) - if err != nil { - return nil, err - } - return &StaderConfigRoleAdminChangedIterator{contract: _StaderConfig.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil -} - -// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_StaderConfig *StaderConfigFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *StaderConfigRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var previousAdminRoleRule []interface{} - for _, previousAdminRoleItem := range previousAdminRole { - previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) - } - var newAdminRoleRule []interface{} - for _, newAdminRoleItem := range newAdminRole { - newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) - } - - logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) - 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(StaderConfigRoleAdminChanged) - if err := _StaderConfig.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_StaderConfig *StaderConfigFilterer) ParseRoleAdminChanged(log types.Log) (*StaderConfigRoleAdminChanged, error) { - event := new(StaderConfigRoleAdminChanged) - if err := _StaderConfig.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StaderConfigRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the StaderConfig contract. -type StaderConfigRoleGrantedIterator struct { - Event *StaderConfigRoleGranted // 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 *StaderConfigRoleGrantedIterator) 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(StaderConfigRoleGranted) - if err := 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(StaderConfigRoleGranted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *StaderConfigRoleGrantedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StaderConfigRoleGrantedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StaderConfigRoleGranted represents a RoleGranted event raised by the StaderConfig contract. -type StaderConfigRoleGranted struct { - Role [32]byte - Account common.Address - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_StaderConfig *StaderConfigFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*StaderConfigRoleGrantedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return &StaderConfigRoleGrantedIterator{contract: _StaderConfig.contract, event: "RoleGranted", logs: logs, sub: sub}, nil -} - -// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_StaderConfig *StaderConfigFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *StaderConfigRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, 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(StaderConfigRoleGranted) - if err := _StaderConfig.contract.UnpackLog(event, "RoleGranted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_StaderConfig *StaderConfigFilterer) ParseRoleGranted(log types.Log) (*StaderConfigRoleGranted, error) { - event := new(StaderConfigRoleGranted) - if err := _StaderConfig.contract.UnpackLog(event, "RoleGranted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StaderConfigRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the StaderConfig contract. -type StaderConfigRoleRevokedIterator struct { - Event *StaderConfigRoleRevoked // 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 *StaderConfigRoleRevokedIterator) 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(StaderConfigRoleRevoked) - if err := 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(StaderConfigRoleRevoked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *StaderConfigRoleRevokedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StaderConfigRoleRevokedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StaderConfigRoleRevoked represents a RoleRevoked event raised by the StaderConfig contract. -type StaderConfigRoleRevoked struct { - Role [32]byte - Account common.Address - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_StaderConfig *StaderConfigFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*StaderConfigRoleRevokedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return &StaderConfigRoleRevokedIterator{contract: _StaderConfig.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil -} - -// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_StaderConfig *StaderConfigFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *StaderConfigRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, 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(StaderConfigRoleRevoked) - if err := _StaderConfig.contract.UnpackLog(event, "RoleRevoked", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_StaderConfig *StaderConfigFilterer) ParseRoleRevoked(log types.Log) (*StaderConfigRoleRevoked, error) { - event := new(StaderConfigRoleRevoked) - if err := _StaderConfig.contract.UnpackLog(event, "RoleRevoked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StaderConfigSetAccountIterator is returned from FilterSetAccount and is used to iterate over the raw logs and unpacked data for SetAccount events raised by the StaderConfig contract. -type StaderConfigSetAccountIterator struct { - Event *StaderConfigSetAccount // 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 *StaderConfigSetAccountIterator) 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(StaderConfigSetAccount) - if err := 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(StaderConfigSetAccount) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *StaderConfigSetAccountIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StaderConfigSetAccountIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StaderConfigSetAccount represents a SetAccount event raised by the StaderConfig contract. -type StaderConfigSetAccount struct { - Key [32]byte - NewAddress common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSetAccount is a free log retrieval operation binding the contract event 0xcbdd341876786c7241ad12a5ce5ea46739a4ce7b1587d0c216dfa655a98e50a6. -// -// Solidity: event SetAccount(bytes32 key, address newAddress) -func (_StaderConfig *StaderConfigFilterer) FilterSetAccount(opts *bind.FilterOpts) (*StaderConfigSetAccountIterator, error) { - - logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "SetAccount") - if err != nil { - return nil, err - } - return &StaderConfigSetAccountIterator{contract: _StaderConfig.contract, event: "SetAccount", logs: logs, sub: sub}, nil -} - -// WatchSetAccount is a free log subscription operation binding the contract event 0xcbdd341876786c7241ad12a5ce5ea46739a4ce7b1587d0c216dfa655a98e50a6. -// -// Solidity: event SetAccount(bytes32 key, address newAddress) -func (_StaderConfig *StaderConfigFilterer) WatchSetAccount(opts *bind.WatchOpts, sink chan<- *StaderConfigSetAccount) (event.Subscription, error) { - - logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "SetAccount") - 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(StaderConfigSetAccount) - if err := _StaderConfig.contract.UnpackLog(event, "SetAccount", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSetAccount is a log parse operation binding the contract event 0xcbdd341876786c7241ad12a5ce5ea46739a4ce7b1587d0c216dfa655a98e50a6. -// -// Solidity: event SetAccount(bytes32 key, address newAddress) -func (_StaderConfig *StaderConfigFilterer) ParseSetAccount(log types.Log) (*StaderConfigSetAccount, error) { - event := new(StaderConfigSetAccount) - if err := _StaderConfig.contract.UnpackLog(event, "SetAccount", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StaderConfigSetConstantIterator is returned from FilterSetConstant and is used to iterate over the raw logs and unpacked data for SetConstant events raised by the StaderConfig contract. -type StaderConfigSetConstantIterator struct { - Event *StaderConfigSetConstant // 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 *StaderConfigSetConstantIterator) 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(StaderConfigSetConstant) - if err := 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(StaderConfigSetConstant) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *StaderConfigSetConstantIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StaderConfigSetConstantIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StaderConfigSetConstant represents a SetConstant event raised by the StaderConfig contract. -type StaderConfigSetConstant struct { - Key [32]byte - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSetConstant is a free log retrieval operation binding the contract event 0x9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c46581630. -// -// Solidity: event SetConstant(bytes32 key, uint256 amount) -func (_StaderConfig *StaderConfigFilterer) FilterSetConstant(opts *bind.FilterOpts) (*StaderConfigSetConstantIterator, error) { - - logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "SetConstant") - if err != nil { - return nil, err - } - return &StaderConfigSetConstantIterator{contract: _StaderConfig.contract, event: "SetConstant", logs: logs, sub: sub}, nil -} - -// WatchSetConstant is a free log subscription operation binding the contract event 0x9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c46581630. -// -// Solidity: event SetConstant(bytes32 key, uint256 amount) -func (_StaderConfig *StaderConfigFilterer) WatchSetConstant(opts *bind.WatchOpts, sink chan<- *StaderConfigSetConstant) (event.Subscription, error) { - - logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "SetConstant") - 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(StaderConfigSetConstant) - if err := _StaderConfig.contract.UnpackLog(event, "SetConstant", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSetConstant is a log parse operation binding the contract event 0x9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c46581630. -// -// Solidity: event SetConstant(bytes32 key, uint256 amount) -func (_StaderConfig *StaderConfigFilterer) ParseSetConstant(log types.Log) (*StaderConfigSetConstant, error) { - event := new(StaderConfigSetConstant) - if err := _StaderConfig.contract.UnpackLog(event, "SetConstant", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StaderConfigSetContractIterator is returned from FilterSetContract and is used to iterate over the raw logs and unpacked data for SetContract events raised by the StaderConfig contract. -type StaderConfigSetContractIterator struct { - Event *StaderConfigSetContract // 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 *StaderConfigSetContractIterator) 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(StaderConfigSetContract) - if err := 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(StaderConfigSetContract) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *StaderConfigSetContractIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StaderConfigSetContractIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StaderConfigSetContract represents a SetContract event raised by the StaderConfig contract. -type StaderConfigSetContract struct { - Key [32]byte - NewAddress common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSetContract is a free log retrieval operation binding the contract event 0x5de40a806536a2029221dac2c8887ac9f11952fcc1ed3d7cfb4476dd5259b740. -// -// Solidity: event SetContract(bytes32 key, address newAddress) -func (_StaderConfig *StaderConfigFilterer) FilterSetContract(opts *bind.FilterOpts) (*StaderConfigSetContractIterator, error) { - - logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "SetContract") - if err != nil { - return nil, err - } - return &StaderConfigSetContractIterator{contract: _StaderConfig.contract, event: "SetContract", logs: logs, sub: sub}, nil -} - -// WatchSetContract is a free log subscription operation binding the contract event 0x5de40a806536a2029221dac2c8887ac9f11952fcc1ed3d7cfb4476dd5259b740. -// -// Solidity: event SetContract(bytes32 key, address newAddress) -func (_StaderConfig *StaderConfigFilterer) WatchSetContract(opts *bind.WatchOpts, sink chan<- *StaderConfigSetContract) (event.Subscription, error) { - - logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "SetContract") - 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(StaderConfigSetContract) - if err := _StaderConfig.contract.UnpackLog(event, "SetContract", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSetContract is a log parse operation binding the contract event 0x5de40a806536a2029221dac2c8887ac9f11952fcc1ed3d7cfb4476dd5259b740. -// -// Solidity: event SetContract(bytes32 key, address newAddress) -func (_StaderConfig *StaderConfigFilterer) ParseSetContract(log types.Log) (*StaderConfigSetContract, error) { - event := new(StaderConfigSetContract) - if err := _StaderConfig.contract.UnpackLog(event, "SetContract", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StaderConfigSetTokenIterator is returned from FilterSetToken and is used to iterate over the raw logs and unpacked data for SetToken events raised by the StaderConfig contract. -type StaderConfigSetTokenIterator struct { - Event *StaderConfigSetToken // 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 *StaderConfigSetTokenIterator) 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(StaderConfigSetToken) - if err := 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(StaderConfigSetToken) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *StaderConfigSetTokenIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StaderConfigSetTokenIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StaderConfigSetToken represents a SetToken event raised by the StaderConfig contract. -type StaderConfigSetToken struct { - Key [32]byte - NewAddress common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSetToken is a free log retrieval operation binding the contract event 0x19aab10c6a9f5d648eaa15e2d515f8dfda570ee221e7c8cb9dc07694e68005bc. -// -// Solidity: event SetToken(bytes32 key, address newAddress) -func (_StaderConfig *StaderConfigFilterer) FilterSetToken(opts *bind.FilterOpts) (*StaderConfigSetTokenIterator, error) { - - logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "SetToken") - if err != nil { - return nil, err - } - return &StaderConfigSetTokenIterator{contract: _StaderConfig.contract, event: "SetToken", logs: logs, sub: sub}, nil -} - -// WatchSetToken is a free log subscription operation binding the contract event 0x19aab10c6a9f5d648eaa15e2d515f8dfda570ee221e7c8cb9dc07694e68005bc. -// -// Solidity: event SetToken(bytes32 key, address newAddress) -func (_StaderConfig *StaderConfigFilterer) WatchSetToken(opts *bind.WatchOpts, sink chan<- *StaderConfigSetToken) (event.Subscription, error) { - - logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "SetToken") - 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(StaderConfigSetToken) - if err := _StaderConfig.contract.UnpackLog(event, "SetToken", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSetToken is a log parse operation binding the contract event 0x19aab10c6a9f5d648eaa15e2d515f8dfda570ee221e7c8cb9dc07694e68005bc. -// -// Solidity: event SetToken(bytes32 key, address newAddress) -func (_StaderConfig *StaderConfigFilterer) ParseSetToken(log types.Log) (*StaderConfigSetToken, error) { - event := new(StaderConfigSetToken) - if err := _StaderConfig.contract.UnpackLog(event, "SetToken", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// StaderConfigSetVariableIterator is returned from FilterSetVariable and is used to iterate over the raw logs and unpacked data for SetVariable events raised by the StaderConfig contract. -type StaderConfigSetVariableIterator struct { - Event *StaderConfigSetVariable // 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 *StaderConfigSetVariableIterator) 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(StaderConfigSetVariable) - if err := 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(StaderConfigSetVariable) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *StaderConfigSetVariableIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *StaderConfigSetVariableIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// StaderConfigSetVariable represents a SetVariable event raised by the StaderConfig contract. -type StaderConfigSetVariable struct { - Key [32]byte - Amount *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSetVariable is a free log retrieval operation binding the contract event 0x8091d0a33efc2ef6d3c254604932c813b52281547a6915df7dc1a5554f080c3e. -// -// Solidity: event SetVariable(bytes32 key, uint256 amount) -func (_StaderConfig *StaderConfigFilterer) FilterSetVariable(opts *bind.FilterOpts) (*StaderConfigSetVariableIterator, error) { - - logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "SetVariable") - if err != nil { - return nil, err - } - return &StaderConfigSetVariableIterator{contract: _StaderConfig.contract, event: "SetVariable", logs: logs, sub: sub}, nil -} - -// WatchSetVariable is a free log subscription operation binding the contract event 0x8091d0a33efc2ef6d3c254604932c813b52281547a6915df7dc1a5554f080c3e. -// -// Solidity: event SetVariable(bytes32 key, uint256 amount) -func (_StaderConfig *StaderConfigFilterer) WatchSetVariable(opts *bind.WatchOpts, sink chan<- *StaderConfigSetVariable) (event.Subscription, error) { - - logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "SetVariable") - 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(StaderConfigSetVariable) - if err := _StaderConfig.contract.UnpackLog(event, "SetVariable", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSetVariable is a log parse operation binding the contract event 0x8091d0a33efc2ef6d3c254604932c813b52281547a6915df7dc1a5554f080c3e. -// -// Solidity: event SetVariable(bytes32 key, uint256 amount) -func (_StaderConfig *StaderConfigFilterer) ParseSetVariable(log types.Log) (*StaderConfigSetVariable, error) { - event := new(StaderConfigSetVariable) - if err := _StaderConfig.contract.UnpackLog(event, "SetVariable", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/stader-lib/api/ETHX.go b/stader-lib/contracts/ETHX.go similarity index 65% rename from stader-lib/api/ETHX.go rename to stader-lib/contracts/ETHX.go index 6a9983607..d180246bf 100644 --- a/stader-lib/api/ETHX.go +++ b/stader-lib/contracts/ETHX.go @@ -31,8 +31,8 @@ var ( // ETHXMetaData contains all meta data concerning the ETHX contract. var ETHXMetaData = &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\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"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\"},{\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINTER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"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\":[],\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"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\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":\"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\":[],\"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\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b5060408051808201825260048082526308aa890b60e31b60208084018290528451808601909552918452908301529060036200004d838262000216565b5060046200005c828262000216565b50506006805460ff1916905550620000755f33620000d3565b620000a17f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633620000d3565b620000cd7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33620000d3565b620002de565b5f8281526005602090815260408083206001600160a01b038516845290915290205460ff1662000172575f8281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001313390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200019f57607f821691505b602082108103620001be57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000211575f81815260208120601f850160051c81016020861015620001ec5750805b601f850160051c820191505b818110156200020d57828155600101620001f8565b5050505b505050565b81516001600160401b0381111562000232576200023262000176565b6200024a816200024384546200018a565b84620001c4565b602080601f83116001811462000280575f8415620002685750858301515b5f19600386901b1c1916600185901b1785556200020d565b5f85815260208120601f198616915b82811015620002b0578886015182559484019460019091019084016200028f565b5085821015620002ce57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6113fd80620002ec5f395ff3fe608060405234801561000f575f80fd5b5060043610610187575f3560e01c80635c975abb116100d9578063a217fddf11610093578063d53913931161006e578063d539139314610330578063d547741f14610357578063dd62ed3e1461036a578063e63ab1e91461037d575f80fd5b8063a217fddf14610303578063a457c2d71461030a578063a9059cbb1461031d575f80fd5b80635c975abb1461029a57806370a08231146102a557806379cc6790146102cd5780638456cb59146102e057806391d14854146102e857806395d89b41146102fb575f80fd5b80632f2ff15d11610144578063395093511161011f57806339509351146102595780633f4ba83a1461026c57806340c10f191461027457806342966c6814610287575f80fd5b80632f2ff15d14610222578063313ce5671461023757806336568abe14610246575f80fd5b806301ffc9a71461018b57806306fdde03146101b3578063095ea7b3146101c857806318160ddd146101db57806323b872dd146101ed578063248a9ca314610200575b5f80fd5b61019e610199366004611114565b6103a4565b60405190151581526020015b60405180910390f35b6101bb6103da565b6040516101aa919061115d565b61019e6101d63660046111aa565b61046a565b6002545b6040519081526020016101aa565b61019e6101fb3660046111d2565b610481565b6101df61020e36600461120b565b5f9081526005602052604090206001015490565b610235610230366004611222565b6104a4565b005b604051601281526020016101aa565b610235610254366004611222565b6104cd565b61019e6102673660046111aa565b610550565b610235610571565b6102356102823660046111aa565b6105a6565b61023561029536600461120b565b6105e2565b60065460ff1661019e565b6101df6102b336600461124c565b6001600160a01b03165f9081526020819052604090205490565b6102356102db3660046111aa565b6105ec565b610235610628565b61019e6102f6366004611222565b610662565b6101bb61068c565b6101df5f81565b61019e6103183660046111aa565b61069b565b61019e61032b3660046111aa565b610715565b6101df7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610235610365366004611222565b610722565b6101df610378366004611265565b610746565b6101df7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b5f6001600160e01b03198216637965db0b60e01b14806103d457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600380546103e99061128d565b80601f01602080910402602001604051908101604052809291908181526020018280546104159061128d565b80156104605780601f1061043757610100808354040283529160200191610460565b820191905f5260205f20905b81548152906001019060200180831161044357829003601f168201915b5050505050905090565b5f33610477818585610770565b5060019392505050565b5f3361048e858285610893565b61049985858561090b565b506001949350505050565b5f828152600560205260409020600101546104be81610ad7565b6104c88383610ae1565b505050565b6001600160a01b03811633146105425760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61054c8282610b66565b5050565b5f336104778185856105628383610746565b61056c91906112d9565b610770565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61059b81610ad7565b6105a3610bcc565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66105d081610ad7565b6105d8610c1e565b6104c88383610c66565b6105a33382610d42565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661061681610ad7565b61061e610c1e565b6104c88383610d42565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61065281610ad7565b61065a610c1e565b6105a3610e8d565b5f9182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600480546103e99061128d565b5f33816106a88286610746565b9050838110156107085760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610539565b6104998286868403610770565b5f3361047781858561090b565b5f8281526005602052604090206001015461073c81610ad7565b6104c88383610b66565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166107d25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610539565b6001600160a01b0382166108335760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610539565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61089e8484610746565b90505f19811461090557818110156108f85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610539565b6109058484848403610770565b50505050565b6001600160a01b03831661096f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610539565b6001600160a01b0382166109d15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610539565b6001600160a01b0383165f9081526020819052604090205481811015610a485760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610539565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290610a7e9084906112d9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610aca91815260200190565b60405180910390a3610905565b6105a38133610eca565b610aeb8282610662565b61054c575f8281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610b223390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610b708282610662565b1561054c575f8281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610bd4610f2e565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60065460ff1615610c645760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610539565b565b6001600160a01b038216610cbc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610539565b8060025f828254610ccd91906112d9565b90915550506001600160a01b0382165f9081526020819052604081208054839290610cf99084906112d9565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038216610da25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610539565b6001600160a01b0382165f9081526020819052604090205481811015610e155760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610539565b6001600160a01b0383165f908152602081905260408120838303905560028054849290610e439084906112ec565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b610e95610c1e565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c013390565b610ed48282610662565b61054c57610eec816001600160a01b03166014610f77565b610ef7836020610f77565b604051602001610f089291906112ff565b60408051601f198184030181529082905262461bcd60e51b82526105399160040161115d565b60065460ff16610c645760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610539565b60605f610f85836002611373565b610f909060026112d9565b67ffffffffffffffff811115610fa857610fa861138a565b6040519080825280601f01601f191660200182016040528015610fd2576020820181803683370190505b509050600360fc1b815f81518110610fec57610fec61139e565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061101a5761101a61139e565b60200101906001600160f81b03191690815f1a9053505f61103c846002611373565b6110479060016112d9565b90505b60018111156110be576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061107b5761107b61139e565b1a60f81b8282815181106110915761109161139e565b60200101906001600160f81b03191690815f1a90535060049490941c936110b7816113b2565b905061104a565b50831561110d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610539565b9392505050565b5f60208284031215611124575f80fd5b81356001600160e01b03198116811461110d575f80fd5b5f5b8381101561115557818101518382015260200161113d565b50505f910152565b602081525f825180602084015261117b81604085016020870161113b565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146111a5575f80fd5b919050565b5f80604083850312156111bb575f80fd5b6111c48361118f565b946020939093013593505050565b5f805f606084860312156111e4575f80fd5b6111ed8461118f565b92506111fb6020850161118f565b9150604084013590509250925092565b5f6020828403121561121b575f80fd5b5035919050565b5f8060408385031215611233575f80fd5b823591506112436020840161118f565b90509250929050565b5f6020828403121561125c575f80fd5b61110d8261118f565b5f8060408385031215611276575f80fd5b61127f8361118f565b91506112436020840161118f565b600181811c908216806112a157607f821691505b6020821081036112bf57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156103d4576103d46112c5565b818103818111156103d4576103d46112c5565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161133681601785016020880161113b565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161136781602884016020880161113b565b01602801949350505050565b80820281158282048414176103d4576103d46112c5565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f816113c0576113c06112c5565b505f19019056fea2646970667358221220cec0465279bd2cd96cebf6de8a0a09a0963196f26dfd27f9a774e00cf578ba5c64736f6c63430008140033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"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\":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\":\"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\"},{\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNER_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\":\"MINTER_ROLE\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"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\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b5061001861001d565b6100da565b5f54610100900460ff16156100885760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811610156100d8575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61191f806100e75f395ff3fe608060405234801561000f575f80fd5b50600436106101bb575f3560e01c8063490ffa35116100f35780639ee804cb11610093578063a9059cbb1161006e578063a9059cbb146103b6578063d5391393146103c9578063d547741f146103f0578063dd62ed3e14610403575f80fd5b80639ee804cb14610389578063a217fddf1461039c578063a457c2d7146103a3575f80fd5b806379cc6790116100ce57806379cc6790146103535780638456cb591461036657806391d148541461036e57806395d89b4114610381575f80fd5b8063490ffa35146102f55780635c975abb1461032057806370a082311461032b575f80fd5b80632f2ff15d1161015e578063395093511161013957806339509351146102b45780633f4ba83a146102c757806340c10f19146102cf578063485cc955146102e2575f80fd5b80632f2ff15d1461027d578063313ce5671461029257806336568abe146102a1575f80fd5b806318160ddd1161019957806318160ddd1461020f57806323b872dd14610221578063248a9ca314610234578063282c51f314610256575f80fd5b806301ffc9a7146101bf57806306fdde03146101e7578063095ea7b3146101fc575b5f80fd5b6101d26101cd3660046114d6565b610416565b60405190151581526020015b60405180910390f35b6101ef61044c565b6040516101de919061151f565b6101d261020a36600461156c565b6104dc565b6035545b6040519081526020016101de565b6101d261022f366004611594565b6104f3565b6102136102423660046115cd565b5f90815260c9602052604090206001015490565b6102137f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b61029061028b3660046115e4565b610516565b005b604051601281526020016101de565b6102906102af3660046115e4565b61053f565b6101d26102c236600461156c565b6105c2565b6102906105e3565b6102906102dd36600461156c565b6105f8565b6102906102f036600461160e565b610634565b60fb54610308906001600160a01b031681565b6040516001600160a01b0390911681526020016101de565b60655460ff166101d2565b610213610339366004611636565b6001600160a01b03165f9081526033602052604090205490565b61029061036136600461156c565b6107f4565b610290610830565b6101d261037c3660046115e4565b610851565b6101ef61087b565b610290610397366004611636565b61088a565b6102135f81565b6101d26103b136600461156c565b6108e7565b6101d26103c436600461156c565b610961565b6102137f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102906103fe3660046115e4565b61096e565b61021361041136600461160e565b610992565b5f6001600160e01b03198216637965db0b60e01b148061044657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606036805461045b9061164f565b80601f01602080910402602001604051908101604052809291908181526020018280546104879061164f565b80156104d25780601f106104a9576101008083540402835291602001916104d2565b820191905f5260205f20905b8154815290600101906020018083116104b557829003601f168201915b5050505050905090565b5f336104e98185856109bc565b5060019392505050565b5f33610500858285610adf565b61050b858585610b57565b506001949350505050565b5f82815260c9602052604090206001015461053081610d0b565b61053a8383610d15565b505050565b6001600160a01b03811633146105b45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6105be8282610d9a565b5050565b5f336104e98185856105d48383610992565b6105de919061169b565b6109bc565b5f6105ed81610d0b565b6105f5610e00565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661062281610d0b565b61062a610e52565b61053a8383610e98565b5f54610100900460ff161580801561065257505f54600160ff909116105b8061066b5750303b15801561066b57505f5460ff166001145b6106ce5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016105ab565b5f805460ff1916600117905580156106ef575f805461ff0019166101001790555b6106f883610f62565b61070182610f62565b6107436040518060400160405280600481526020016308aa890f60e31b8152506040518060400160405280600481526020016308aa890f60e31b815250610f89565b61074b610fb9565b610753610fe7565b60fb80546001600160a01b0319166001600160a01b0384161790556107785f84610d15565b6040516001600160a01b038316907fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a2801561053a575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84861081e81610d0b565b610826610e52565b61053a838361100d565b60fb546108479033906001600160a01b031661114a565b61084f6111cf565b565b5f91825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606037805461045b9061164f565b5f61089481610d0b565b61089d82610f62565b60fb80546001600160a01b0319166001600160a01b0384169081179091556040517fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a25050565b5f33816108f48286610992565b9050838110156109545760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105ab565b61050b82868684036109bc565b5f336104e9818585610b57565b5f82815260c9602052604090206001015461098881610d0b565b61053a8383610d9a565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b038316610a1e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105ab565b6001600160a01b038216610a7f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105ab565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f610aea8484610992565b90505f198114610b515781811015610b445760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105ab565b610b5184848484036109bc565b50505050565b6001600160a01b038316610bbb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105ab565b6001600160a01b038216610c1d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105ab565b610c2883838361120c565b6001600160a01b0383165f9081526033602052604090205481811015610c9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105ab565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610cfe9086815260200190565b60405180910390a3610b51565b6105f58133611214565b610d1f8282610851565b6105be575f82815260c9602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610d563390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610da48282610851565b156105be575f82815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610e0861126d565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60655460ff161561084f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105ab565b6001600160a01b038216610eee5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105ab565b610ef95f838361120c565b8060355f828254610f0a919061169b565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0381166105f55760405163d92e233d60e01b815260040160405180910390fd5b5f54610100900460ff16610faf5760405162461bcd60e51b81526004016105ab906116ae565b6105be82826112b6565b5f54610100900460ff16610fdf5760405162461bcd60e51b81526004016105ab906116ae565b61084f6112f5565b5f54610100900460ff1661084f5760405162461bcd60e51b81526004016105ab906116ae565b6001600160a01b03821661106d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105ab565b611078825f8361120c565b6001600160a01b0382165f90815260336020526040902054818110156110eb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105ab565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa15801561118e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b291906116f9565b6105be5760405163c4230ae360e01b815260040160405180910390fd5b6111d7610e52565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e353390565b61053a610e52565b61121e8282610851565b6105be5761122b81611327565b611236836020611339565b604051602001611247929190611718565b60408051601f198184030181529082905262461bcd60e51b82526105ab9160040161151f565b60655460ff1661084f5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016105ab565b5f54610100900460ff166112dc5760405162461bcd60e51b81526004016105ab906116ae565b60366112e883826117ed565b50603761053a82826117ed565b5f54610100900460ff1661131b5760405162461bcd60e51b81526004016105ab906116ae565b6065805460ff19169055565b60606104466001600160a01b03831660145b60605f6113478360026118a9565b61135290600261169b565b67ffffffffffffffff81111561136a5761136a61178c565b6040519080825280601f01601f191660200182016040528015611394576020820181803683370190505b509050600360fc1b815f815181106113ae576113ae6118c0565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106113dc576113dc6118c0565b60200101906001600160f81b03191690815f1a9053505f6113fe8460026118a9565b61140990600161169b565b90505b6001811115611480576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061143d5761143d6118c0565b1a60f81b828281518110611453576114536118c0565b60200101906001600160f81b03191690815f1a90535060049490941c93611479816118d4565b905061140c565b5083156114cf5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105ab565b9392505050565b5f602082840312156114e6575f80fd5b81356001600160e01b0319811681146114cf575f80fd5b5f5b838110156115175781810151838201526020016114ff565b50505f910152565b602081525f825180602084015261153d8160408501602087016114fd565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114611567575f80fd5b919050565b5f806040838503121561157d575f80fd5b61158683611551565b946020939093013593505050565b5f805f606084860312156115a6575f80fd5b6115af84611551565b92506115bd60208501611551565b9150604084013590509250925092565b5f602082840312156115dd575f80fd5b5035919050565b5f80604083850312156115f5575f80fd5b8235915061160560208401611551565b90509250929050565b5f806040838503121561161f575f80fd5b61162883611551565b915061160560208401611551565b5f60208284031215611646575f80fd5b6114cf82611551565b600181811c9082168061166357607f821691505b60208210810361168157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561044657610446611687565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215611709575f80fd5b815180151581146114cf575f80fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161174f8160178501602088016114fd565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516117808160288401602088016114fd565b01602801949350505050565b634e487b7160e01b5f52604160045260245ffd5b601f82111561053a575f81815260208120601f850160051c810160208610156117c65750805b601f850160051c820191505b818110156117e5578281556001016117d2565b505050505050565b815167ffffffffffffffff8111156118075761180761178c565b61181b81611815845461164f565b846117a0565b602080601f83116001811461184e575f84156118375750858301515b5f19600386901b1c1916600185901b1785556117e5565b5f85815260208120601f198616915b8281101561187c5788860151825594840194600190910190840161185d565b508582101561189957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b808202811582820484141761044657610446611687565b634e487b7160e01b5f52603260045260245ffd5b5f816118e2576118e2611687565b505f19019056fea2646970667358221220c94de1140cf181b6b7536129f51e4f76727f774db6ab37e0b086abf10bcf21d264736f6c63430008140033", } // ETHXABI is the input ABI used to generate the binding from. @@ -202,6 +202,37 @@ func (_ETHX *ETHXTransactorRaw) Transact(opts *bind.TransactOpts, method string, return _ETHX.Contract.contract.Transact(opts, method, params...) } +// BURNERROLE is a free data retrieval call binding the contract method 0x282c51f3. +// +// Solidity: function BURNER_ROLE() view returns(bytes32) +func (_ETHX *ETHXCaller) BURNERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ETHX.contract.Call(opts, &out, "BURNER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// BURNERROLE is a free data retrieval call binding the contract method 0x282c51f3. +// +// Solidity: function BURNER_ROLE() view returns(bytes32) +func (_ETHX *ETHXSession) BURNERROLE() ([32]byte, error) { + return _ETHX.Contract.BURNERROLE(&_ETHX.CallOpts) +} + +// BURNERROLE is a free data retrieval call binding the contract method 0x282c51f3. +// +// Solidity: function BURNER_ROLE() view returns(bytes32) +func (_ETHX *ETHXCallerSession) BURNERROLE() ([32]byte, error) { + return _ETHX.Contract.BURNERROLE(&_ETHX.CallOpts) +} + // DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. // // Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) @@ -264,37 +295,6 @@ func (_ETHX *ETHXCallerSession) MINTERROLE() ([32]byte, error) { return _ETHX.Contract.MINTERROLE(&_ETHX.CallOpts) } -// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. -// -// Solidity: function PAUSER_ROLE() view returns(bytes32) -func (_ETHX *ETHXCaller) PAUSERROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _ETHX.contract.Call(opts, &out, "PAUSER_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. -// -// Solidity: function PAUSER_ROLE() view returns(bytes32) -func (_ETHX *ETHXSession) PAUSERROLE() ([32]byte, error) { - return _ETHX.Contract.PAUSERROLE(&_ETHX.CallOpts) -} - -// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. -// -// Solidity: function PAUSER_ROLE() view returns(bytes32) -func (_ETHX *ETHXCallerSession) PAUSERROLE() ([32]byte, error) { - return _ETHX.Contract.PAUSERROLE(&_ETHX.CallOpts) -} - // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. // // Solidity: function allowance(address owner, address spender) view returns(uint256) @@ -512,6 +512,37 @@ func (_ETHX *ETHXCallerSession) Paused() (bool, error) { return _ETHX.Contract.Paused(&_ETHX.CallOpts) } +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_ETHX *ETHXCaller) StaderConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ETHX.contract.Call(opts, &out, "staderConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_ETHX *ETHXSession) StaderConfig() (common.Address, error) { + return _ETHX.Contract.StaderConfig(&_ETHX.CallOpts) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_ETHX *ETHXCallerSession) StaderConfig() (common.Address, error) { + return _ETHX.Contract.StaderConfig(&_ETHX.CallOpts) +} + // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. // // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) @@ -626,27 +657,6 @@ func (_ETHX *ETHXTransactorSession) Approve(spender common.Address, amount *big. return _ETHX.Contract.Approve(&_ETHX.TransactOpts, spender, amount) } -// Burn is a paid mutator transaction binding the contract method 0x42966c68. -// -// Solidity: function burn(uint256 amount) returns() -func (_ETHX *ETHXTransactor) Burn(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { - return _ETHX.contract.Transact(opts, "burn", amount) -} - -// Burn is a paid mutator transaction binding the contract method 0x42966c68. -// -// Solidity: function burn(uint256 amount) returns() -func (_ETHX *ETHXSession) Burn(amount *big.Int) (*types.Transaction, error) { - return _ETHX.Contract.Burn(&_ETHX.TransactOpts, amount) -} - -// Burn is a paid mutator transaction binding the contract method 0x42966c68. -// -// Solidity: function burn(uint256 amount) returns() -func (_ETHX *ETHXTransactorSession) Burn(amount *big.Int) (*types.Transaction, error) { - return _ETHX.Contract.Burn(&_ETHX.TransactOpts, amount) -} - // BurnFrom is a paid mutator transaction binding the contract method 0x79cc6790. // // Solidity: function burnFrom(address account, uint256 amount) returns() @@ -731,6 +741,27 @@ func (_ETHX *ETHXTransactorSession) IncreaseAllowance(spender common.Address, ad return _ETHX.Contract.IncreaseAllowance(&_ETHX.TransactOpts, spender, addedValue) } +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _admin, address _staderConfig) returns() +func (_ETHX *ETHXTransactor) Initialize(opts *bind.TransactOpts, _admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { + return _ETHX.contract.Transact(opts, "initialize", _admin, _staderConfig) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _admin, address _staderConfig) returns() +func (_ETHX *ETHXSession) Initialize(_admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { + return _ETHX.Contract.Initialize(&_ETHX.TransactOpts, _admin, _staderConfig) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _admin, address _staderConfig) returns() +func (_ETHX *ETHXTransactorSession) Initialize(_admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { + return _ETHX.Contract.Initialize(&_ETHX.TransactOpts, _admin, _staderConfig) +} + // Mint is a paid mutator transaction binding the contract method 0x40c10f19. // // Solidity: function mint(address to, uint256 amount) returns() @@ -878,6 +909,27 @@ func (_ETHX *ETHXTransactorSession) Unpause() (*types.Transaction, error) { return _ETHX.Contract.Unpause(&_ETHX.TransactOpts) } +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_ETHX *ETHXTransactor) UpdateStaderConfig(opts *bind.TransactOpts, _staderConfig common.Address) (*types.Transaction, error) { + return _ETHX.contract.Transact(opts, "updateStaderConfig", _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_ETHX *ETHXSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _ETHX.Contract.UpdateStaderConfig(&_ETHX.TransactOpts, _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_ETHX *ETHXTransactorSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _ETHX.Contract.UpdateStaderConfig(&_ETHX.TransactOpts, _staderConfig) +} + // ETHXApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ETHX contract. type ETHXApprovalIterator struct { Event *ETHXApproval // Event containing the contract specifics and raw log @@ -1032,6 +1084,140 @@ func (_ETHX *ETHXFilterer) ParseApproval(log types.Log) (*ETHXApproval, error) { return event, nil } +// ETHXInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ETHX contract. +type ETHXInitializedIterator struct { + Event *ETHXInitialized // 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 *ETHXInitializedIterator) 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(ETHXInitialized) + if err := 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(ETHXInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXInitialized represents a Initialized event raised by the ETHX contract. +type ETHXInitialized 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 (_ETHX *ETHXFilterer) FilterInitialized(opts *bind.FilterOpts) (*ETHXInitializedIterator, error) { + + logs, sub, err := _ETHX.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return ÐXInitializedIterator{contract: _ETHX.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 (_ETHX *ETHXFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ETHXInitialized) (event.Subscription, error) { + + logs, sub, err := _ETHX.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(ETHXInitialized) + if err := _ETHX.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 (_ETHX *ETHXFilterer) ParseInitialized(log types.Log) (*ETHXInitialized, error) { + event := new(ETHXInitialized) + if err := _ETHX.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ETHXPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ETHX contract. type ETHXPausedIterator struct { Event *ETHXPaused // Event containing the contract specifics and raw log @@ -1939,3 +2125,147 @@ func (_ETHX *ETHXFilterer) ParseUnpaused(log types.Log) (*ETHXUnpaused, error) { event.Raw = log return event, nil } + +// ETHXUpdatedStaderConfigIterator is returned from FilterUpdatedStaderConfig and is used to iterate over the raw logs and unpacked data for UpdatedStaderConfig events raised by the ETHX contract. +type ETHXUpdatedStaderConfigIterator struct { + Event *ETHXUpdatedStaderConfig // 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 *ETHXUpdatedStaderConfigIterator) 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(ETHXUpdatedStaderConfig) + if err := 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(ETHXUpdatedStaderConfig) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXUpdatedStaderConfigIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXUpdatedStaderConfigIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXUpdatedStaderConfig represents a UpdatedStaderConfig event raised by the ETHX contract. +type ETHXUpdatedStaderConfig struct { + StaderConfig common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedStaderConfig is a free log retrieval operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address indexed _staderConfig) +func (_ETHX *ETHXFilterer) FilterUpdatedStaderConfig(opts *bind.FilterOpts, _staderConfig []common.Address) (*ETHXUpdatedStaderConfigIterator, error) { + + var _staderConfigRule []interface{} + for _, _staderConfigItem := range _staderConfig { + _staderConfigRule = append(_staderConfigRule, _staderConfigItem) + } + + logs, sub, err := _ETHX.contract.FilterLogs(opts, "UpdatedStaderConfig", _staderConfigRule) + if err != nil { + return nil, err + } + return ÐXUpdatedStaderConfigIterator{contract: _ETHX.contract, event: "UpdatedStaderConfig", logs: logs, sub: sub}, nil +} + +// WatchUpdatedStaderConfig is a free log subscription operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address indexed _staderConfig) +func (_ETHX *ETHXFilterer) WatchUpdatedStaderConfig(opts *bind.WatchOpts, sink chan<- *ETHXUpdatedStaderConfig, _staderConfig []common.Address) (event.Subscription, error) { + + var _staderConfigRule []interface{} + for _, _staderConfigItem := range _staderConfig { + _staderConfigRule = append(_staderConfigRule, _staderConfigItem) + } + + logs, sub, err := _ETHX.contract.WatchLogs(opts, "UpdatedStaderConfig", _staderConfigRule) + 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(ETHXUpdatedStaderConfig) + if err := _ETHX.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedStaderConfig is a log parse operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address indexed _staderConfig) +func (_ETHX *ETHXFilterer) ParseUpdatedStaderConfig(log types.Log) (*ETHXUpdatedStaderConfig, error) { + event := new(ETHXUpdatedStaderConfig) + if err := _ETHX.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/stader-lib/contracts/permissionless-node-registry.go b/stader-lib/contracts/permissionless-node-registry.go index a7060b065..caeb8ddc7 100644 --- a/stader-lib/contracts/permissionless-node-registry.go +++ b/stader-lib/contracts/permissionless-node-registry.go @@ -43,13 +43,35 @@ type Validator struct { // PermissionlessNodeRegistryMetaData contains all meta data concerning the PermissionlessNodeRegistry contract. var PermissionlessNodeRegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CooldownNotComplete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InSufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBondEthValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidKeyCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartAndEndIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MisMatchingInputKeysSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoChangeInState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSDCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorAlreadyOnBoardedInProtocol\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorIsDeactivate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorNotOnBoarded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PageNumberIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PubkeyAlreadyExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyVerifiedKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyWithdrawnKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UNEXPECTED_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"maxKeyLimitReached\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"AddedValidatorKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"DecreasedTotalActiveValidatorCount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"IncreasedTotalActiveValidatorCount\",\"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\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nodeRewardAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"OnboardedOperator\",\"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\":\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredCollateralToPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"batchKeyDepositLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedInputKeyCountLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"UpdatedMaxNonTerminalKeyPerOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"UpdatedNextQueuedValidatorIndex\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardAddress\",\"type\":\"address\"}],\"name\":\"UpdatedOperatorDetails\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"UpdatedSocializingPoolState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"}],\"name\":\"UpdatedValidatorDepositBlock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedVerifiedKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedWithdrawnKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedAsFrontRunned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedReadyToDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorStatusMarkedAsInvalidSignature\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COLLATERAL_ETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRONT_RUN_PENALTY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ID\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_depositSignature\",\"type\":\"bytes[]\"}],\"name\":\"addValidatorKeys\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"changeSocializingPoolState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllSocializingPoolOptOutOperators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorRewardAddress\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalKeys\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getSocializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsByOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"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\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"increaseTotalActiveValidatorCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inputKeyCountLimit\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_readyToDepositPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_frontRunPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_invalidSignaturePubkey\",\"type\":\"bytes[]\"}],\"name\":\"markValidatorReadyToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNonTerminalKeyPerOperator\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextQueuedValidatorIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextValidatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nodeELRewardVaultByOperatorId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_operatorRewardAddress\",\"type\":\"address\"}],\"name\":\"onboardNodeOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorIDByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"operatorStructById\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"operatorRewardAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorAddress\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queuedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"socializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"totalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferCollateralToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"}],\"name\":\"updateDepositStatusAndBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_inputKeyCountLimit\",\"type\":\"uint16\"}],\"name\":\"updateInputKeyCountLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"updateMaxNonTerminalKeyPerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"updateNextQueuedValidatorIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_rewardAddress\",\"type\":\"address\"}],\"name\":\"updateOperatorDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateVerifiedKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"validatorIdByPubkey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorIdsByOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorRegistry\",\"outputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifiedKeyBatchSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"withdrawnValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CooldownNotComplete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicatePoolIDOrPoolNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InSufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBondEthValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidKeyCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartAndEndIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MisMatchingInputKeysSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoChangeInState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSDCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorAlreadyOnBoardedInProtocol\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorIsDeactivate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorNotOnBoarded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PageNumberIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PubkeyAlreadyExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyVerifiedKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyWithdrawnKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UNEXPECTED_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"maxKeyLimitReached\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"AddedValidatorKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"DecreasedTotalActiveValidatorCount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"IncreasedTotalActiveValidatorCount\",\"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\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nodeRewardAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"OnboardedOperator\",\"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\":\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredCollateralToPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"batchKeyDepositLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedInputKeyCountLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"UpdatedMaxNonTerminalKeyPerOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"UpdatedNextQueuedValidatorIndex\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardAddress\",\"type\":\"address\"}],\"name\":\"UpdatedOperatorDetails\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"UpdatedSocializingPoolState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"}],\"name\":\"UpdatedValidatorDepositBlock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedVerifiedKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedWithdrawnKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedAsFrontRunned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedReadyToDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorStatusMarkedAsInvalidSignature\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COLLATERAL_ETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRONT_RUN_PENALTY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ID\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_depositSignature\",\"type\":\"bytes[]\"}],\"name\":\"addValidatorKeys\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"changeSocializingPoolState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllNodeELVaultAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorRewardAddress\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalKeys\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getSocializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsByOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"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\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"increaseTotalActiveValidatorCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inputKeyCountLimit\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_readyToDepositPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_frontRunPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_invalidSignaturePubkey\",\"type\":\"bytes[]\"}],\"name\":\"markValidatorReadyToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNonTerminalKeyPerOperator\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextQueuedValidatorIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextValidatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nodeELRewardVaultByOperatorId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_operatorRewardAddress\",\"type\":\"address\"}],\"name\":\"onboardNodeOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorIDByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"operatorStructById\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"operatorRewardAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorAddress\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queuedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"socializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"totalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferCollateralToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"}],\"name\":\"updateDepositStatusAndBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_inputKeyCountLimit\",\"type\":\"uint16\"}],\"name\":\"updateInputKeyCountLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"updateMaxNonTerminalKeyPerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"updateNextQueuedValidatorIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_rewardAddress\",\"type\":\"address\"}],\"name\":\"updateOperatorDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateVerifiedKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"validatorIdByPubkey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorIdsByOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorRegistry\",\"outputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifiedKeyBatchSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"withdrawnValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b506200001b62000021565b620000e0565b5f54610100900460ff16156200008d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161015620000de575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61545780620000ee5f395ff3fe608060405260043610610366575f3560e01c80637bd977d9116101c8578063b8d2f06c116100fd578063d5e1e5ce1161009d578063ebb5c1741161006d578063ebb5c17414610a8e578063f7c0918914610aba578063f90b083814610acf578063f9c4dda414610aee575f80fd5b8063d5e1e5ce14610a09578063deacde2b14610a28578063e0bf8b5314610a3b578063e0d7d0e914610a68575f80fd5b8063c34ade5c116100d8578063c34ade5c14610962578063c8a00e7a1461098e578063cac8b306146109be578063d547741f146109ea575f80fd5b8063b8d2f06c146108fc578063bb7306bf1461091b578063bc4a3ad514610936575f80fd5b80639344b24211610168578063a217fddf11610143578063a217fddf1461089b578063ab3e71eb146108ae578063af533aa8146108c3578063b01db078146108e2575f80fd5b80639344b24214610828578063998888981461085d5780639ee804cb1461087c575f80fd5b80638456cb59116101a35780638456cb59146107c057806384b0fa4c146107d45780638a25bcec146107ea57806391d1485414610809575f80fd5b80637bd977d91461074857806383ea23581461075c57806384522a6d14610794575f80fd5b8063490ffa351161029e5780635ae7f25d1161023e57806360c3cf3f1161021957806360c3cf3f146106d2578063683547b8146106f157806374338e6d1461071d57806377c359e114610733575f80fd5b80635ae7f25d146106645780635c2c30a5146106835780635c975abb146106bb575f80fd5b806350d5d7ab1161027957806350d5d7ab146105b657806358a994ea146105f357806359c3c9b7146106125780635a1239c114610631575f80fd5b8063490ffa351461056057806349911bfb146105865780634f59ed801461059b575f80fd5b80632d1dbd741161030957806336514d9f116102e457806336514d9f146104ef57806336568abe1461050e5780633f4ba83a1461052d578063485cc95514610541575f80fd5b80632d1dbd741461048f5780632d32924f146104a45780632f2ff15d146104d0575f80fd5b8063186d954111610344578063186d9541146103f6578063248a9ca3146104155780632517cfbf14610451578063264f27f314610470575f80fd5b806301ffc9a71461036a578063044d2fe81461039e57806313797bff146103d5575b5f80fd5b348015610375575f80fd5b50610389610384366004614775565b610b25565b60405190151581526020015b60405180910390f35b3480156103a9575f80fd5b506103bd6103b8366004614801565b610b5b565b6040516001600160a01b039091168152602001610395565b3480156103e0575f80fd5b506103f46103ef3660046148a4565b610f7a565b005b348015610401575f80fd5b506103f4610410366004614936565b6113c1565b348015610420575f80fd5b5061044361042f366004614936565b5f9081526065602052604090206001015490565b604051908152602001610395565b34801561045c575f80fd5b506103f461046b36600461494d565b611471565b34801561047b575f80fd5b506103f461048a36600461496e565b6114d3565b34801561049a575f80fd5b5061044360fd5481565b3480156104af575f80fd5b506104c36104be3660046149ac565b61171e565b60405161039591906149cc565b3480156104db575f80fd5b506103f46104ea366004614a18565b611852565b3480156104fa575f80fd5b50610389610509366004614a46565b611876565b348015610519575f80fd5b506103f4610528366004614a18565b6118a3565b348015610538575f80fd5b506103f4611926565b34801561054c575f80fd5b506103f461055b366004614a78565b61194e565b34801561056b575f80fd5b5060fb546103bd90600160501b90046001600160a01b031681565b348015610591575f80fd5b5061044360ff5481565b3480156105a6575f80fd5b50610443673782dace9d90000081565b3480156105c1575f80fd5b5060fb546105db906201000090046001600160401b031681565b6040516001600160401b039091168152602001610395565b3480156105fe575f80fd5b506103f461060d366004614aa4565b611aea565b34801561061d575f80fd5b506103f461062c366004614936565b611c68565b34801561063c575f80fd5b5061065061064b366004614936565b611d08565b604051610395989796959493929190614b77565b34801561066f575f80fd5b506103f461067e366004614936565b611eea565b34801561068e575f80fd5b5061044361069d366004614c04565b80516020818301810180516101038252928201919093012091525481565b3480156106c6575f80fd5b5060975460ff16610389565b3480156106dd575f80fd5b506103f46106ec366004614cae565b612051565b3480156106fc575f80fd5b5061071061070b366004614cd4565b6120cb565b6040516103959190614d06565b348015610728575f80fd5b506104436101005481565b34801561073e575f80fd5b5061010154610443565b348015610753575f80fd5b50610443612482565b348015610767575f80fd5b506103bd610776366004614936565b5f90815261010560205260409020600201546001600160a01b031690565b34801561079f575f80fd5b506104436107ae366004614936565b6101086020525f908152604090205481565b3480156107cb575f80fd5b506103f4612499565b3480156107df575f80fd5b506104436101015481565b3480156107f5575f80fd5b506105db610804366004614cd4565b6124bf565b348015610814575f80fd5b50610389610823366004614a18565b61258a565b348015610833575f80fd5b506103bd610842366004614936565b6101096020525f90815260409020546001600160a01b031681565b348015610868575f80fd5b506107106108773660046149ac565b6125b4565b348015610887575f80fd5b506103f4610896366004614df0565b6128ff565b3480156108a6575f80fd5b506104435f81565b3480156108b9575f80fd5b5061044360fc5481565b3480156108ce575f80fd5b506103f46108dd366004614936565b612988565b3480156108ed575f80fd5b50673782dace9d900000610443565b348015610907575f80fd5b506103f4610916366004614936565b6129db565b348015610926575f80fd5b506104436729a2241af62c000081565b348015610941575f80fd5b50610443610950366004614936565b6101046020525f908152604090205481565b34801561096d575f80fd5b5061044361097c366004614936565b5f908152610107602052604090205490565b348015610999575f80fd5b506109ad6109a8366004614936565b612a66565b604051610395959493929190614e0b565b3480156109c9575f80fd5b506104436109d8366004614df0565b6101066020525f908152604090205481565b3480156109f5575f80fd5b506103f4610a04366004614a18565b612b2f565b348015610a14575f80fd5b50610443610a233660046149ac565b612b53565b6103f4610a363660046148a4565b612b7f565b348015610a46575f80fd5b5060fb54610a559061ffff1681565b60405161ffff9091168152602001610395565b348015610a73575f80fd5b50610a7c600181565b60405160ff9091168152602001610395565b348015610a99575f80fd5b50610443610aa8366004614936565b5f908152610108602052604090205490565b348015610ac5575f80fd5b5061044360fe5481565b348015610ada575f80fd5b506103bd610ae9366004614e4f565b613262565b348015610af9575f80fd5b50610389610b08366004614df0565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b5557506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b646134cb565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bda9190614e6a565b905060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c519190614e6a565b604051636fc4c27f60e11b8152600160048201526001600160a01b039182169183169063df8984fe90602401602060405180830381865afa158015610c98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cbc9190614e6a565b6001600160a01b031614610ce3576040516303b8ffef60e41b815260040160405180910390fd5b604051639f7053f560e01b81526001600160a01b03821690639f7053f590610d119088908890600401614ead565b5f604051808303815f87803b158015610d28575f80fd5b505af1158015610d3a573d5f803e3d5ffd5b50505050610d4783613511565b604051633e71376960e21b81523360048201526001600160a01b0382169063f9c4dda490602401602060405180830381865afa158015610d89573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dad9190614ec8565b15610dcb5760405163707999fb60e11b815260040160405180910390fd5b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e419190614e6a565b60fd54604051636a0b688160e01b81526001600482015260248101919091526001600160a01b039190911690636a0b6881906044016020604051808303815f875af1158015610e92573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb69190614e6a565b60fd545f9081526101096020526040902080546001600160a01b0319166001600160a01b038316179055905086610eed5780610f62565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f629190614e6a565b9250610f7087878787613538565b5050949350505050565b610f826136c6565b610f8a6134cb565b60fb5460408051633871d0f160e01b81529051611008923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190614ee3565b61371f565b60fc548590849083908161101c8486614f0e565b6110269190614f0e565b11156110455760405163525e3de760e01b815260040160405180910390fd5b5f5b8381101561110e575f6101038b8b8481811061106557611065614f21565b90506020028101906110779190614f35565b604051611085929190614f77565b908152602001604051809103902054905061109f816137ab565b6110a8816137f7565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b848181106110db576110db614f21565b90506020028101906110ed9190614f35565b836040516110fd93929190614f86565b60405180910390a150600101611047565b5081156111eb5760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611166573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061118a9190614e6a565b6001600160a01b0316638d0d8cb66111aa6729a2241af62c000085614fa9565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156111d3575f80fd5b505af11580156111e5573d5f803e3d5ffd5b50505050505b5f5b828110156112e1575f61010389898481811061120b5761120b614f21565b905060200281019061121d9190614f35565b60405161122b929190614f77565b9081526020016040518091039020549050611245816137ab565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b834668989848181106112ae576112ae614f21565b90506020028101906112c09190614f35565b836040516112d093929190614f86565b60405180910390a1506001016111ed565b505f5b818110156113ab575f61010387878481811061130257611302614f21565b90506020028101906113149190614f35565b604051611322929190614f77565b908152602001604051809103902054905061133c816137ab565b61134581613838565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f87878481811061137857611378614f21565b905060200281019061138a9190614f35565b8360405161139a93929190614f86565b60405180910390a1506001016112e4565b505050506113b9600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b81529051611416923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fdf573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb5461148f903390600160501b90046001600160a01b03166139ce565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c3690602001611466565b60fb5460408051633871d0f160e01b81529051611528923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fdf573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa158015611576573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159a9190614ee3565b8111156115ba57604051639519af4360e01b815260040160405180910390fd5b5f5b8181101561170f575f6101038585848181106115da576115da614f21565b90506020028101906115ec9190614f35565b6040516115fa929190614f77565b908152602001604051809103902054905061161481613a53565b611631576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b158015611693575f80fd5b505af11580156116a5573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf798585848181106116dc576116dc614f21565b90506020028101906116ee9190614f35565b836040516116fe93929190614f86565b60405180910390a1506001016115bc565b5061171981613c9e565b505050565b6060825f03611740576040516334d6e01560e01b815260040160405180910390fd5b5f8261174d600186614fc0565b6117579190614fa9565b611762906001614f0e565b90505f61176f8483614f0e565b905060fd5481116117805780611784565b60fd545b90505f828211611794575f61179e565b61179e8383614fc0565b6001600160401b038111156117b5576117b5614bf0565b6040519080825280602002602001820160405280156117de578160200160208202803683370190505b509050825b82811015611848575f81815261010960205260409020546001600160a01b03168261180e8684614fc0565b8151811061181e5761181e614f21565b6001600160a01b03909216602092830291909101909101528061184081614fd3565b9150506117e3565b5095945050505050565b5f8281526065602052604090206001015461186c81613ce9565b6117198383613cf3565b5f610103838360405161188a929190614f77565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146119185760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6119228282613d78565b5050565b60fb54611944903390600160501b90046001600160a01b0316613dde565b61194c613e63565b565b5f54610100900460ff161580801561196c57505f54600160ff909116105b806119855750303b15801561198557505f5460ff166001145b6119e85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161190f565b5f805460ff191660011790558015611a09575f805461ff0019166101001790555b611a1283613511565b611a1b82613511565b611a23613eb5565b611a2b613edb565b611a33613f09565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff0000909116600160501b6001600160a01b0386160261ffff1916171769ffffffffffffffff0000191662320000179055603260fc55611aa15f84613cf3565b8015611719575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5f9190614e6a565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b8152600401611b8c929190614ead565b5f604051808303815f87803b158015611ba3575f80fd5b505af1158015611bb5573d5f803e3d5ffd5b50505050611bc281613511565b611bcb33613f37565b50335f9081526101066020908152604080832054808452610105909252909120600101611bf9848683615068565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d8726977790611c5a90879087908790615123565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b81529051611cbd923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fdf573d5f803e3d5ffd5b806101015f828254611ccf9190614f0e565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f290602001611466565b6101026020525f90815260409020805460018201805460ff9092169291611d2e90614feb565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5a90614feb565b8015611da55780601f10611d7c57610100808354040283529160200191611da5565b820191905f5260205f20905b815481529060010190602001808311611d8857829003601f168201915b505050505090806002018054611dba90614feb565b80601f0160208091040260200160405190810160405280929190818152602001828054611de690614feb565b8015611e315780601f10611e0857610100808354040283529160200191611e31565b820191905f5260205f20905b815481529060010190602001808311611e1457829003601f168201915b505050505090806003018054611e4690614feb565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7290614feb565b8015611ebd5780601f10611e9457610100808354040283529160200191611ebd565b820191905f5260205f20905b815481529060010190602001808311611ea057829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611ef26136c6565b60fb5460408051637a87fa0b60e01b81529051611f47923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fdf573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fbc9190614e6a565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611ff4575f80fd5b505af1158015612006573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a8160405161203c91815260200190565b60405180910390a161204e600160c955565b50565b60fb5461206f903390600160501b90046001600160a01b0316613dde565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a290602001611466565b6060825f036120ed576040516334d6e01560e01b815260040160405180910390fd5b5f826120fa600186614fc0565b6121049190614fa9565b90505f6121118483614f0e565b6001600160a01b0387165f908152610106602052604081205491925081900361214d5760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311612169578261216b565b805b92505f84841161217b575f612185565b6121858585614fc0565b6001600160401b0381111561219c5761219c614bf0565b6040519080825280602002602001820160405280156121d557816020015b6121c261472b565b8152602001906001900390816121ba5790505b509050845b84811015612475575f8481526101076020526040812080548390811061220257612202614f21565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff16600581111561224457612244614af6565b600581111561225557612255614af6565b815260200160018201805461226990614feb565b80601f016020809104026020016040519081016040528092919081815260200182805461229590614feb565b80156122e05780601f106122b7576101008083540402835291602001916122e0565b820191905f5260205f20905b8154815290600101906020018083116122c357829003601f168201915b505050505081526020016002820180546122f990614feb565b80601f016020809104026020016040519081016040528092919081815260200182805461232590614feb565b80156123705780601f1061234757610100808354040283529160200191612370565b820191905f5260205f20905b81548152906001019060200180831161235357829003601f168201915b5050505050815260200160038201805461238990614feb565b80601f01602080910402602001604051908101604052809291908181526020018280546123b590614feb565b80156124005780601f106123d757610100808354040283529160200191612400565b820191905f5260205f20905b8154815290600101906020018083116123e357829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152836124468985614fc0565b8151811061245657612456614f21565b602002602001018190525050808061246d90614fd3565b9150506121da565b5098975050505050505050565b5f6101005460ff546124949190614fc0565b905090565b60fb546124b7903390600160501b90046001600160a01b0316613dde565b61194c613fa5565b5f818311156124e15760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f908152610106602052604081205490612511825f908152610107602052604090205490565b90508084116125205783612522565b805b93505f855b8581101561257f575f8481526101076020526040812080548390811061254f5761254f614f21565b905f5260205f200154905061256381613fe2565b1561257657826125728161514e565b9350505b50600101612527565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f036125d6576040516334d6e01560e01b815260040160405180910390fd5b5f826125e3600186614fc0565b6125ed9190614fa9565b6125f8906001614f0e565b90505f6126058483614f0e565b905060fe548111612616578061261a565b60fe545b90505f846001600160401b0381111561263557612635614bf0565b60405190808252806020026020018201604052801561266e57816020015b61265b61472b565b8152602001906001900390816126535790505b5090505f835b838110156128f35761268581613a53565b156128e1575f818152610102602052604090819020815161010081019092528054829060ff1660058111156126bc576126bc614af6565b60058111156126cd576126cd614af6565b81526020016001820180546126e190614feb565b80601f016020809104026020016040519081016040528092919081815260200182805461270d90614feb565b80156127585780601f1061272f57610100808354040283529160200191612758565b820191905f5260205f20905b81548152906001019060200180831161273b57829003601f168201915b5050505050815260200160028201805461277190614feb565b80601f016020809104026020016040519081016040528092919081815260200182805461279d90614feb565b80156127e85780601f106127bf576101008083540402835291602001916127e8565b820191905f5260205f20905b8154815290600101906020018083116127cb57829003601f168201915b5050505050815260200160038201805461280190614feb565b80601f016020809104026020016040519081016040528092919081815260200182805461282d90614feb565b80156128785780601f1061284f57610100808354040283529160200191612878565b820191905f5260205f20905b81548152906001019060200180831161285b57829003601f168201915b505050918352505060048201546001600160a01b03166020820152600582015460408201526006820154606082015260079091015460809091015283518490849081106128c7576128c7614f21565b602002602001018190525081806128dd90614fd3565b9250505b806128eb81614fd3565b915050612674565b50815295945050505050565b5f61290981613ce9565b61291282613511565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb546129a6903390600160501b90046001600160a01b03166139ce565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b490602001611466565b60fb5460408051637a87fa0b60e01b81529051612a30923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fdf573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da990602001611466565b6101056020525f90815260409020805460018201805460ff8084169461010090940416929190612a9590614feb565b80601f0160208091040260200160405190810160405280929190818152602001828054612ac190614feb565b8015612b0c5780601f10612ae357610100808354040283529160200191612b0c565b820191905f5260205f20905b815481529060010190602001808311612aef57829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f82815260656020526040902060010154612b4981613ce9565b6117198383613d78565b610107602052815f5260405f208181548110612b6d575f80fd5b905f5260205f20015f91509150505481565b612b876136c6565b612b8f6134cb565b5f612b9933613f37565b90505f80612ba988878686614268565b915091505f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c239190614e6a565b90505f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c9b9190614e6a565b90505f5b848110156130fa57816001600160a01b0316639f55941b8d8d84818110612cc857612cc8614f21565b9050602002810190612cda9190614f35565b8d8d86818110612cec57612cec614f21565b9050602002810190612cfe9190614f35565b8d8d88818110612d1057612d10614f21565b9050602002810190612d229190614f35565b6040518763ffffffff1660e01b8152600401612d4396959493929190615173565b5f604051808303815f87803b158015612d5a575f80fd5b505af1158015612d6c573d5f803e3d5ffd5b505050505f836001600160a01b0316637f70ce0d6001898589612d8f9190614f0e565b60fe546040516001600160e01b031960e087901b16815260ff90941660048501526024840192909252604483015260648201526084016020604051808303815f875af1158015612de1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e059190614e6a565b604080516101008101909152909150805f81526020018e8e85818110612e2d57612e2d614f21565b9050602002810190612e3f9190614f35565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018c8c85818110612e8a57612e8a614f21565b9050602002810190612e9c9190614f35565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018a8a85818110612ee757612ee7614f21565b9050602002810190612ef99190614f35565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b03841660208084019190915260408084018c905260608401839052608090930182905260fe54825261010290522081518154829060ff19166001836005811115612f8157612f81614af6565b021790555060208201516001820190612f9a90826151bb565b5060408201516002820190612faf90826151bb565b5060608201516003820190612fc490826151bb565b5060808201516004820180546001600160a01b0319166001600160a01b0390921691909117905560a0820151600582015560c0820151600682015560e09091015160079091015560fe546101038e8e8581811061302357613023614f21565b90506020028101906130359190614f35565b604051613043929190614f77565b9081526040805160209281900383019020929092555f898152610107825291822060fe5481546001810183559184529190922090910155337fab5128638b64e6216e80dfafa70d3cb6d54913a536dc41e76eb4a04cfbe979cf8e8e858181106130ae576130ae614f21565b90506020028101906130c09190614f35565b60fe546040516130d293929190614f86565b60405180910390a260fe8054905f6130e983614fd3565b919050555081600101915050612c9f565b5060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa15801561314c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131709190614e6a565b6001600160a01b031663eda0ae128560fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131f49190614ee3565b6131fe9190614fa9565b8d8d8d8d8b8a6040518863ffffffff1660e01b8152600401613225969594939291906152ff565b5f604051808303818588803b15801561323c575f80fd5b505af115801561324e573d5f803e3d5ffd5b505050505050505050506113b9600160c955565b5f8061326d33613f37565b5f818152610105602052604090205490915083151561010090910460ff161515036132ab57604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133209190614ee3565b5f82815261010860205260409020546133399190614f0e565b4310156133595760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b031691508215613450576001600160a01b03821631156133d857816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156133c1575f80fd5b505af11580156133d3573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613429573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061344d9190614e6a565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff161561194c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161190f565b6001600160a01b03811661204e5760405163d92e233d60e01b815260040160405180910390fd5b6040518060a00160405280600115158152602001851515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b0384166020808401919091523360409384015260fd548252610105815290829020835181549285015161ffff1990931690151561ff00191617610100921515929092029190911781559082015160018201906135ee90826151bb565b5060608201516002820180546001600160a01b03199081166001600160a01b039384161790915560809093015160039092018054909316911617905560fd8054335f9081526101066020908152604080832084905592825261010890529081204390558154919061365e83614fd3565b9190505550336001600160a01b03167f55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd482600160fd5461369e9190614fc0565b604080516001600160a01b039093168352602083019190915287151590820152606001611c5a565b600260c954036137185760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161190f565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa15801561376a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061378e9190614ec8565b6117195760405163168dfea160e01b815260040160405180910390fd5b8015806137d957505f818152610102602052604081205460ff1660058111156137d6576137d6614af6565b14155b1561204e576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff80548452610104909252822083905580549161383083614fd3565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa1580156138b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138d99190614e6a565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa158015613938573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061395c9190614ee3565b61396e90673782dace9d900000614fc0565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b1580156139ab575f80fd5b505af11580156139bd573d5f803e3d5ffd5b5050505050505050565b600160c955565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa158015613a12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a369190614ec8565b6119225760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff166005811115613a8857613a88614af6565b6005811115613a9957613a99614af6565b8152602001600182018054613aad90614feb565b80601f0160208091040260200160405190810160405280929190818152602001828054613ad990614feb565b8015613b245780601f10613afb57610100808354040283529160200191613b24565b820191905f5260205f20905b815481529060010190602001808311613b0757829003601f168201915b50505050508152602001600282018054613b3d90614feb565b80601f0160208091040260200160405190810160405280929190818152602001828054613b6990614feb565b8015613bb45780601f10613b8b57610100808354040283529160200191613bb4565b820191905f5260205f20905b815481529060010190602001808311613b9757829003601f168201915b50505050508152602001600382018054613bcd90614feb565b80601f0160208091040260200160405190810160405280929190818152602001828054613bf990614feb565b8015613c445780601f10613c1b57610100808354040283529160200191613c44565b820191905f5260205f20905b815481529060010190602001808311613c2757829003601f168201915b50505091835250506004828101546001600160a01b03166020830152600583015460408301526006830154606083015260079092015460809091015290915081516005811115613c9657613c96614af6565b149392505050565b806101015f828254613cb09190614fc0565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece390602001611466565b61204e8133614483565b613cfd828261258a565b611922575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613d343390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b613d82828261258a565b15611922575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015613e22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e469190614ec8565b6119225760405163c4230ae360e01b815260040160405180910390fd5b613e6b6144dc565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f54610100900460ff1661194c5760405162461bcd60e51b815260040161190f9061533b565b5f54610100900460ff16613f015760405162461bcd60e51b815260040161190f9061533b565b61194c614525565b5f54610100900460ff16613f2f5760405162461bcd60e51b815260040161190f9061533b565b61194c614557565b6001600160a01b0381165f908152610106602052604081205490819003613f715760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff16613fa05760405163c11cb1df60e01b815260040160405180910390fd5b919050565b613fad6134cb565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613e983390565b5f818152610102602052604080822081516101008101909252805483929190829060ff16600581111561401757614017614af6565b600581111561402857614028614af6565b815260200160018201805461403c90614feb565b80601f016020809104026020016040519081016040528092919081815260200182805461406890614feb565b80156140b35780601f1061408a576101008083540402835291602001916140b3565b820191905f5260205f20905b81548152906001019060200180831161409657829003601f168201915b505050505081526020016002820180546140cc90614feb565b80601f01602080910402602001604051908101604052809291908181526020018280546140f890614feb565b80156141435780601f1061411a57610100808354040283529160200191614143565b820191905f5260205f20905b81548152906001019060200180831161412657829003601f168201915b5050505050815260200160038201805461415c90614feb565b80601f016020809104026020016040519081016040528092919081815260200182805461418890614feb565b80156141d35780601f106141aa576101008083540402835291602001916141d3565b820191905f5260205f20905b8154815290600101906020018083116141b657829003601f168201915b505050918352505060048201546001600160a01b031660208201526005808301546040830152600683015460608301526007909201546080909101529091508151600581111561422557614225614af6565b1480614243575060028151600581111561424157614241614af6565b145b80614260575060018151600581111561425e5761425e614af6565b145b159392505050565b5f8084861415806142795750838614155b156142975760405163e5fe884360e01b815260040160405180910390fd5b8591508115806142ac575060fb5461ffff1682115b156142ca576040516379b348ff60e11b815260040160405180910390fd5b505f8281526101076020526040812054906142e63382846124bf565b60fb546001600160401b039182169250620100009004166143078483614f0e565b111561432657604051633e10caad60e21b815260040160405180910390fd5b614338673782dace9d90000084614fa9565b341461435757604051635aaa2d1f60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b031663aa9537956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143cc9190614e6a565b6001600160a01b031663b178e38e3360016143e78786614f0e565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260ff90911660248301526044820152606401602060405180830381865afa158015614438573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061445c9190614ec8565b61447957604051633bf053fd60e11b815260040160405180910390fd5b5094509492505050565b61448d828261258a565b6119225761449a8161457d565b6144a583602061458f565b6040516020016144b6929190615386565b60408051601f198184030181529082905262461bcd60e51b825261190f916004016153fa565b60975460ff1661194c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161190f565b5f54610100900460ff1661454b5760405162461bcd60e51b815260040161190f9061533b565b6097805460ff19169055565b5f54610100900460ff166139c75760405162461bcd60e51b815260040161190f9061533b565b6060610b556001600160a01b03831660145b60605f61459d836002614fa9565b6145a8906002614f0e565b6001600160401b038111156145bf576145bf614bf0565b6040519080825280601f01601f1916602001820160405280156145e9576020820181803683370190505b509050600360fc1b815f8151811061460357614603614f21565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061463157614631614f21565b60200101906001600160f81b03191690815f1a9053505f614653846002614fa9565b61465e906001614f0e565b90505b60018111156146d5576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061469257614692614f21565b1a60f81b8282815181106146a8576146a8614f21565b60200101906001600160f81b03191690815f1a90535060049490941c936146ce8161540c565b9050614661565b5083156147245760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161190f565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f60208284031215614785575f80fd5b81356001600160e01b031981168114614724575f80fd5b801515811461204e575f80fd5b5f8083601f8401126147b9575f80fd5b5081356001600160401b038111156147cf575f80fd5b6020830191508360208285010111156147e6575f80fd5b9250929050565b6001600160a01b038116811461204e575f80fd5b5f805f8060608587031215614814575f80fd5b843561481f8161479c565b935060208501356001600160401b03811115614839575f80fd5b614845878288016147a9565b9094509250506040850135614859816147ed565b939692955090935050565b5f8083601f840112614874575f80fd5b5081356001600160401b0381111561488a575f80fd5b6020830191508360208260051b85010111156147e6575f80fd5b5f805f805f80606087890312156148b9575f80fd5b86356001600160401b03808211156148cf575f80fd5b6148db8a838b01614864565b909850965060208901359150808211156148f3575f80fd5b6148ff8a838b01614864565b90965094506040890135915080821115614917575f80fd5b5061492489828a01614864565b979a9699509497509295939492505050565b5f60208284031215614946575f80fd5b5035919050565b5f6020828403121561495d575f80fd5b813561ffff81168114614724575f80fd5b5f806020838503121561497f575f80fd5b82356001600160401b03811115614994575f80fd5b6149a085828601614864565b90969095509350505050565b5f80604083850312156149bd575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b81811015614a0c5783516001600160a01b0316835292840192918401916001016149e7565b50909695505050505050565b5f8060408385031215614a29575f80fd5b823591506020830135614a3b816147ed565b809150509250929050565b5f8060208385031215614a57575f80fd5b82356001600160401b03811115614a6c575f80fd5b6149a0858286016147a9565b5f8060408385031215614a89575f80fd5b8235614a94816147ed565b91506020830135614a3b816147ed565b5f805f60408486031215614ab6575f80fd5b83356001600160401b03811115614acb575f80fd5b614ad7868287016147a9565b9094509250506020840135614aeb816147ed565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614b2657634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015614b44578181015183820152602001614b2c565b50505f910152565b5f8151808452614b63816020860160208601614b2a565b601f01601f19169290920160200192915050565b5f610100614b85838c614b0a565b806020840152614b978184018b614b4c565b90508281036040840152614bab818a614b4c565b90508281036060840152614bbf8189614b4c565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215614c14575f80fd5b81356001600160401b0380821115614c2a575f80fd5b818401915084601f830112614c3d575f80fd5b813581811115614c4f57614c4f614bf0565b604051601f8201601f19908116603f01168101908382118183101715614c7757614c77614bf0565b81604052828152876020848701011115614c8f575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f60208284031215614cbe575f80fd5b81356001600160401b0381168114614724575f80fd5b5f805f60608486031215614ce6575f80fd5b8335614cf1816147ed565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b83811015614de257603f198984030185528151610100614d4c858351614b0a565b88820151818a870152614d6182870182614b4c565b9150508782015185820389870152614d798282614b4c565b91505060608083015186830382880152614d938382614b4c565b92505050608080830151614db1828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e09182015191909401529386019390860190600101614d2b565b509098975050505050505050565b5f60208284031215614e00575f80fd5b8135614724816147ed565b8515158152841515602082015260a060408201525f614e2d60a0830186614b4c565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f60208284031215614e5f575f80fd5b81356147248161479c565b5f60208284031215614e7a575f80fd5b8151614724816147ed565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f614ec0602083018486614e85565b949350505050565b5f60208284031215614ed8575f80fd5b81516147248161479c565b5f60208284031215614ef3575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b5557610b55614efa565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112614f4a575f80fd5b8301803591506001600160401b03821115614f63575f80fd5b6020019150368190038213156147e6575f80fd5b818382375f9101908152919050565b604081525f614f99604083018587614e85565b9050826020830152949350505050565b8082028115828204841417610b5557610b55614efa565b81810381811115610b5557610b55614efa565b5f60018201614fe457614fe4614efa565b5060010190565b600181811c90821680614fff57607f821691505b60208210810361501d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115611719575f81815260208120601f850160051c810160208610156150495750805b601f850160051c820191505b818110156113b957828155600101615055565b6001600160401b0383111561507f5761507f614bf0565b6150938361508d8354614feb565b83615023565b5f601f8411600181146150c4575f85156150ad5750838201355b5f19600387901b1c1916600186901b17835561511c565b5f83815260209020601f19861690835b828110156150f457868501358255602094850194600190920191016150d4565b5086821015615110575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f615136604083018587614e85565b905060018060a01b0383166020830152949350505050565b5f6001600160401b0380831681810361516957615169614efa565b6001019392505050565b606081525f61518660608301888a614e85565b8281036020840152615199818789614e85565b905082810360408401526151ae818587614e85565b9998505050505050505050565b81516001600160401b038111156151d4576151d4614bf0565b6151e8816151e28454614feb565b84615023565b602080601f83116001811461521b575f84156152045750858301515b5f19600386901b1c1916600185901b1785556113b9565b5f85815260208120601f198616915b828110156152495788860151825594840194600190910190840161522a565b508582101561526657878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8183525f60208085019450848460051b8601845f5b878110156152f25783830389528135601e198836030181126152ab575f80fd5b870185810190356001600160401b038111156152c5575f80fd5b8036038213156152d3575f80fd5b6152de858284614e85565b9a87019a945050509084019060010161528b565b5090979650505050505050565b608081525f61531260808301888a615276565b8281036020840152615325818789615276565b6040840195909552505060600152949350505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516153bd816017850160208801614b2a565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516153ee816028840160208801614b2a565b01602801949350505050565b602081525f6147246020830184614b4c565b5f8161541a5761541a614efa565b505f19019056fea2646970667358221220fa16a22260d29f7dcdf996d53e3ce183d121812d49a591d3c1cc302f0341140364736f6c63430008140033", } // PermissionlessNodeRegistryABI is the input ABI used to generate the binding from. // Deprecated: Use PermissionlessNodeRegistryMetaData.ABI instead. var PermissionlessNodeRegistryABI = PermissionlessNodeRegistryMetaData.ABI +// PermissionlessNodeRegistryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use PermissionlessNodeRegistryMetaData.Bin instead. +var PermissionlessNodeRegistryBin = PermissionlessNodeRegistryMetaData.Bin + +// DeployPermissionlessNodeRegistry deploys a new Ethereum contract, binding an instance of PermissionlessNodeRegistry to it. +func DeployPermissionlessNodeRegistry(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *PermissionlessNodeRegistry, error) { + parsed, err := PermissionlessNodeRegistryMetaData.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(PermissionlessNodeRegistryBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &PermissionlessNodeRegistry{PermissionlessNodeRegistryCaller: PermissionlessNodeRegistryCaller{contract: contract}, PermissionlessNodeRegistryTransactor: PermissionlessNodeRegistryTransactor{contract: contract}, PermissionlessNodeRegistryFilterer: PermissionlessNodeRegistryFilterer{contract: contract}}, nil +} + // PermissionlessNodeRegistry is an auto generated Go binding around an Ethereum contract. type PermissionlessNodeRegistry struct { PermissionlessNodeRegistryCaller // Read-only binding to the contract @@ -347,12 +369,12 @@ func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) GetA return _PermissionlessNodeRegistry.Contract.GetAllActiveValidators(&_PermissionlessNodeRegistry.CallOpts, _pageNumber, _pageSize) } -// GetAllSocializingPoolOptOutOperators is a free data retrieval call binding the contract method 0x61e2f809. +// GetAllNodeELVaultAddress is a free data retrieval call binding the contract method 0x2d32924f. // -// Solidity: function getAllSocializingPoolOptOutOperators(uint256 _pageNumber, uint256 _pageSize) view returns(address[]) -func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) GetAllSocializingPoolOptOutOperators(opts *bind.CallOpts, _pageNumber *big.Int, _pageSize *big.Int) ([]common.Address, error) { +// Solidity: function getAllNodeELVaultAddress(uint256 _pageNumber, uint256 _pageSize) view returns(address[]) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) GetAllNodeELVaultAddress(opts *bind.CallOpts, _pageNumber *big.Int, _pageSize *big.Int) ([]common.Address, error) { var out []interface{} - err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "getAllSocializingPoolOptOutOperators", _pageNumber, _pageSize) + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "getAllNodeELVaultAddress", _pageNumber, _pageSize) if err != nil { return *new([]common.Address), err @@ -364,18 +386,18 @@ func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) GetAllSocia } -// GetAllSocializingPoolOptOutOperators is a free data retrieval call binding the contract method 0x61e2f809. +// GetAllNodeELVaultAddress is a free data retrieval call binding the contract method 0x2d32924f. // -// Solidity: function getAllSocializingPoolOptOutOperators(uint256 _pageNumber, uint256 _pageSize) view returns(address[]) -func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) GetAllSocializingPoolOptOutOperators(_pageNumber *big.Int, _pageSize *big.Int) ([]common.Address, error) { - return _PermissionlessNodeRegistry.Contract.GetAllSocializingPoolOptOutOperators(&_PermissionlessNodeRegistry.CallOpts, _pageNumber, _pageSize) +// Solidity: function getAllNodeELVaultAddress(uint256 _pageNumber, uint256 _pageSize) view returns(address[]) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) GetAllNodeELVaultAddress(_pageNumber *big.Int, _pageSize *big.Int) ([]common.Address, error) { + return _PermissionlessNodeRegistry.Contract.GetAllNodeELVaultAddress(&_PermissionlessNodeRegistry.CallOpts, _pageNumber, _pageSize) } -// GetAllSocializingPoolOptOutOperators is a free data retrieval call binding the contract method 0x61e2f809. +// GetAllNodeELVaultAddress is a free data retrieval call binding the contract method 0x2d32924f. // -// Solidity: function getAllSocializingPoolOptOutOperators(uint256 _pageNumber, uint256 _pageSize) view returns(address[]) -func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) GetAllSocializingPoolOptOutOperators(_pageNumber *big.Int, _pageSize *big.Int) ([]common.Address, error) { - return _PermissionlessNodeRegistry.Contract.GetAllSocializingPoolOptOutOperators(&_PermissionlessNodeRegistry.CallOpts, _pageNumber, _pageSize) +// Solidity: function getAllNodeELVaultAddress(uint256 _pageNumber, uint256 _pageSize) view returns(address[]) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) GetAllNodeELVaultAddress(_pageNumber *big.Int, _pageSize *big.Int) ([]common.Address, error) { + return _PermissionlessNodeRegistry.Contract.GetAllNodeELVaultAddress(&_PermissionlessNodeRegistry.CallOpts, _pageNumber, _pageSize) } // GetCollateralETH is a free data retrieval call binding the contract method 0xb01db078. diff --git a/stader-lib/contracts/permissionless-pool.go b/stader-lib/contracts/permissionless-pool.go index e1c062760..ed94b9902 100644 --- a/stader-lib/contracts/permissionless-pool.go +++ b/stader-lib/contracts/permissionless-pool.go @@ -31,13 +31,35 @@ var ( // PermissionlessPoolMetaData contains all meta data concerning the PermissionlessPool contract. var PermissionlessPoolMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CouldNotDetermineExcessETH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCommission\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorFeeUnchanged\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeeUnchanged\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ReceivedCollateralETH\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ReceivedInsuranceFund\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredETHToSSPMForDefectiveKeys\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorFee\",\"type\":\"uint256\"}],\"name\":\"UpdatedCommissionFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorDepositedOnBeaconChain\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorPreDepositedOnBeaconChain\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEPOSIT_NODE_BOND\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_COMMISSION_LIMIT_BIPS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ID\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_withdrawCredential\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_depositAmount\",\"type\":\"uint256\"}],\"name\":\"computeDepositDataRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllSocializingPoolOptOutOperators\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"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\":[],\"name\":\"getSocializingPoolAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"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\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_operatorTotalKeys\",\"type\":\"uint256\"}],\"name\":\"preDepositOnBeaconChain\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"receiveRemainingCollateralETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"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\":\"uint256\",\"name\":\"_protocolFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_operatorFee\",\"type\":\"uint256\"}],\"name\":\"setCommissionFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeUserETHToBeaconChain\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CouldNotDetermineExcessETH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCommission\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ReceivedCollateralETH\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ReceivedInsuranceFund\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredETHToSSPMForDefectiveKeys\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorFee\",\"type\":\"uint256\"}],\"name\":\"UpdatedCommissionFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorDepositedOnBeaconChain\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorPreDepositedOnBeaconChain\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEPOSIT_NODE_BOND\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_COMMISSION_LIMIT_BIPS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_withdrawCredential\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_depositAmount\",\"type\":\"uint256\"}],\"name\":\"computeDepositDataRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"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\":[],\"name\":\"getSocializingPoolAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"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\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_operatorTotalKeys\",\"type\":\"uint256\"}],\"name\":\"preDepositOnBeaconChain\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"receiveRemainingCollateralETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"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\":\"uint256\",\"name\":\"_protocolFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_operatorFee\",\"type\":\"uint256\"}],\"name\":\"setCommissionFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeUserETHToBeaconChain\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x608060405234801562000010575f80fd5b506200001b62000021565b620000e0565b5f54610100900460ff16156200008d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161015620000de575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612eba80620000ee5f395ff3fe60806040526004361061019f575f3560e01c806389afc0f1116100eb578063b01db07811610089578063d547741f11610063578063d547741f14610463578063eda0ae1214610482578063f74b4cd114610495578063f9c4dda4146104a9576101bd565b8063b01db07814610426578063b0e21e8a1461043a578063b6fb3fac1461044f576101bd565b80639b26728e116100c55780639b26728e146103d75780639cd6dd56146103df5780639ee804cb146103f4578063a217fddf14610413576101bd565b806389afc0f1146103845780638a25bcec1461039957806391d14854146103b8576101bd565b806336514d9f11610158578063490ffa3511610132578063490ffa35146103065780635c164e531461033d57806377c359e11461035c5780637bd977d914610370576101bd565b806336514d9f146102a957806336568abe146102c8578063485cc955146102e7576101bd565b806301ffc9a7146101d65780631f033ef01461020a57806321066d1814610214578063248a9ca31461023357806324f697061461026f5780632f2ff15d1461028a576101bd565b366101bd57604051639ba6061b60e01b815260040160405180910390fd5b604051639ba6061b60e01b815260040160405180910390fd5b3480156101e1575f80fd5b506101f56101f036600461256a565b6104c8565b60405190151581526020015b60405180910390f35b6102126104fe565b005b34801561021f575f80fd5b5061021261022e366004612591565b6105ab565b34801561023e575f80fd5b5061026161024d3660046125b1565b5f9081526065602052604090206001015490565b604051908152602001610201565b34801561027a575f80fd5b506102616729a2241af62c000081565b348015610295575f80fd5b506102126102a43660046125dc565b610636565b3480156102b4575f80fd5b506101f56102c336600461264f565b61065f565b3480156102d3575f80fd5b506102126102e23660046125dc565b61073d565b3480156102f2575f80fd5b5061021261030136600461268e565b6107c0565b348015610311575f80fd5b5060c954610325906001600160a01b031681565b6040516001600160a01b039091168152602001610201565b348015610348575f80fd5b506102616103573660046126ba565b610916565b348015610367575f80fd5b50610261610c51565b34801561037b575f80fd5b50610261610d20565b34801561038f575f80fd5b5061026160cb5481565b3480156103a4575f80fd5b506102616103b3366004612755565b610dc6565b3480156103c3575f80fd5b506101f56103d23660046125dc565b610ebb565b610212610ee5565b3480156103ea575f80fd5b506102616105dc81565b3480156103ff575f80fd5b5061021261040e366004612787565b6113d6565b34801561041e575f80fd5b506102615f81565b348015610431575f80fd5b50610261611437565b348015610445575f80fd5b5061026160ca5481565b34801561045a575f80fd5b506103256114dd565b34801561046e575f80fd5b5061021261047d3660046125dc565b611548565b6102126104903660046127e3565b61156c565b3480156104a0575f80fd5b50610325611b30565b3480156104b4575f80fd5b506101f56104c3366004612787565b611b77565b5f6001600160e01b03198216637965db0b60e01b14806104f857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60c95460408051630a9548ed60e11b815290516105769233926001600160a01b0390911691829163152a91da9160048083019260209291908290030181865afa15801561054d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610571919061285b565b611c4c565b6040513481527f3726a70cbf9252aacb06774b2f9f7108d837fc60afd7143f86eec77d7e3da94b9060200160405180910390a1565b60c9546105c29033906001600160a01b0316611cd8565b6105dc6105cf8284612886565b11156105ee5760405163dc81db8560e01b815260040160405180910390fd5b60ca82905560cb81905560408051838152602081018390527fe8525a7862504bbe091b0440fe96979769664cae1625591ff0a9816512a5287b91015b60405180910390a15050565b5f8281526065602052604090206001015461065081611d5d565b61065a8383611d6a565b505050565b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa1580156106a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ca91906128a9565b6001600160a01b03166336514d9f84846040518363ffffffff1660e01b81526004016106f79291906128ec565b602060405180830381865afa158015610712573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107369190612907565b9392505050565b6001600160a01b03811633146107b25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107bc8282611def565b5050565b5f54610100900460ff16158080156107de57505f54600160ff909116105b806107f75750303b1580156107f757505f5460ff166001145b61085a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107a9565b5f805460ff19166001179055801561087b575f805461ff0019166101001790555b61088483611e55565b61088d82611e55565b610895611e7c565b61089d611ea2565b6101f460ca81905560cb5560c980546001600160a01b0319166001600160a01b0384161790556108cd5f84611d6a565b801561065a575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b5f8061092183611ed0565b90505f60028a8a5f60801b60405160200161093e93929190612926565b60408051601f19818403018152908290526109589161296f565b602060405180830381855afa158015610973573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610996919061285b565b90505f6002806109a96040848c8e61298a565b6040516020016109ba9291906129b1565b60408051601f19818403018152908290526109d49161296f565b602060405180830381855afa1580156109ef573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a12919061285b565b6002610a218b6040818f61298a565b604051610a349291905f906020016129c0565b60408051601f1981840301815290829052610a4e9161296f565b602060405180830381855afa158015610a69573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8c919061285b565b60408051602081019390935282015260600160408051601f1981840301815290829052610ab89161296f565b602060405180830381855afa158015610ad3573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610af6919061285b565b9050600280838989604051602001610b10939291906129d2565b60408051601f1981840301815290829052610b2a9161296f565b602060405180830381855afa158015610b45573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b68919061285b565b604051600290610b809087905f9087906020016129eb565b60408051601f1981840301815290829052610b9a9161296f565b602060405180830381855afa158015610bb5573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610bd8919061285b565b60408051602081019390935282015260600160408051601f1981840301815290829052610c049161296f565b602060405180830381855afa158015610c1f573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610c42919061285b565b9b9a5050505050505050505050565b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa158015610c98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cbc91906128a9565b6001600160a01b03166377c359e16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1b919061285b565b905090565b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa158015610d67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8b91906128a9565b6001600160a01b0316637bd977d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf7573d5f803e3d5ffd5b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa158015610e0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3191906128a9565b6040516322896f3b60e21b81526001600160a01b03868116600483015260248201869052604482018590529190911690638a25bcec90606401602060405180830381865afa158015610e85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea99190612a22565b67ffffffffffffffff16949350505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610eed61208c565b60c9546040805163529deeeb60e11b81529051610f3c9233926001600160a01b0390911691829163a53bddd69160048083019260209291908290030181865afa15801561054d573d5f803e3d5ffd5b5f6729a2241af62c000060c95f9054906101000a90046001600160a01b03166001600160a01b031663fa71fcbb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fba919061285b565b610fc49190612a49565b610fce9034612a5c565b90505f60c95f9054906101000a90046001600160a01b03166001600160a01b031663360374a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611021573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104591906128a9565b90506001600160a01b038116635ae7f25d6110686729a2241af62c000085612a7b565b6040518263ffffffff1660e01b815260040161108691815260200190565b5f604051808303815f87803b15801561109d575f80fd5b505af11580156110af573d5f803e3d5ffd5b505050505f60c95f9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015611104573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112891906128a9565b90505f60c95f9054906101000a90046001600160a01b03166001600160a01b0316638f8b38676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061119f91906128a9565b90505f836001600160a01b03166374338e6d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611202919061285b565b9050805b6112108287612886565b81101561130b5760405163bc4a3ad560e01b8152600481018290525f906001600160a01b0387169063bc4a3ad590602401602060405180830381865afa15801561125c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611280919061285b565b90506113028686868460c95f9054906101000a90046001600160a01b03166001600160a01b031663fa71fcbb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112fd919061285b565b6120e5565b50600101611206565b506001600160a01b03841663b8d2f06c6113258784612886565b6040518263ffffffff1660e01b815260040161134391815260200190565b5f604051808303815f87803b15801561135a575f80fd5b505af115801561136c573d5f803e3d5ffd5b50506040516359c3c9b760e01b8152600481018890526001600160a01b03871692506359c3c9b791506024015f604051808303815f87803b1580156113af575f80fd5b505af11580156113c1573d5f803e3d5ffd5b5050505050505050506113d46001609755565b565b5f6113e081611d5d565b6113e982611e55565b60c980546001600160a01b0319166001600160a01b0384169081179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200161062a565b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa15801561147e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114a291906128a9565b6001600160a01b031663b01db0786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf7573d5f803e3d5ffd5b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa158015611524573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1b91906128a9565b5f8281526065602052604090206001015461156281611d5d565b61065a8383611def565b61157461208c565b60c95460408051630a9548ed60e11b815290516115c39233926001600160a01b0390911691829163152a91da9160048083019260209291908290030181865afa15801561054d573d5f803e3d5ffd5b60c9546040805163062f2ca160e21b815290515f926001600160a01b0316916318bcb2849160048083019260209291908290030181865afa15801561160a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061162e91906128a9565b9050855f5b81811015611b1b575f836001600160a01b03166374903b0260c95f9054906101000a90046001600160a01b03166001600160a01b031663360374a46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561169b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116bf91906128a9565b6001600160a01b031663e0d7d0e96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061171e9190612a92565b88611729868a612886565b6040516001600160e01b031960e086901b16815260ff909316600484015260248301919091526044820152606401602060405180830381865afa158015611772573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061179691906128a9565b60405163ae4e4e4560e01b81526001600160a01b0380831660048301529192505f9186169063ae4e4e45906024015f60405180830381865afa1580156117de573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526118059190810190612b4b565b90505f30635c164e538d8d8781811061182057611820612b7d565b90506020028101906118329190612b91565b8d8d8981811061184457611844612b7d565b90506020028101906118569190612b91565b60c95460408051630829764560e01b815290518a926001600160a01b03169163082976459160048083019260209291908290030181865afa15801561189d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c1919061285b565b6040518763ffffffff1660e01b81526004016118e296959493929190612bff565b602060405180830381865afa1580156118fd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611921919061285b565b905060c95f9054906101000a90046001600160a01b03166001600160a01b0316638f8b38676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611973573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199791906128a9565b6001600160a01b0316632289511860c95f9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a19919061285b565b8e8e88818110611a2b57611a2b612b7d565b9050602002810190611a3d9190612b91565b868f8f8b818110611a5057611a50612b7d565b9050602002810190611a629190612b91565b886040518863ffffffff1660e01b8152600401611a8496959493929190612c4d565b5f604051808303818588803b158015611a9b575f80fd5b505af1158015611aad573d5f803e3d5ffd5b50505050507fa35366ad083efbaee7949ff15c68508b95e2c0441248e80d73da97ac82bc1f108c8c86818110611ae557611ae5612b7d565b9050602002810190611af79190612b91565b604051611b059291906128ec565b60405180910390a1836001019350505050611633565b505050611b286001609755565b505050505050565b60c9546040805163051fdecd60e11b815290515f926001600160a01b031691630a3fbd9a9160048083019260209291908290030181865afa158015611524573d5f803e3d5ffd5b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa158015611bbe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be291906128a9565b604051633e71376960e21b81526001600160a01b038481166004830152919091169063f9c4dda490602401602060405180830381865afa158015611c28573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f89190612907565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa158015611c97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cbb9190612907565b61065a5760405163168dfea160e01b815260040160405180910390fd5b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015611d1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d409190612907565b6107bc5760405163c4230ae360e01b815260040160405180910390fd5b611d678133612343565b50565b611d748282610ebb565b6107bc575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611dab3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611df98282610ebb565b156107bc575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b038116611d675760405163d92e233d60e01b815260040160405180910390fd5b5f54610100900460ff166113d45760405162461bcd60e51b81526004016107a990612c87565b5f54610100900460ff16611ec85760405162461bcd60e51b81526004016107a990612c87565b6113d461239c565b60605f611ee1633b9aca0084612a5c565b60408051600880825281830190925291925060208201818036833701905050915060c081901b8060071a60f81b835f81518110611f2057611f20612b7d565b60200101906001600160f81b03191690815f1a9053508060061a60f81b83600181518110611f5057611f50612b7d565b60200101906001600160f81b03191690815f1a9053508060051a60f81b83600281518110611f8057611f80612b7d565b60200101906001600160f81b03191690815f1a9053508060041a60f81b83600381518110611fb057611fb0612b7d565b60200101906001600160f81b03191690815f1a9053508060031a60f81b83600481518110611fe057611fe0612b7d565b60200101906001600160f81b03191690815f1a9053508060021a60f81b8360058151811061201057612010612b7d565b60200101906001600160f81b03191690815f1a9053508060011a60f81b8360068151811061204057612040612b7d565b60200101906001600160f81b03191690815f1a905350805f1a60f81b8360078151811061206f5761206f612b7d565b60200101906001600160f81b03191690815f1a9053505050919050565b6002609754036120de5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107a9565b6002609755565b5f805f876001600160a01b0316635a1239c1866040518263ffffffff1660e01b815260040161211691815260200190565b5f60405180830381865afa158015612130573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121579190810190612ce0565b505060405163ae4e4e4560e01b81526001600160a01b0380841660048301529599509297509095505f945050918a169163ae4e4e4591506024015f60405180830381865afa1580156121ab573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121d29190810190612b4b565b604051635c164e5360e01b81529091505f903090635c164e5390612200908890889087908c90600401612d9f565b602060405180830381865afa15801561221b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061223f919061285b565b9050876001600160a01b0316632289511887878588866040518663ffffffff1660e01b81526004016122749493929190612d9f565b5f604051808303818588803b15801561228b575f80fd5b505af115801561229d573d5f803e3d5ffd5b505060405163186d954160e01b8152600481018b90526001600160a01b038e16935063186d9541925060240190505f604051808303815f87803b1580156122e2575f80fd5b505af11580156122f4573d5f803e3d5ffd5b50505050867fbef89de94658b7ef396ba7f9316542858c893c9011602906b1a2ad18d0a99c35866040516123289190612de9565b60405180910390a250505050505050505050565b6001609755565b61234d8282610ebb565b6107bc5761235a816123c2565b6123658360206123d4565b604051602001612376929190612dfb565b60408051601f198184030181529082905262461bcd60e51b82526107a991600401612de9565b5f54610100900460ff1661233c5760405162461bcd60e51b81526004016107a990612c87565b60606104f86001600160a01b03831660145b60605f6123e2836002612a7b565b6123ed906002612886565b67ffffffffffffffff81111561240557612405612ab2565b6040519080825280601f01601f19166020018201604052801561242f576020820181803683370190505b509050600360fc1b815f8151811061244957612449612b7d565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061247757612477612b7d565b60200101906001600160f81b03191690815f1a9053505f612499846002612a7b565b6124a4906001612886565b90505b600181111561251b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106124d8576124d8612b7d565b1a60f81b8282815181106124ee576124ee612b7d565b60200101906001600160f81b03191690815f1a90535060049490941c9361251481612e6f565b90506124a7565b5083156107365760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107a9565b5f6020828403121561257a575f80fd5b81356001600160e01b031981168114610736575f80fd5b5f80604083850312156125a2575f80fd5b50508035926020909101359150565b5f602082840312156125c1575f80fd5b5035919050565b6001600160a01b0381168114611d67575f80fd5b5f80604083850312156125ed575f80fd5b8235915060208301356125ff816125c8565b809150509250929050565b5f8083601f84011261261a575f80fd5b50813567ffffffffffffffff811115612631575f80fd5b602083019150836020828501011115612648575f80fd5b9250929050565b5f8060208385031215612660575f80fd5b823567ffffffffffffffff811115612676575f80fd5b6126828582860161260a565b90969095509350505050565b5f806040838503121561269f575f80fd5b82356126aa816125c8565b915060208301356125ff816125c8565b5f805f805f805f6080888a0312156126d0575f80fd5b873567ffffffffffffffff808211156126e7575f80fd5b6126f38b838c0161260a565b909950975060208a013591508082111561270b575f80fd5b6127178b838c0161260a565b909750955060408a013591508082111561272f575f80fd5b5061273c8a828b0161260a565b989b979a50959894979596606090950135949350505050565b5f805f60608486031215612767575f80fd5b8335612772816125c8565b95602085013595506040909401359392505050565b5f60208284031215612797575f80fd5b8135610736816125c8565b5f8083601f8401126127b2575f80fd5b50813567ffffffffffffffff8111156127c9575f80fd5b6020830191508360208260051b8501011115612648575f80fd5b5f805f805f80608087890312156127f8575f80fd5b863567ffffffffffffffff8082111561280f575f80fd5b61281b8a838b016127a2565b90985096506020890135915080821115612833575f80fd5b5061284089828a016127a2565b979a9699509760408101359660609091013595509350505050565b5f6020828403121561286b575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156104f8576104f8612872565b80516128a4816125c8565b919050565b5f602082840312156128b9575f80fd5b8151610736816125c8565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6128ff6020830184866128c4565b949350505050565b5f60208284031215612917575f80fd5b81518015158114610736575f80fd5b828482376fffffffffffffffffffffffffffffffff19919091169101908152601001919050565b5f5b8381101561296757818101518382015260200161294f565b50505f910152565b5f825161298081846020870161294d565b9190910192915050565b5f8085851115612998575f80fd5b838611156129a4575f80fd5b5050820193919092039150565b818382375f9101908152919050565b82848237909101908152602001919050565b838152818360208301375f910160200190815292915050565b5f84516129fc81846020890161294d565b67ffffffffffffffff199490941691909301908152601881019190915260380192915050565b5f60208284031215612a32575f80fd5b815167ffffffffffffffff81168114610736575f80fd5b818103818111156104f8576104f8612872565b5f82612a7657634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176104f8576104f8612872565b5f60208284031215612aa2575f80fd5b815160ff81168114610736575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112612ad5575f80fd5b815167ffffffffffffffff80821115612af057612af0612ab2565b604051601f8301601f19908116603f01168101908282118183101715612b1857612b18612ab2565b81604052838152866020858801011115612b30575f80fd5b612b4184602083016020890161294d565b9695505050505050565b5f60208284031215612b5b575f80fd5b815167ffffffffffffffff811115612b71575f80fd5b6128ff84828501612ac6565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112612ba6575f80fd5b83018035915067ffffffffffffffff821115612bc0575f80fd5b602001915036819003821315612648575f80fd5b5f8151808452612beb81602086016020860161294d565b601f01601f19169290920160200192915050565b608081525f612c1260808301888a6128c4565b8281036020840152612c258187896128c4565b90508281036040840152612c398186612bd4565b915050826060830152979650505050505050565b608081525f612c6060808301888a6128c4565b8281036020840152612c728188612bd4565b90508281036040840152612c398186886128c4565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b8051600681106128a4575f80fd5b5f805f805f805f80610100898b031215612cf8575f80fd5b612d0189612cd2565b9750602089015167ffffffffffffffff80821115612d1d575f80fd5b612d298c838d01612ac6565b985060408b0151915080821115612d3e575f80fd5b612d4a8c838d01612ac6565b975060608b0151915080821115612d5f575f80fd5b50612d6c8b828c01612ac6565b955050612d7b60808a01612899565b935060a0890151925060c0890151915060e089015190509295985092959890939650565b608081525f612db16080830187612bd4565b8281036020840152612dc38187612bd4565b90508281036040840152612dd78186612bd4565b91505082606083015295945050505050565b602081525f6107366020830184612bd4565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351612e3281601785016020880161294d565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612e6381602884016020880161294d565b01602801949350505050565b5f81612e7d57612e7d612872565b505f19019056fea26469706673582212204758ccfdf9a98ccf0999455c598ed27c9278ad8ad9d6696533e14b00e82825cc64736f6c63430008140033", } // PermissionlessPoolABI is the input ABI used to generate the binding from. // Deprecated: Use PermissionlessPoolMetaData.ABI instead. var PermissionlessPoolABI = PermissionlessPoolMetaData.ABI +// PermissionlessPoolBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use PermissionlessPoolMetaData.Bin instead. +var PermissionlessPoolBin = PermissionlessPoolMetaData.Bin + +// DeployPermissionlessPool deploys a new Ethereum contract, binding an instance of PermissionlessPool to it. +func DeployPermissionlessPool(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *PermissionlessPool, error) { + parsed, err := PermissionlessPoolMetaData.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(PermissionlessPoolBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &PermissionlessPool{PermissionlessPoolCaller: PermissionlessPoolCaller{contract: contract}, PermissionlessPoolTransactor: PermissionlessPoolTransactor{contract: contract}, PermissionlessPoolFilterer: PermissionlessPoolFilterer{contract: contract}}, nil +} + // PermissionlessPool is an auto generated Go binding around an Ethereum contract. type PermissionlessPool struct { PermissionlessPoolCaller // Read-only binding to the contract @@ -273,37 +295,6 @@ func (_PermissionlessPool *PermissionlessPoolCallerSession) MAXCOMMISSIONLIMITBI return _PermissionlessPool.Contract.MAXCOMMISSIONLIMITBIPS(&_PermissionlessPool.CallOpts) } -// POOLID is a free data retrieval call binding the contract method 0xe0d7d0e9. -// -// Solidity: function POOL_ID() view returns(uint8) -func (_PermissionlessPool *PermissionlessPoolCaller) POOLID(opts *bind.CallOpts) (uint8, error) { - var out []interface{} - err := _PermissionlessPool.contract.Call(opts, &out, "POOL_ID") - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// POOLID is a free data retrieval call binding the contract method 0xe0d7d0e9. -// -// Solidity: function POOL_ID() view returns(uint8) -func (_PermissionlessPool *PermissionlessPoolSession) POOLID() (uint8, error) { - return _PermissionlessPool.Contract.POOLID(&_PermissionlessPool.CallOpts) -} - -// POOLID is a free data retrieval call binding the contract method 0xe0d7d0e9. -// -// Solidity: function POOL_ID() view returns(uint8) -func (_PermissionlessPool *PermissionlessPoolCallerSession) POOLID() (uint8, error) { - return _PermissionlessPool.Contract.POOLID(&_PermissionlessPool.CallOpts) -} - // ComputeDepositDataRoot is a free data retrieval call binding the contract method 0x5c164e53. // // Solidity: function computeDepositDataRoot(bytes _pubkey, bytes _signature, bytes _withdrawCredential, uint256 _depositAmount) pure returns(bytes32) @@ -335,37 +326,6 @@ func (_PermissionlessPool *PermissionlessPoolCallerSession) ComputeDepositDataRo return _PermissionlessPool.Contract.ComputeDepositDataRoot(&_PermissionlessPool.CallOpts, _pubkey, _signature, _withdrawCredential, _depositAmount) } -// GetAllSocializingPoolOptOutOperators is a free data retrieval call binding the contract method 0x61e2f809. -// -// Solidity: function getAllSocializingPoolOptOutOperators(uint256 _pageNumber, uint256 _pageSize) view returns(address[]) -func (_PermissionlessPool *PermissionlessPoolCaller) GetAllSocializingPoolOptOutOperators(opts *bind.CallOpts, _pageNumber *big.Int, _pageSize *big.Int) ([]common.Address, error) { - var out []interface{} - err := _PermissionlessPool.contract.Call(opts, &out, "getAllSocializingPoolOptOutOperators", _pageNumber, _pageSize) - - if err != nil { - return *new([]common.Address), err - } - - out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) - - return out0, err - -} - -// GetAllSocializingPoolOptOutOperators is a free data retrieval call binding the contract method 0x61e2f809. -// -// Solidity: function getAllSocializingPoolOptOutOperators(uint256 _pageNumber, uint256 _pageSize) view returns(address[]) -func (_PermissionlessPool *PermissionlessPoolSession) GetAllSocializingPoolOptOutOperators(_pageNumber *big.Int, _pageSize *big.Int) ([]common.Address, error) { - return _PermissionlessPool.Contract.GetAllSocializingPoolOptOutOperators(&_PermissionlessPool.CallOpts, _pageNumber, _pageSize) -} - -// GetAllSocializingPoolOptOutOperators is a free data retrieval call binding the contract method 0x61e2f809. -// -// Solidity: function getAllSocializingPoolOptOutOperators(uint256 _pageNumber, uint256 _pageSize) view returns(address[]) -func (_PermissionlessPool *PermissionlessPoolCallerSession) GetAllSocializingPoolOptOutOperators(_pageNumber *big.Int, _pageSize *big.Int) ([]common.Address, error) { - return _PermissionlessPool.Contract.GetAllSocializingPoolOptOutOperators(&_PermissionlessPool.CallOpts, _pageNumber, _pageSize) -} - // GetCollateralETH is a free data retrieval call binding the contract method 0xb01db078. // // Solidity: function getCollateralETH() view returns(uint256) diff --git a/stader-lib/contracts/stader-config.go b/stader-lib/contracts/stader-config.go index 7705cf9e3..c30e99245 100644 --- a/stader-lib/contracts/stader-config.go +++ b/stader-lib/contracts/stader-config.go @@ -31,13 +31,35 @@ var ( // StaderConfigMetaData contains all meta data concerning the StaderConfig contract. var StaderConfigMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidLimits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMaxDepositValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMaxWithdrawValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMinDepositValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMinWithdrawValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SetConstant\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SetVariable\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUCTION_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DECIMALS\",\"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\":\"ETH_DEPOSIT_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_PER_NODE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETHx\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FULL_DEPOSIT_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_DEPOSIT_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_WITHDRAW_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_DEPOSIT_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_WITHDRAW_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_MAX_NAME_LENGTH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_REWARD_COLLECTOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PENALTY_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_NODE_REGISTRY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_SOCIALIZING_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_NODE_REGISTRY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_SOCIALIZING_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_SELECTOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_UTILS\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRE_DEPOSIT_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REWARD_THRESHOLD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SD_COLLATERAL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOCIALIZING_POOL_CYCLE_DURATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_INSURANCE_FUND\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_ORACLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_TREASURY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKE_POOL_MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOTAL_FEE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"USER_WITHDRAW_MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_FACTORY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WITHDRAWN_KEYS_BATCH_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuctionContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDecimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHDepositContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHxToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFullDepositSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxDepositAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxWithdrawAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinBlockDelayToFinalizeWithdrawRequest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinDepositAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinWithdrawAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperatorMaxNameLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperatorRewardsCollector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPenaltyContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedSocializingPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessSocializingPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSelector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolUtils\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPreDepositSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsThreshold\",\"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\":[],\"name\":\"getSDCollateral\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSocializingPoolCycleDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSocializingPoolOptInCoolingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderInsuranceFund\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakePoolManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakedEthPerNode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUserWithdrawManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawnKeyBatchSize\",\"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\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ethDepositContract\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"onlyManagerRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"onlyOperatorRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_contractName\",\"type\":\"bytes32\"}],\"name\":\"onlyStaderContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"updateAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_auctionContract\",\"type\":\"address\"}],\"name\":\"updateAuctionContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethX\",\"type\":\"address\"}],\"name\":\"updateETHxToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDepositAmount\",\"type\":\"uint256\"}],\"name\":\"updateMaxDepositAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxWithdrawAmount\",\"type\":\"uint256\"}],\"name\":\"updateMaxWithdrawAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minBlockDelay\",\"type\":\"uint256\"}],\"name\":\"updateMinBlockDelayToFinalizeWithdrawRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minDepositAmount\",\"type\":\"uint256\"}],\"name\":\"updateMinDepositAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minWithdrawAmount\",\"type\":\"uint256\"}],\"name\":\"updateMinWithdrawAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operatorRewardsCollector\",\"type\":\"address\"}],\"name\":\"updateOperatorRewardsCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_penaltyContract\",\"type\":\"address\"}],\"name\":\"updatePenaltyContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedNodeRegistry\",\"type\":\"address\"}],\"name\":\"updatePermissionedNodeRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedPool\",\"type\":\"address\"}],\"name\":\"updatePermissionedPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedSocializePool\",\"type\":\"address\"}],\"name\":\"updatePermissionedSocializingPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessNodeRegistry\",\"type\":\"address\"}],\"name\":\"updatePermissionlessNodeRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessPool\",\"type\":\"address\"}],\"name\":\"updatePermissionlessPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessSocializePool\",\"type\":\"address\"}],\"name\":\"updatePermissionlessSocializingPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolSelector\",\"type\":\"address\"}],\"name\":\"updatePoolSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolUtils\",\"type\":\"address\"}],\"name\":\"updatePoolUtils\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardsThreshold\",\"type\":\"uint256\"}],\"name\":\"updateRewardsThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sdCollateral\",\"type\":\"address\"}],\"name\":\"updateSDCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_socializingPoolCycleDuration\",\"type\":\"uint256\"}],\"name\":\"updateSocializingPoolCycleDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_SocializePoolOptInCoolingPeriod\",\"type\":\"uint256\"}],\"name\":\"updateSocializingPoolOptInCoolingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderInsuranceFund\",\"type\":\"address\"}],\"name\":\"updateStaderInsuranceFund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderOracle\",\"type\":\"address\"}],\"name\":\"updateStaderOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderToken\",\"type\":\"address\"}],\"name\":\"updateStaderToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderTreasury\",\"type\":\"address\"}],\"name\":\"updateStaderTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_stakePoolManager\",\"type\":\"address\"}],\"name\":\"updateStakePoolManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userWithdrawManager\",\"type\":\"address\"}],\"name\":\"updateUserWithdrawManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vaultFactory\",\"type\":\"address\"}],\"name\":\"updateVaultFactory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateWithdrawnKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidLimits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMaxDepositValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMaxWithdrawValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMinDepositValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMinWithdrawValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SetConstant\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SetVariable\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUCTION_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DECIMALS\",\"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\":\"ETHX_SUPPLY_POR_FEED\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_BALANCE_POR_FEED\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_DEPOSIT_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_PER_NODE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETHx\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FULL_DEPOSIT_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_DEPOSIT_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_WITHDRAW_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_DEPOSIT_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_WITHDRAW_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_EL_REWARD_VAULT_IMPLEMENTATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_MAX_NAME_LENGTH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_REWARD_COLLECTOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PENALTY_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_NODE_REGISTRY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_SOCIALIZING_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_NODE_REGISTRY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_SOCIALIZING_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_SELECTOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_UTILS\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRE_DEPOSIT_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REWARD_THRESHOLD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SD_COLLATERAL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOCIALIZING_POOL_CYCLE_DURATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_INSURANCE_FUND\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_ORACLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_TREASURY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKE_POOL_MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOTAL_FEE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"USER_WITHDRAW_MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_FACTORY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WITHDRAWN_KEYS_BATCH_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuctionContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDecimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHBalancePORFeedProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHDepositContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHXSupplyPORFeedProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHxToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFullDepositSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxDepositAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxWithdrawAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinBlockDelayToFinalizeWithdrawRequest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinDepositAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinWithdrawAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeELRewardVaultImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperatorMaxNameLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperatorRewardsCollector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPenaltyContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedSocializingPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessSocializingPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSelector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolUtils\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPreDepositSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsThreshold\",\"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\":[],\"name\":\"getSDCollateral\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSocializingPoolCycleDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSocializingPoolOptInCoolingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderInsuranceFund\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakePoolManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakedEthPerNode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUserWithdrawManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidatorWithdrawalVaultImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawnKeyBatchSize\",\"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\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ethDepositContract\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"onlyManagerRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"onlyOperatorRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_contractName\",\"type\":\"bytes32\"}],\"name\":\"onlyStaderContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"updateAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_auctionContract\",\"type\":\"address\"}],\"name\":\"updateAuctionContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethBalanceProxy\",\"type\":\"address\"}],\"name\":\"updateETHBalancePORFeedProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethXSupplyProxy\",\"type\":\"address\"}],\"name\":\"updateETHXSupplyPORFeedProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethX\",\"type\":\"address\"}],\"name\":\"updateETHxToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDepositAmount\",\"type\":\"uint256\"}],\"name\":\"updateMaxDepositAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxWithdrawAmount\",\"type\":\"uint256\"}],\"name\":\"updateMaxWithdrawAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minBlockDelay\",\"type\":\"uint256\"}],\"name\":\"updateMinBlockDelayToFinalizeWithdrawRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minDepositAmount\",\"type\":\"uint256\"}],\"name\":\"updateMinDepositAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minWithdrawAmount\",\"type\":\"uint256\"}],\"name\":\"updateMinWithdrawAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeELRewardVaultImpl\",\"type\":\"address\"}],\"name\":\"updateNodeELRewardImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operatorRewardsCollector\",\"type\":\"address\"}],\"name\":\"updateOperatorRewardsCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_penaltyContract\",\"type\":\"address\"}],\"name\":\"updatePenaltyContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedNodeRegistry\",\"type\":\"address\"}],\"name\":\"updatePermissionedNodeRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedPool\",\"type\":\"address\"}],\"name\":\"updatePermissionedPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedSocializePool\",\"type\":\"address\"}],\"name\":\"updatePermissionedSocializingPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessNodeRegistry\",\"type\":\"address\"}],\"name\":\"updatePermissionlessNodeRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessPool\",\"type\":\"address\"}],\"name\":\"updatePermissionlessPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessSocializePool\",\"type\":\"address\"}],\"name\":\"updatePermissionlessSocializingPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolSelector\",\"type\":\"address\"}],\"name\":\"updatePoolSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolUtils\",\"type\":\"address\"}],\"name\":\"updatePoolUtils\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardsThreshold\",\"type\":\"uint256\"}],\"name\":\"updateRewardsThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sdCollateral\",\"type\":\"address\"}],\"name\":\"updateSDCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_socializingPoolCycleDuration\",\"type\":\"uint256\"}],\"name\":\"updateSocializingPoolCycleDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_SocializePoolOptInCoolingPeriod\",\"type\":\"uint256\"}],\"name\":\"updateSocializingPoolOptInCoolingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderInsuranceFund\",\"type\":\"address\"}],\"name\":\"updateStaderInsuranceFund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderOracle\",\"type\":\"address\"}],\"name\":\"updateStaderOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderToken\",\"type\":\"address\"}],\"name\":\"updateStaderToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderTreasury\",\"type\":\"address\"}],\"name\":\"updateStaderTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_stakePoolManager\",\"type\":\"address\"}],\"name\":\"updateStakePoolManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userWithdrawManager\",\"type\":\"address\"}],\"name\":\"updateUserWithdrawManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validatorWithdrawalVaultImpl\",\"type\":\"address\"}],\"name\":\"updateValidatorWithdrawalVaultImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vaultFactory\",\"type\":\"address\"}],\"name\":\"updateVaultFactory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateWithdrawnKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b506200001b62000021565b620000e0565b5f54610100900460ff16156200008d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161015620000de575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61347a80620000ee5f395ff3fe608060405234801561000f575f80fd5b506004361061077a575f3560e01c8063686a8b67116103d8578063aa9537951161020b578063dde63e8f1161012a578063f0141d84116100bf578063f6c278c11161008f578063f6c278c114611d19578063f83c778714611d40578063fa71fcbb14611d53578063ff387f3a14611da2578063ff4f354614611df1575f80fd5b8063f0141d8414611c67578063f122961f14611cb6578063f4914d3314611cdd578063f63718e714611d06575f80fd5b8063e4f59b6c116100fa578063e4f59b6c14611b7d578063e7bdba3214611b90578063e8fe187314611bb7578063ecf170a814611c0f575f80fd5b8063dde63e8f14611a93578063defd024d14611aba578063e069f71414611b12578063e2f273bd14611b6a575f80fd5b8063bbb99bb5116101a0578063ca78360c11610170578063ca78360c146119d9578063cc45dabe146119ec578063d2cee8ba14611a44578063d547741f14611a80575f80fd5b8063bbb99bb514611965578063bedcb34c14611978578063c20573c11461199f578063c60470d3146119b2575f80fd5b8063b549dbff116101db578063b549dbff146118d3578063b5cfee6c146118e6578063b68578441461193e578063b9894a1114611952575f80fd5b8063aa953795146117eb578063b11c699d14611843578063b31239221461186a578063b479a51714611897575f80fd5b8063841b83b3116102f7578063983d27371161028c578063a217fddf1161025c578063a217fddf14611752578063a469e24714611759578063a53bddd6146117b1578063aa2f56c7146117d8575f80fd5b8063983d27371461166857806398c359271461168f5780639ca76b73146116a2578063a0b4079f146116fa575f80fd5b80638910115c116102c75780638910115c146115925780638a4cfb58146115ea5780638f8b3867146115fd57806391d1485414611655575f80fd5b8063841b83b31461151d578063847802051461154457806385e2fcd31461155757806388993d8b1461157e575f80fd5b806372ce78b01161036d5780637a87fa0b1161033d5780637a87fa0b146114815780637ae316d0146114a85780637b4cd7ec146114f7578063831485931461150a575f80fd5b806372ce78b0146113b457806377e8a0c31461140c57806379175a7414611433578063792c8cc31461145a575f80fd5b80636e0fddfc116103a85780636e0fddfc146112fa5780636e9960c31461134957806372195b3e1461138e578063723b732c146113a1575f80fd5b8063686a8b67146112105780636870bb2b146112375780636ccb9d701461124a5780636d28ad1c146112a2575f80fd5b80632f2ff15d116105b0578063489ed651116104cf5780635b5961fc116104645780636176bbde116104345780636176bbde1461119b5780636240fb9c146111af57806363db7eae146111c257806367dcf134146111e9575f80fd5b80635b5961fc1461110a5780635b9cc8b11461111d5780635be6ce69146111305780635edc686e14611143575f80fd5b80635455e4721161049f5780635455e4721461103c5780635458a106146110635780635726a356146110bb578063572c686a146110f7575f80fd5b8063489ed65114610f965780634c34a98214610fee57806352112bd31461100257806353f5713b14611029575f80fd5b8063384002a211610545578063403efe7f11610515578063403efe7f14610f355780634191e0fe14610f4857806344ba0ea214610f6f578063485cc95514610f83575f80fd5b8063384002a214610ead5780633871d0f114610ed45780633b6bcca014610efb5780633c128dad14610f22575f80fd5b806336568abe1161058057806336568abe14610e0857806336854d6314610e1b578063368f9d1714610e4257806336c157f414610e55575f80fd5b80632f2ff15d14610d4f578063326a16a314610d6257806334d17d7414610d9e578063360374a414610db1575f80fd5b806318bcb2841161069c578063248a9ca3116106315780632a9cc2c4116106015780632a9cc2c414610c515780632ca03f6614610c785780632e0f262514610cd05780632ec5e01814610cf7575f80fd5b8063248a9ca314610bb05780632651644c14610bd2578063278671bb14610be55780632a0acc6a14610c3d575f80fd5b80631c55cccd1161066c5780631c55cccd14610b135780631ca197a514610b3a5780631de03db814610b895780631ea30fef14610b9c575f80fd5b806318bcb28414610a595780631af0fff314610ab15780631b2df85014610ad85780631bf6a41c14610aec575f80fd5b8063103f290711610712578063121669f1116106e2578063121669f1146109a857806314e1b8fd146109bb578063152a91da146109e457806318829fc314610a0a575f80fd5b8063103f2907146108f85780631049e32e1461091f57806310deba2b146109325780631202007514610981575f80fd5b8063088ee72d1161074d578063088ee72d1461083f5780630945d42c146108525780630a3fbd9a146108655780630bdf3166146108d1575f80fd5b806301ffc9a71461077e5780630430246e146107a6578063047cb439146107db57806308297645146107f0575b5f80fd5b61079161078c3660046130d5565b611e04565b60405190151581526020015b60405180910390f35b6107cd7f9b1ae66636378b5626322a52e22518dd40bb04881cf0440ed16a20c0f902b24281565b60405190815260200161079d565b6107ee6107e9366004613117565b611e3a565b005b7f9b1ae66636378b5626322a52e22518dd40bb04881cf0440ed16a20c0f902b2425f5260976020527f2b5f44404b80fc874d00ce3803444dc1d8415bef002ea5e3d4c6a1fc229b361b546107cd565b6107ee61084d366004613117565b611e72565b6107ee610860366004613130565b611ea6565b7fc5b1a6a0b843563e6a17ca90bc59d2315c523be427d0c9c2ba08d77ced4f46b15f52609a6020527f93bda0178f178a956e1154aad6f6d04aca130dc29bb626bd6774e853c8c9f354546001600160a01b03165b6040516001600160a01b03909116815260200161079d565b6107cd7f3e4ded42f360c2e6b1251d584085ae1d9aa9cbed18687fac6b6aef8eed1c5ad381565b6107cd7f8d4341681b282735dd0d55670ff8e0ad68a80cbfc2cee847065e9f771470f88f81565b6107ee61092d366004613117565b611edc565b7f59b5f464ec5829246a81f005456c8cb714ee224aea800742e2dae497263e46695f5260976020527ff1d631be95f382e871541957d68e9595b265874c488308836f37d0f22a9fbae9546107cd565b6107cd7f4c9466ca1bf288a7334a7494f09a0acc38ee31628eaf8c68b574b9f0ec22a9c181565b6107ee6109b6366004613117565b611f10565b5f805160206133458339815191525f5260986020525f805160206133e5833981519152546107cd565b6107cd7e665c1b06e0667c56a1ca1706b7573435d1b9162c6327b5d0ea1daeb491ad0d81565b7f46b41285bb7b8513ce3a9d95cdf6916699fb00b47326e8d3850be1b6186e03495f5260986020527f4d508419d31c3547aff85909df3c1fcaa249c360d3c9fa4e4f9e9c899cebbedc546107cd565b7f8d4341681b282735dd0d55670ff8e0ad68a80cbfc2cee847065e9f771470f88f5f52609a6020527f510a692d092451633b86b6d5ebd49dd58b5ea01b6d0783a379a8169a08baac9f546001600160a01b03166108b9565b6107cd7fe5240448c78dfcff5bda4e4eed69ba9635df15d79da0e8a4cf889217106fa45b81565b6107cd5f8051602061330583398151915281565b6107cd7f29384ec8473b541e7a7850226a4d1906a700f14cc394266ee08800ba62dc3af981565b6107cd7fbd34382cd421c5250595893a4ed6cdb2125e6be7d5e0a9dbc469de5d583adfcf81565b7f3c6dcff840f36f9818a73b67d9d00197362f63687bd52e3c277bd0ffb30dde335f5260986020527f9e4fbca7af476428837bb1c0659b29a978bd5be1038b9848cfd6837f97c0c036546107cd565b6107ee610b97366004613117565b611f44565b6107cd5f8051602061342583398151915281565b6107cd610bbe366004613130565b5f9081526065602052604090206001015490565b6107ee610be0366004613117565b611f78565b7f5be667ef1f4c6c279e2aa7e62595a1045043db6a43145cb438c6d36e7a3c3ed85f52609a6020527f3f1c1b82007b7a87a83473281505b32822fde2464206a16635328330125264a8546001600160a01b03166108b9565b6107cd5f805160206133c583398151915281565b6107cd7fb134afa3abad633a84ab2d33dd5171f2b371e38b0f7bca001383aaf08ed6d2d181565b7fb134afa3abad633a84ab2d33dd5171f2b371e38b0f7bca001383aaf08ed6d2d15f52609a6020527fb5c61d48a513a298b438559aede2612ccf11b8fe4c725b0f159efab727297353546001600160a01b03166108b9565b6107cd7f08593985ae1bebfb02f6c30105edffb176a6d87c9fad54c434bf9b58f67e81b681565b7f3d88d1233771c5c30791fb6805b7f91424dae1e5a68a57da846ca7ff83c640295f52609a6020527f018f2aef664aeeb1561d5a44d318b67f16f75b697bf95eeabc62c48d36323e72546001600160a01b03166108b9565b6107ee610d5d366004613147565b611fac565b5f805160206133258339815191525f5260986020527fd179a4a9329ee39fba707fd91c699ec0f088afc56731eb89ff424b873ac70844546107cd565b6107ee610dac366004613117565b611fd5565b7e665c1b06e0667c56a1ca1706b7573435d1b9162c6327b5d0ea1daeb491ad0d5f52609a6020527fe107fed811895732bef768006b62e8ce98d10a188d78cab697a91a201b5e2404546001600160a01b03166108b9565b6107ee610e16366004613147565b612009565b6107cd7ff935b8bf66b325637ad32ca875b588849cf4026791b79b4dc20623cd3dd36e2081565b6107ee610e50366004613117565b612088565b7f8e96355022bb9b9f4d9d4e01fe2b58f45e78549c982c401c96f75f33c5de457e5f52609a6020527fe74d6d5cda9d4a34ee9d4950f99c58c26803c1cf17dbd9d3e9f82fcea7feb01e546001600160a01b03166108b9565b6107cd7f95bf18d68834a11aaae7b73ff6037326f163a81a7b5ea80cba96856ce2284fbd81565b6107cd7f9f919a2294d86593fbcec81ea71aa683cec51c78771c642f8894ba8f3949705281565b6107cd7fc5b1a6a0b843563e6a17ca90bc59d2315c523be427d0c9c2ba08d77ced4f46b181565b6107ee610f30366004613117565b6120bc565b6107ee610f43366004613117565b6120f0565b6107cd7fa4083e7a78dd898def03c51ce199cb4286b8828be4f6f46e04aec6176196747181565b6107cd5f8051602061332583398151915281565b6107ee610f91366004613171565b612124565b7f690795c57e13eaf2526f76202b6799e9afdb069afca1e572f693953d013569d85f52609a6020527f38e84315fdfc8f1b16767d9fd043998a9ff60cfbcb629d8f48542b4e3ee87096546001600160a01b03166108b9565b6107cd5f8051602061338583398151915281565b6107cd7f602490b12960e59ddb584affd1da6cd5692f4455c1ba0cc4e865af81e111ebe281565b610791611037366004613117565b612444565b6107cd7f59b5f464ec5829246a81f005456c8cb714ee224aea800742e2dae497263e466981565b7fdb5d1c2a9350ca010dcdf3953da11a9e8f7c5e2918cdfa65500e84e7fd4fde7d5f52609a6020527f642611b82cedca4c0a5510e3234bea9632cc7eb6e135d12e2ef4f8c68dc23add546001600160a01b03166108b9565b5f805160206133858339815191525f5260986020527ffcacc1044a5a1b4eb9c058396306426a857813d37a4fb6ccf5a3adde30e0c914546107cd565b6107ee611105366004613130565b61246f565b6107ee611118366004613117565b6124b0565b6107ee61112b366004613130565b6124e4565b6107ee61113e366004613117565b612505565b7fa4083e7a78dd898def03c51ce199cb4286b8828be4f6f46e04aec617619674715f52609a6020527f863e03b3878962463f3668c14c10a4aeeabb7baa9c7a9b990796f179109d8692546001600160a01b03166108b9565b6107cd5f805160206133a583398151915281565b6107916111bd366004613117565b612539565b6107cd7f33271b56873d8abb908de4853f90a8a0ef8829548ec0bf6c298feed3917c50a281565b6107cd7ff822b1f0c3b886ce1cdf1c2a5317844145470db33b02c63cae4813f8c9b2dc1781565b6107cd7fc54a7590fe6738d7a81f393c1cf5ab3e577c91781037d93a5a9f5ce44f19eb5181565b6107ee611245366004613130565b612551565b7fd7e49a298cb2719de62e5df1024257eed316db6337361b3a30d56a75324046075f52609a6020527f294ce448c5d68d362948bb2b78c5571986464589b6911cc804ca52d7abbad2e3546001600160a01b03166108b9565b7fbd34382cd421c5250595893a4ed6cdb2125e6be7d5e0a9dbc469de5d583adfcf5f52609a6020527f3195564ffd56571794a8c7ffc14e3d393758b399f23318e874273db13addfdfe546001600160a01b03166108b9565b7fc54a7590fe6738d7a81f393c1cf5ab3e577c91781037d93a5a9f5ce44f19eb515f5260986020527f4d985796191711ecc0d75f056488220f1f755856cdfe3ebd45de3537c37b9b50546107cd565b5f805160206133c58339815191525f5260996020527f15be86566e203c1f41b9ae149d9fbb01b2c14f503704423d739a6e3d2db5a9ee546001600160a01b03166108b9565b6107ee61139c366004613117565b612592565b6107ee6113af366004613130565b6125c6565b7f8567f5af844d68168987760a7ce1762804b9de703165fc50ce4fa85246016c915f5260996020527f2c1f6cfa08e101d854b66353df53d6eb32e981bfc1a8351f458fd54b64cfc181546001600160a01b03166108b9565b6107cd7f84b42b3d5e6851893d4418c6ebc9a4727e78afdf84e73674c8b9c1c2b1904e2d81565b6107cd7f5be667ef1f4c6c279e2aa7e62595a1045043db6a43145cb438c6d36e7a3c3ed881565b6107cd7f876943525608da6d95be5925fe6c4fe80e8622c8a76e7414f80e8ba210e0711c81565b6107cd7f76d62e541b8d573110ca3eb9003e96426f530422a76712d1356f6c6ce50541ca81565b7f33271b56873d8abb908de4853f90a8a0ef8829548ec0bf6c298feed3917c50a25f5260976020527f799f922a2554690a852ce3427a174a9d0f64f94f53730bd0c6e1e1fdc54799ae546107cd565b6107ee611505366004613117565b6125e7565b6107ee611518366004613117565b612628565b6107cd7f8567f5af844d68168987760a7ce1762804b9de703165fc50ce4fa85246016c9181565b6107ee611552366004613130565b61265c565b6107cd7fd7e49a298cb2719de62e5df1024257eed316db6337361b3a30d56a753240460781565b6107cd5f8051602061336583398151915281565b7f29384ec8473b541e7a7850226a4d1906a700f14cc394266ee08800ba62dc3af95f52609a6020527f249a87d52af73222d4a479ebe40b904ebabf543d4706240658e6092ca9388c26546001600160a01b03166108b9565b6107ee6115f8366004613130565b61268a565b7f84b42b3d5e6851893d4418c6ebc9a4727e78afdf84e73674c8b9c1c2b1904e2d5f52609a6020527f492656d26f3accf1cea0a783c131178deb1c8733d9c679e5cecde8df27a9ad95546001600160a01b03166108b9565b610791611663366004613147565b6126cb565b6107cd7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c81565b6107ee61169d366004613117565b6126f5565b7f76d62e541b8d573110ca3eb9003e96426f530422a76712d1356f6c6ce50541ca5f52609a6020527f86012a00795dbb89a313ebfe1e3a458a84ce87cdb7c6a7971caf999119513627546001600160a01b03166108b9565b7f602490b12960e59ddb584affd1da6cd5692f4455c1ba0cc4e865af81e111ebe25f52609a6020527fd54531c6bba5beed207277daa8e0e65bdfb6aece3f974fb0394154eb989d1d42546001600160a01b03166108b9565b6107cd5f81565b7f4c9466ca1bf288a7334a7494f09a0acc38ee31628eaf8c68b574b9f0ec22a9c15f52609a6020527f2df8b6a0a0cdef82de21edc971a252888647231024af6c12c533010687315b1f546001600160a01b03166108b9565b6107cd7f3d88d1233771c5c30791fb6805b7f91424dae1e5a68a57da846ca7ff83c6402981565b6107ee6117e6366004613117565b612729565b7f5c00ec259bace293b50174e499c413ca897b4bcb54ed468b7e6bade51c6a9f965f52609a6020527fcda3409ebc466b6ac691341dcf169fdb28e448f6cf860239292340843aa52984546001600160a01b03166108b9565b6107cd7f8e96355022bb9b9f4d9d4e01fe2b58f45e78549c982c401c96f75f33c5de457e81565b610791611878366004613199565b5f908152609a60205260409020546001600160a01b0390811691161490565b5f805160206133658339815191525f5260986020527f72873426992e590ffa79a15175a7f2c8cf191cf402b7484af189cd125376fcdc546107cd565b6107ee6118e1366004613117565b61275d565b7fe5240448c78dfcff5bda4e4eed69ba9635df15d79da0e8a4cf889217106fa45b5f52609a6020527fcce26741946f801b25ce3c49451d2dd729b689d4d0d23ea57849f6c666bb5ee3546001600160a01b03166108b9565b6107cd5f8051602061334583398151915281565b6107ee611960366004613117565b612791565b6107ee611973366004613130565b6127c5565b6107cd7f3c6dcff840f36f9818a73b67d9d00197362f63687bd52e3c277bd0ffb30dde3381565b6107ee6119ad366004613117565b612806565b6107cd7f690795c57e13eaf2526f76202b6799e9afdb069afca1e572f693953d013569d881565b6107ee6119e7366004613117565b61283a565b7f09dfa94a9be22222b511ecf509f49718fc08fbe3ada37a44d2022489eca3b44c5f52609b6020527fe98ed444639fcf7afa9e33a4ea67ac4155aa97d88f546111c8d1357c98dbca00546001600160a01b03166108b9565b5f805160206133a58339815191525f5260986020527f0ccceacf55cd457ff25dca300775a2cb43db2c0b890d3ee063f4abba210c504f546107cd565b6107ee611a8e366004613147565b61286e565b6107cd7fdb5d1c2a9350ca010dcdf3953da11a9e8f7c5e2918cdfa65500e84e7fd4fde7d81565b7f9f919a2294d86593fbcec81ea71aa683cec51c78771c642f8894ba8f394970525f52609a6020527f99c8bd240e5bd2ee897b6a14ca3ca43a06f489dad5e38985ad188e67459dc6d7546001600160a01b03166108b9565b7f95bf18d68834a11aaae7b73ff6037326f163a81a7b5ea80cba96856ce2284fbd5f52609b6020527f20c8b2f4826823ac4cd62278270e8be9c7f63b9fe22e1f148f5369ec26bc69f4546001600160a01b03166108b9565b6107ee611b78366004613117565b612892565b6107ee611b8b366004613117565b61290a565b6107cd7f46b41285bb7b8513ce3a9d95cdf6916699fb00b47326e8d3850be1b6186e034981565b7f3e4ded42f360c2e6b1251d584085ae1d9aa9cbed18687fac6b6aef8eed1c5ad35f52609a6020527fe298efc0f606c3be77912795055e173991a2c395633d4b0a06597a13b46e0c0b546001600160a01b03166108b9565b7ff935b8bf66b325637ad32ca875b588849cf4026791b79b4dc20623cd3dd36e205f52609a6020527f18d210dd586fe31598c73b0131261a1f7a576051e2667bbf5a4f8a01cf2f1392546001600160a01b03166108b9565b7f08593985ae1bebfb02f6c30105edffb176a6d87c9fad54c434bf9b58f67e81b65f5260976020527fb645ae2edae7c0716931b638cd9631a05f9a39fec3f15294f7f3af49f2f51ca8546107cd565b6107cd7f5c00ec259bace293b50174e499c413ca897b4bcb54ed468b7e6bade51c6a9f9681565b5f805160206134258339815191525f5260986020525f80516020613405833981519152546107cd565b6107ee611d14366004613117565b61293e565b6107cd7f09dfa94a9be22222b511ecf509f49718fc08fbe3ada37a44d2022489eca3b44c81565b6107ee611d4e366004613117565b612971565b7f876943525608da6d95be5925fe6c4fe80e8622c8a76e7414f80e8ba210e0711c5f5260976020527fea561c0677f20715a0e74899b0381a0fa1265a58e9e02fb4a5a398d87555d1fe546107cd565b7ff822b1f0c3b886ce1cdf1c2a5317844145470db33b02c63cae4813f8c9b2dc175f5260976020527f9863915096f3522486953e53c4b97560d72679216b36fd98b4bdd4eca3a01eaa546107cd565b6107ee611dff366004613130565b6129a5565b5f6001600160e01b03198216637965db0b60e01b1480611e3457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f611e44816129c6565b611e6e7fdb5d1c2a9350ca010dcdf3953da11a9e8f7c5e2918cdfa65500e84e7fd4fde7d836129d3565b5050565b5f611e7c816129c6565b611e6e7ff935b8bf66b325637ad32ca875b588849cf4026791b79b4dc20623cd3dd36e20836129d3565b5f80516020613305833981519152611ebd816129c6565b611ed45f8051602061338583398151915283612a42565b611e6e612a89565b5f611ee6816129c6565b611e6e7fc5b1a6a0b843563e6a17ca90bc59d2315c523be427d0c9c2ba08d77ced4f46b1836129d3565b5f611f1a816129c6565b611e6e7f8e96355022bb9b9f4d9d4e01fe2b58f45e78549c982c401c96f75f33c5de457e836129d3565b5f611f4e816129c6565b611e6e7f5be667ef1f4c6c279e2aa7e62595a1045043db6a43145cb438c6d36e7a3c3ed8836129d3565b5f611f82816129c6565b611e6e7fd7e49a298cb2719de62e5df1024257eed316db6337361b3a30d56a7532404607836129d3565b5f82815260656020526040902060010154611fc6816129c6565b611fd08383612c3c565b505050565b5f611fdf816129c6565b611e6e7f5c00ec259bace293b50174e499c413ca897b4bcb54ed468b7e6bade51c6a9f96836129d3565b6001600160a01b038116331461207e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b611e6e8282612cc1565b5f612092816129c6565b611e6e7f3d88d1233771c5c30791fb6805b7f91424dae1e5a68a57da846ca7ff83c64029836129d3565b5f6120c6816129c6565b611e6e7fa4083e7a78dd898def03c51ce199cb4286b8828be4f6f46e04aec61761967471836129d3565b5f6120fa816129c6565b611e6e7f690795c57e13eaf2526f76202b6799e9afdb069afca1e572f693953d013569d8836129d3565b5f54610100900460ff161580801561214257505f54600160ff909116105b8061215b5750303b15801561215b57505f5460ff166001145b6121be5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401612075565b5f805460ff1916600117905580156121df575f805461ff0019166101001790555b6121e883612d27565b6121f182612d27565b6121f9612d4e565b61222c7ff822b1f0c3b886ce1cdf1c2a5317844145470db33b02c63cae4813f8c9b2dc176801bc16d674ec800000612db8565b61225e7f9b1ae66636378b5626322a52e22518dd40bb04881cf0440ed16a20c0f902b242670de0b6b3a7640000612db8565b6122917f876943525608da6d95be5925fe6c4fe80e8622c8a76e7414f80e8ba210e0711c6801ae361fc1451c0000612db8565b6122bd7f33271b56873d8abb908de4853f90a8a0ef8829548ec0bf6c298feed3917c50a2612710612db8565b6122ef7f08593985ae1bebfb02f6c30105edffb176a6d87c9fad54c434bf9b58f67e81b6670de0b6b3a7640000612db8565b61231a7f59b5f464ec5829246a81f005456c8cb714ee224aea800742e2dae497263e466960ff612db8565b6123375f80516020613425833981519152655af3107a4000612a42565b6123585f8051602061338583398151915269021e19e0c9bab2400000612a42565b6123755f80516020613345833981519152655af3107a4000612a42565b6123965f8051602061332583398151915269021e19e0c9bab2400000612a42565b6123ae5f805160206133658339815191526032612a42565b6123c75f805160206133a5833981519152610258612a42565b6123f17f84b42b3d5e6851893d4418c6ebc9a4727e78afdf84e73674c8b9c1c2b1904e2d836129d3565b6123fb5f84612c3c565b8015611fd0575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b5f611e347f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c836126cb565b5f80516020613305833981519152612486816129c6565b611e6e7f46b41285bb7b8513ce3a9d95cdf6916699fb00b47326e8d3850be1b6186e034983612a42565b5f6124ba816129c6565b611e6e7fbd34382cd421c5250595893a4ed6cdb2125e6be7d5e0a9dbc469de5d583adfcf836129d3565b5f6124ee816129c6565b611ed45f8051602061332583398151915283612a42565b5f61250f816129c6565b611e6e7f3e4ded42f360c2e6b1251d584085ae1d9aa9cbed18687fac6b6aef8eed1c5ad3836129d3565b5f611e345f80516020613305833981519152836126cb565b5f80516020613305833981519152612568816129c6565b611e6e7f3c6dcff840f36f9818a73b67d9d00197362f63687bd52e3c277bd0ffb30dde3383612a42565b5f61259c816129c6565b611e6e7fb134afa3abad633a84ab2d33dd5171f2b371e38b0f7bca001383aaf08ed6d2d1836129d3565b5f6125d0816129c6565b611e6e5f805160206133a583398151915283612a42565b5f805160206133058339815191526125fe816129c6565b611e6e7f8567f5af844d68168987760a7ce1762804b9de703165fc50ce4fa85246016c9183612dff565b5f612632816129c6565b611e6e7f95bf18d68834a11aaae7b73ff6037326f163a81a7b5ea80cba96856ce2284fbd83612e66565b5f80516020613305833981519152612673816129c6565b611ed45f8051602061342583398151915283612a42565b5f805160206133058339815191526126a1816129c6565b611e6e7fc54a7590fe6738d7a81f393c1cf5ab3e577c91781037d93a5a9f5ce44f19eb5183612a42565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6126ff816129c6565b611e6e7f8d4341681b282735dd0d55670ff8e0ad68a80cbfc2cee847065e9f771470f88f836129d3565b5f612733816129c6565b611e6e7fe5240448c78dfcff5bda4e4eed69ba9635df15d79da0e8a4cf889217106fa45b836129d3565b5f612767816129c6565b611e6e7f602490b12960e59ddb584affd1da6cd5692f4455c1ba0cc4e865af81e111ebe2836129d3565b5f61279b816129c6565b611e6e7f09dfa94a9be22222b511ecf509f49718fc08fbe3ada37a44d2022489eca3b44c83612e66565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c6127ef816129c6565b611e6e5f8051602061336583398151915283612a42565b5f612810816129c6565b611e6e7f76d62e541b8d573110ca3eb9003e96426f530422a76712d1356f6c6ce50541ca836129d3565b5f612844816129c6565b611e6e7f9f919a2294d86593fbcec81ea71aa683cec51c78771c642f8894ba8f39497052836129d3565b5f82815260656020526040902060010154612888816129c6565b611fd08383612cc1565b5f61289c816129c6565b5f805160206133c58339815191525f90815260996020527f15be86566e203c1f41b9ae149d9fbb01b2c14f503704423d739a6e3d2db5a9ee546001600160a01b0316906128e99084612c3c565b6129005f805160206133c583398151915284612dff565b611fd05f82612cc1565b5f612914816129c6565b611e6e7f4c9466ca1bf288a7334a7494f09a0acc38ee31628eaf8c68b574b9f0ec22a9c1836129d3565b5f612948816129c6565b611e6e7e665c1b06e0667c56a1ca1706b7573435d1b9162c6327b5d0ea1daeb491ad0d836129d3565b5f61297b816129c6565b611e6e7f29384ec8473b541e7a7850226a4d1906a700f14cc394266ee08800ba62dc3af9836129d3565b5f6129af816129c6565b611ed45f8051602061334583398151915283612a42565b6129d08133612ecd565b50565b6129dc81612d27565b5f828152609a602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251858152918201527f5de40a806536a2029221dac2c8887ac9f11952fcc1ed3d7cfb4476dd5259b74091015b60405180910390a15050565b5f8281526098602090815260409182902083905581518481529081018390527f9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c465816309101612a36565b5f805160206134258339815191525f5260986020525f805160206134058339815191525415801590612add57505f805160206133458339815191525f5260986020525f805160206133e58339815191525415155b8015612b2d575060986020527ffcacc1044a5a1b4eb9c058396306426a857813d37a4fb6ccf5a3adde30e0c914545f805160206134258339815191525f525f805160206134058339815191525411155b8015612b7d575060986020527fd179a4a9329ee39fba707fd91c699ec0f088afc56731eb89ff424b873ac70844545f805160206133458339815191525f525f805160206133e58339815191525411155b8015612bba575060986020525f80516020613405833981519152545f805160206133458339815191525f525f805160206133e58339815191525411155b8015612c1d575060986020527ffcacc1044a5a1b4eb9c058396306426a857813d37a4fb6ccf5a3adde30e0c914545f805160206133258339815191525f527fd179a4a9329ee39fba707fd91c699ec0f088afc56731eb89ff424b873ac708445410155b612c3a5760405163e773e0a960e01b815260040160405180910390fd5b565b612c4682826126cb565b611e6e575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612c7d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612ccb82826126cb565b15611e6e575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0381166129d05760405163d92e233d60e01b815260040160405180910390fd5b5f54610100900460ff16612c3a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401612075565b5f8281526097602090815260409182902083905581518481529081018390527f9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c465816309101612a36565b612e0881612d27565b5f8281526099602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251858152918201527fcbdd341876786c7241ad12a5ce5ea46739a4ce7b1587d0c216dfa655a98e50a69101612a36565b612e6f81612d27565b5f828152609b602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251858152918201527f19aab10c6a9f5d648eaa15e2d515f8dfda570ee221e7c8cb9dc07694e68005bc9101612a36565b612ed782826126cb565b611e6e57612ee481612f26565b612eef836020612f38565b604051602001612f009291906131e3565b60408051601f198184030181529082905262461bcd60e51b825261207591600401613257565b6060611e346001600160a01b03831660145b60605f612f4683600261329d565b612f519060026132b4565b67ffffffffffffffff811115612f6957612f696132c7565b6040519080825280601f01601f191660200182016040528015612f93576020820181803683370190505b509050600360fc1b815f81518110612fad57612fad6132db565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110612fdb57612fdb6132db565b60200101906001600160f81b03191690815f1a9053505f612ffd84600261329d565b6130089060016132b4565b90505b600181111561307f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061303c5761303c6132db565b1a60f81b828281518110613052576130526132db565b60200101906001600160f81b03191690815f1a90535060049490941c93613078816132ef565b905061300b565b5083156130ce5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401612075565b9392505050565b5f602082840312156130e5575f80fd5b81356001600160e01b0319811681146130ce575f80fd5b80356001600160a01b0381168114613112575f80fd5b919050565b5f60208284031215613127575f80fd5b6130ce826130fc565b5f60208284031215613140575f80fd5b5035919050565b5f8060408385031215613158575f80fd5b82359150613168602084016130fc565b90509250929050565b5f8060408385031215613182575f80fd5b61318b836130fc565b9150613168602084016130fc565b5f80604083850312156131aa575f80fd5b6131b3836130fc565b946020939093013593505050565b5f5b838110156131db5781810151838201526020016131c3565b50505f910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161321a8160178501602088016131c1565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161324b8160288401602088016131c1565b01602801949350505050565b602081525f82518060208401526132758160408501602087016131c1565b601f01601f19169190910160400192915050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417611e3457611e34613289565b80820180821115611e3457611e34613289565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f816132fd576132fd613289565b505f19019056feaf290d8680820aad922855f39b306097b20e28774d6c1ad35a20325630c3a02c1c2fe98ddbbbffbcf7735c7446ffcddb5ccd2a4ec2ace0f7d90f73e9ff13fcc7b18278bb399a7088b8b0b26f4896d5ebaba4497c611bbe9d43abe92d9a1fe83d6f8d0b773ad4970d3e7d47623dc9ce06a1b4fe833bf451d06a47e774f9acaa63712c13b90acf399d7bc7625370ce37c64b5eba41011b0961a88c2ef1648870cf2cf2377da51daa9c0d7e3f98c7532a67ee5e9398afad7b7db6e578b978a27094df8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428f1b9b075a455aa4e85ab4edea73c8fe6d4e2e5e4c6675d6135fefdca5e95a258489bc07817c82dd59579d43388f707a6a0a4a614b58e7df61bb06baec0de2c1fa5a84fed05ba4c93fcc5ba1f4ad010e3bef3e6394b367aa10b3ec01997375cca26469706673582212207e8023528ebc11124bddb9cb8602596106598c299e0b12b4b38f5e81bfc8806c64736f6c63430008140033", } // StaderConfigABI is the input ABI used to generate the binding from. // Deprecated: Use StaderConfigMetaData.ABI instead. var StaderConfigABI = StaderConfigMetaData.ABI +// StaderConfigBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use StaderConfigMetaData.Bin instead. +var StaderConfigBin = StaderConfigMetaData.Bin + +// DeployStaderConfig deploys a new Ethereum contract, binding an instance of StaderConfig to it. +func DeployStaderConfig(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *StaderConfig, error) { + parsed, err := StaderConfigMetaData.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(StaderConfigBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &StaderConfig{StaderConfigCaller: StaderConfigCaller{contract: contract}, StaderConfigTransactor: StaderConfigTransactor{contract: contract}, StaderConfigFilterer: StaderConfigFilterer{contract: contract}}, nil +} + // StaderConfig is an auto generated Go binding around an Ethereum contract. type StaderConfig struct { StaderConfigCaller // Read-only binding to the contract @@ -304,6 +326,68 @@ func (_StaderConfig *StaderConfigCallerSession) DEFAULTADMINROLE() ([32]byte, er return _StaderConfig.Contract.DEFAULTADMINROLE(&_StaderConfig.CallOpts) } +// ETHXSUPPLYPORFEED is a free data retrieval call binding the contract method 0x2a9cc2c4. +// +// Solidity: function ETHX_SUPPLY_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) ETHXSUPPLYPORFEED(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "ETHX_SUPPLY_POR_FEED") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ETHXSUPPLYPORFEED is a free data retrieval call binding the contract method 0x2a9cc2c4. +// +// Solidity: function ETHX_SUPPLY_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) ETHXSUPPLYPORFEED() ([32]byte, error) { + return _StaderConfig.Contract.ETHXSUPPLYPORFEED(&_StaderConfig.CallOpts) +} + +// ETHXSUPPLYPORFEED is a free data retrieval call binding the contract method 0x2a9cc2c4. +// +// Solidity: function ETHX_SUPPLY_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) ETHXSUPPLYPORFEED() ([32]byte, error) { + return _StaderConfig.Contract.ETHXSUPPLYPORFEED(&_StaderConfig.CallOpts) +} + +// ETHBALANCEPORFEED is a free data retrieval call binding the contract method 0xc60470d3. +// +// Solidity: function ETH_BALANCE_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) ETHBALANCEPORFEED(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "ETH_BALANCE_POR_FEED") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ETHBALANCEPORFEED is a free data retrieval call binding the contract method 0xc60470d3. +// +// Solidity: function ETH_BALANCE_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) ETHBALANCEPORFEED() ([32]byte, error) { + return _StaderConfig.Contract.ETHBALANCEPORFEED(&_StaderConfig.CallOpts) +} + +// ETHBALANCEPORFEED is a free data retrieval call binding the contract method 0xc60470d3. +// +// Solidity: function ETH_BALANCE_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) ETHBALANCEPORFEED() ([32]byte, error) { + return _StaderConfig.Contract.ETHBALANCEPORFEED(&_StaderConfig.CallOpts) +} + // ETHDEPOSITCONTRACT is a free data retrieval call binding the contract method 0x77e8a0c3. // // Solidity: function ETH_DEPOSIT_CONTRACT() view returns(bytes32) @@ -614,6 +698,37 @@ func (_StaderConfig *StaderConfigCallerSession) MINWITHDRAWAMOUNT() ([32]byte, e return _StaderConfig.Contract.MINWITHDRAWAMOUNT(&_StaderConfig.CallOpts) } +// NODEELREWARDVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x0bdf3166. +// +// Solidity: function NODE_EL_REWARD_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) NODEELREWARDVAULTIMPLEMENTATION(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "NODE_EL_REWARD_VAULT_IMPLEMENTATION") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// NODEELREWARDVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x0bdf3166. +// +// Solidity: function NODE_EL_REWARD_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) NODEELREWARDVAULTIMPLEMENTATION() ([32]byte, error) { + return _StaderConfig.Contract.NODEELREWARDVAULTIMPLEMENTATION(&_StaderConfig.CallOpts) +} + +// NODEELREWARDVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x0bdf3166. +// +// Solidity: function NODE_EL_REWARD_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) NODEELREWARDVAULTIMPLEMENTATION() ([32]byte, error) { + return _StaderConfig.Contract.NODEELREWARDVAULTIMPLEMENTATION(&_StaderConfig.CallOpts) +} + // OPERATOR is a free data retrieval call binding the contract method 0x983d2737. // // Solidity: function OPERATOR() view returns(bytes32) @@ -1358,6 +1473,37 @@ func (_StaderConfig *StaderConfigCallerSession) USERWITHDRAWMANAGER() ([32]byte, return _StaderConfig.Contract.USERWITHDRAWMANAGER(&_StaderConfig.CallOpts) } +// VALIDATORWITHDRAWALVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x1c55cccd. +// +// Solidity: function VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) VALIDATORWITHDRAWALVAULTIMPLEMENTATION(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// VALIDATORWITHDRAWALVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x1c55cccd. +// +// Solidity: function VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) VALIDATORWITHDRAWALVAULTIMPLEMENTATION() ([32]byte, error) { + return _StaderConfig.Contract.VALIDATORWITHDRAWALVAULTIMPLEMENTATION(&_StaderConfig.CallOpts) +} + +// VALIDATORWITHDRAWALVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x1c55cccd. +// +// Solidity: function VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) VALIDATORWITHDRAWALVAULTIMPLEMENTATION() ([32]byte, error) { + return _StaderConfig.Contract.VALIDATORWITHDRAWALVAULTIMPLEMENTATION(&_StaderConfig.CallOpts) +} + // VAULTFACTORY is a free data retrieval call binding the contract method 0x103f2907. // // Solidity: function VAULT_FACTORY() view returns(bytes32) @@ -1513,6 +1659,37 @@ func (_StaderConfig *StaderConfigCallerSession) GetDecimals() (*big.Int, error) return _StaderConfig.Contract.GetDecimals(&_StaderConfig.CallOpts) } +// GetETHBalancePORFeedProxy is a free data retrieval call binding the contract method 0x489ed651. +// +// Solidity: function getETHBalancePORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetETHBalancePORFeedProxy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getETHBalancePORFeedProxy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetETHBalancePORFeedProxy is a free data retrieval call binding the contract method 0x489ed651. +// +// Solidity: function getETHBalancePORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigSession) GetETHBalancePORFeedProxy() (common.Address, error) { + return _StaderConfig.Contract.GetETHBalancePORFeedProxy(&_StaderConfig.CallOpts) +} + +// GetETHBalancePORFeedProxy is a free data retrieval call binding the contract method 0x489ed651. +// +// Solidity: function getETHBalancePORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetETHBalancePORFeedProxy() (common.Address, error) { + return _StaderConfig.Contract.GetETHBalancePORFeedProxy(&_StaderConfig.CallOpts) +} + // GetETHDepositContract is a free data retrieval call binding the contract method 0x8f8b3867. // // Solidity: function getETHDepositContract() view returns(address) @@ -1544,6 +1721,37 @@ func (_StaderConfig *StaderConfigCallerSession) GetETHDepositContract() (common. return _StaderConfig.Contract.GetETHDepositContract(&_StaderConfig.CallOpts) } +// GetETHXSupplyPORFeedProxy is a free data retrieval call binding the contract method 0x2ca03f66. +// +// Solidity: function getETHXSupplyPORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetETHXSupplyPORFeedProxy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getETHXSupplyPORFeedProxy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetETHXSupplyPORFeedProxy is a free data retrieval call binding the contract method 0x2ca03f66. +// +// Solidity: function getETHXSupplyPORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigSession) GetETHXSupplyPORFeedProxy() (common.Address, error) { + return _StaderConfig.Contract.GetETHXSupplyPORFeedProxy(&_StaderConfig.CallOpts) +} + +// GetETHXSupplyPORFeedProxy is a free data retrieval call binding the contract method 0x2ca03f66. +// +// Solidity: function getETHXSupplyPORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetETHXSupplyPORFeedProxy() (common.Address, error) { + return _StaderConfig.Contract.GetETHXSupplyPORFeedProxy(&_StaderConfig.CallOpts) +} + // GetETHxToken is a free data retrieval call binding the contract method 0xcc45dabe. // // Solidity: function getETHxToken() view returns(address) @@ -1761,6 +1969,37 @@ func (_StaderConfig *StaderConfigCallerSession) GetMinWithdrawAmount() (*big.Int return _StaderConfig.Contract.GetMinWithdrawAmount(&_StaderConfig.CallOpts) } +// GetNodeELRewardVaultImplementation is a free data retrieval call binding the contract method 0xe8fe1873. +// +// Solidity: function getNodeELRewardVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetNodeELRewardVaultImplementation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getNodeELRewardVaultImplementation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetNodeELRewardVaultImplementation is a free data retrieval call binding the contract method 0xe8fe1873. +// +// Solidity: function getNodeELRewardVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigSession) GetNodeELRewardVaultImplementation() (common.Address, error) { + return _StaderConfig.Contract.GetNodeELRewardVaultImplementation(&_StaderConfig.CallOpts) +} + +// GetNodeELRewardVaultImplementation is a free data retrieval call binding the contract method 0xe8fe1873. +// +// Solidity: function getNodeELRewardVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetNodeELRewardVaultImplementation() (common.Address, error) { + return _StaderConfig.Contract.GetNodeELRewardVaultImplementation(&_StaderConfig.CallOpts) +} + // GetOperatorMaxNameLength is a free data retrieval call binding the contract method 0x10deba2b. // // Solidity: function getOperatorMaxNameLength() view returns(uint256) @@ -2536,6 +2775,37 @@ func (_StaderConfig *StaderConfigCallerSession) GetUserWithdrawManager() (common return _StaderConfig.Contract.GetUserWithdrawManager(&_StaderConfig.CallOpts) } +// GetValidatorWithdrawalVaultImplementation is a free data retrieval call binding the contract method 0x6d28ad1c. +// +// Solidity: function getValidatorWithdrawalVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetValidatorWithdrawalVaultImplementation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getValidatorWithdrawalVaultImplementation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetValidatorWithdrawalVaultImplementation is a free data retrieval call binding the contract method 0x6d28ad1c. +// +// Solidity: function getValidatorWithdrawalVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigSession) GetValidatorWithdrawalVaultImplementation() (common.Address, error) { + return _StaderConfig.Contract.GetValidatorWithdrawalVaultImplementation(&_StaderConfig.CallOpts) +} + +// GetValidatorWithdrawalVaultImplementation is a free data retrieval call binding the contract method 0x6d28ad1c. +// +// Solidity: function getValidatorWithdrawalVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetValidatorWithdrawalVaultImplementation() (common.Address, error) { + return _StaderConfig.Contract.GetValidatorWithdrawalVaultImplementation(&_StaderConfig.CallOpts) +} + // GetVaultFactory is a free data retrieval call binding the contract method 0x18bcb284. // // Solidity: function getVaultFactory() view returns(address) @@ -2879,6 +3149,48 @@ func (_StaderConfig *StaderConfigTransactorSession) UpdateAuctionContract(_aucti return _StaderConfig.Contract.UpdateAuctionContract(&_StaderConfig.TransactOpts, _auctionContract) } +// UpdateETHBalancePORFeedProxy is a paid mutator transaction binding the contract method 0x403efe7f. +// +// Solidity: function updateETHBalancePORFeedProxy(address _ethBalanceProxy) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateETHBalancePORFeedProxy(opts *bind.TransactOpts, _ethBalanceProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateETHBalancePORFeedProxy", _ethBalanceProxy) +} + +// UpdateETHBalancePORFeedProxy is a paid mutator transaction binding the contract method 0x403efe7f. +// +// Solidity: function updateETHBalancePORFeedProxy(address _ethBalanceProxy) returns() +func (_StaderConfig *StaderConfigSession) UpdateETHBalancePORFeedProxy(_ethBalanceProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateETHBalancePORFeedProxy(&_StaderConfig.TransactOpts, _ethBalanceProxy) +} + +// UpdateETHBalancePORFeedProxy is a paid mutator transaction binding the contract method 0x403efe7f. +// +// Solidity: function updateETHBalancePORFeedProxy(address _ethBalanceProxy) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateETHBalancePORFeedProxy(_ethBalanceProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateETHBalancePORFeedProxy(&_StaderConfig.TransactOpts, _ethBalanceProxy) +} + +// UpdateETHXSupplyPORFeedProxy is a paid mutator transaction binding the contract method 0x72195b3e. +// +// Solidity: function updateETHXSupplyPORFeedProxy(address _ethXSupplyProxy) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateETHXSupplyPORFeedProxy(opts *bind.TransactOpts, _ethXSupplyProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateETHXSupplyPORFeedProxy", _ethXSupplyProxy) +} + +// UpdateETHXSupplyPORFeedProxy is a paid mutator transaction binding the contract method 0x72195b3e. +// +// Solidity: function updateETHXSupplyPORFeedProxy(address _ethXSupplyProxy) returns() +func (_StaderConfig *StaderConfigSession) UpdateETHXSupplyPORFeedProxy(_ethXSupplyProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateETHXSupplyPORFeedProxy(&_StaderConfig.TransactOpts, _ethXSupplyProxy) +} + +// UpdateETHXSupplyPORFeedProxy is a paid mutator transaction binding the contract method 0x72195b3e. +// +// Solidity: function updateETHXSupplyPORFeedProxy(address _ethXSupplyProxy) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateETHXSupplyPORFeedProxy(_ethXSupplyProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateETHXSupplyPORFeedProxy(&_StaderConfig.TransactOpts, _ethXSupplyProxy) +} + // UpdateETHxToken is a paid mutator transaction binding the contract method 0xb9894a11. // // Solidity: function updateETHxToken(address _ethX) returns() @@ -3005,6 +3317,27 @@ func (_StaderConfig *StaderConfigTransactorSession) UpdateMinWithdrawAmount(_min return _StaderConfig.Contract.UpdateMinWithdrawAmount(&_StaderConfig.TransactOpts, _minWithdrawAmount) } +// UpdateNodeELRewardImplementation is a paid mutator transaction binding the contract method 0x5be6ce69. +// +// Solidity: function updateNodeELRewardImplementation(address _nodeELRewardVaultImpl) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateNodeELRewardImplementation(opts *bind.TransactOpts, _nodeELRewardVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateNodeELRewardImplementation", _nodeELRewardVaultImpl) +} + +// UpdateNodeELRewardImplementation is a paid mutator transaction binding the contract method 0x5be6ce69. +// +// Solidity: function updateNodeELRewardImplementation(address _nodeELRewardVaultImpl) returns() +func (_StaderConfig *StaderConfigSession) UpdateNodeELRewardImplementation(_nodeELRewardVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateNodeELRewardImplementation(&_StaderConfig.TransactOpts, _nodeELRewardVaultImpl) +} + +// UpdateNodeELRewardImplementation is a paid mutator transaction binding the contract method 0x5be6ce69. +// +// Solidity: function updateNodeELRewardImplementation(address _nodeELRewardVaultImpl) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateNodeELRewardImplementation(_nodeELRewardVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateNodeELRewardImplementation(&_StaderConfig.TransactOpts, _nodeELRewardVaultImpl) +} + // UpdateOperatorRewardsCollector is a paid mutator transaction binding the contract method 0x1de03db8. // // Solidity: function updateOperatorRewardsCollector(address _operatorRewardsCollector) returns() @@ -3425,6 +3758,27 @@ func (_StaderConfig *StaderConfigTransactorSession) UpdateUserWithdrawManager(_u return _StaderConfig.Contract.UpdateUserWithdrawManager(&_StaderConfig.TransactOpts, _userWithdrawManager) } +// UpdateValidatorWithdrawalVaultImplementation is a paid mutator transaction binding the contract method 0x5b5961fc. +// +// Solidity: function updateValidatorWithdrawalVaultImplementation(address _validatorWithdrawalVaultImpl) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateValidatorWithdrawalVaultImplementation(opts *bind.TransactOpts, _validatorWithdrawalVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateValidatorWithdrawalVaultImplementation", _validatorWithdrawalVaultImpl) +} + +// UpdateValidatorWithdrawalVaultImplementation is a paid mutator transaction binding the contract method 0x5b5961fc. +// +// Solidity: function updateValidatorWithdrawalVaultImplementation(address _validatorWithdrawalVaultImpl) returns() +func (_StaderConfig *StaderConfigSession) UpdateValidatorWithdrawalVaultImplementation(_validatorWithdrawalVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateValidatorWithdrawalVaultImplementation(&_StaderConfig.TransactOpts, _validatorWithdrawalVaultImpl) +} + +// UpdateValidatorWithdrawalVaultImplementation is a paid mutator transaction binding the contract method 0x5b5961fc. +// +// Solidity: function updateValidatorWithdrawalVaultImplementation(address _validatorWithdrawalVaultImpl) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateValidatorWithdrawalVaultImplementation(_validatorWithdrawalVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateValidatorWithdrawalVaultImplementation(&_StaderConfig.TransactOpts, _validatorWithdrawalVaultImpl) +} + // UpdateVaultFactory is a paid mutator transaction binding the contract method 0x98c35927. // // Solidity: function updateVaultFactory(address _vaultFactory) returns() diff --git a/stader-lib/stader-config/stader-config.go b/stader-lib/stader-config/stader-config.go index 8ea918f9f..674c806a7 100644 --- a/stader-lib/stader-config/stader-config.go +++ b/stader-lib/stader-config/stader-config.go @@ -1,10 +1,11 @@ package stader_config import ( + "math/big" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/stader-labs/stader-node/stader-lib/stader" - "math/big" ) func GetRewardsThreshold(sdConfig *stader.StaderConfigContractManager, opts *bind.CallOpts) (*big.Int, error) { diff --git a/stader-lib/stader/stader.go b/stader-lib/stader/stader.go index 80e1d65dd..769e46d0b 100644 --- a/stader-lib/stader/stader.go +++ b/stader-lib/stader/stader.go @@ -1,11 +1,12 @@ package stader import ( + "strings" + "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/stader-labs/stader-node/stader-lib/contracts" - "strings" ) type Erc20TokenContractManager struct { @@ -39,6 +40,37 @@ func NewErc20TokenContract(client ExecutionClient, erc20TokenAddress common.Addr } +type EthxContractManager struct { + Client ExecutionClient + EthX *contracts.ETHX + EthXContract *Contract +} + +func NewEthxContractManager(client ExecutionClient, ethxAddress common.Address) (*EthxContractManager, error) { + ethxFactory, err := contracts.NewETHX(ethxAddress, client) + if err != nil { + return nil, err + } + + ethxAbi, err := abi.JSON(strings.NewReader(contracts.ETHXABI)) + if err != nil { + return nil, err + } + ethXContract := &Contract{ + Contract: bind.NewBoundContract(ethxAddress, ethxAbi, client, client, client), + Address: ðxAddress, + ABI: ðxAbi, + Client: client, + } + + return &EthxContractManager{ + Client: client, + EthX: ethxFactory, + EthXContract: ethXContract, + }, nil + +} + type SdCollateralContractManager struct { Client ExecutionClient SdCollateral *contracts.SdCollateral diff --git a/stader/node/node.go b/stader/node/node.go index b289a83c0..fdcc3896e 100644 --- a/stader/node/node.go +++ b/stader/node/node.go @@ -112,14 +112,14 @@ func run(c *cli.Context) error { } // Initialize tasks - manageFeeRecipient, err := newManageFeeRecipient(c, log.NewColorLogger(ManageFeeRecipientColor)) - if err != nil { - return err - } - merkleProofsDownloader, err := NewMerkleProofsDownloader(c, log.NewColorLogger(MerkleProofsDownloaderColor)) - if err != nil { - return err - } + // manageFeeRecipient, err := newManageFeeRecipient(c, log.NewColorLogger(ManageFeeRecipientColor)) + // if err != nil { + // return err + // } + // merkleProofsDownloader, err := NewMerkleProofsDownloader(c, log.NewColorLogger(MerkleProofsDownloaderColor)) + // if err != nil { + // return err + // } // Initialize loggers errorLog := log.NewColorLogger(ErrorColor) @@ -322,56 +322,56 @@ func run(c *cli.Context) error { wg.Done() }() - // Run task loop - go func() { - for { - // Check the EC status - err := services.WaitEthClientSynced(c, false) // Force refresh the primary / fallback EC status - if err != nil { - errorLog.Println(err) - } else { - // Check the BC status - err := services.WaitBeaconClientSynced(c, false) // Force refresh the primary / fallback BC status - if err != nil { - errorLog.Println(err) - } else { - // Manage the fee recipient for the node - if err := manageFeeRecipient.run(); err != nil { - errorLog.Println(err) - } - time.Sleep(taskCooldown) - } - } - time.Sleep(feeRecepientPollingInterval) - } - wg.Done() - }() - - go func() { - for { - infoLog.Printlnf("Checking if there are any available merkle proofs to download") - // Check the EC status - err := services.WaitEthClientSynced(c, false) // Force refresh the primary / fallback EC status - if err != nil { - errorLog.Println(err) - } else { - // Check the BC status - err := services.WaitBeaconClientSynced(c, false) // Force refresh the primary / fallback BC status - if err != nil { - errorLog.Println(err) - } else { - // Manage the fee recipient for the node - if err := merkleProofsDownloader.run(); err != nil { - errorLog.Println(err) - } - time.Sleep(taskCooldown) - } - } - infoLog.Printlnf("Done checking for merkle proofs to download") - time.Sleep(merkleProofsDownloadInterval) - } - wg.Done() - }() + // // Run task loop + // go func() { + // for { + // // Check the EC status + // err := services.WaitEthClientSynced(c, false) // Force refresh the primary / fallback EC status + // if err != nil { + // errorLog.Println(err) + // } else { + // // Check the BC status + // err := services.WaitBeaconClientSynced(c, false) // Force refresh the primary / fallback BC status + // if err != nil { + // errorLog.Println(err) + // } else { + // // Manage the fee recipient for the node + // if err := manageFeeRecipient.run(); err != nil { + // errorLog.Println(err) + // } + // time.Sleep(taskCooldown) + // } + // } + // time.Sleep(feeRecepientPollingInterval) + // } + // wg.Done() + // }() + + // go func() { + // for { + // infoLog.Printlnf("Checking if there are any available merkle proofs to download") + // // Check the EC status + // err := services.WaitEthClientSynced(c, false) // Force refresh the primary / fallback EC status + // if err != nil { + // errorLog.Println(err) + // } else { + // // Check the BC status + // err := services.WaitBeaconClientSynced(c, false) // Force refresh the primary / fallback BC status + // if err != nil { + // errorLog.Println(err) + // } else { + // // Manage the fee recipient for the node + // if err := merkleProofsDownloader.run(); err != nil { + // errorLog.Println(err) + // } + // time.Sleep(taskCooldown) + // } + // } + // infoLog.Printlnf("Done checking for merkle proofs to download") + // time.Sleep(merkleProofsDownloadInterval) + // } + // wg.Done() + // }() // Wait for both threads to stop wg.Wait() diff --git a/testing/config_test.go b/testing/config_test.go index 3ef34d1ae..510b1afd5 100644 --- a/testing/config_test.go +++ b/testing/config_test.go @@ -73,7 +73,7 @@ var cf = []byte(`{ "num_validator_keys_per_node": 40, "network_id": "3151908", "deposit_contract_address": "0x4242424242424242424242424242424242424242", - "seconds_per_slot": 2, + "seconds_per_slot": 1, "genesis_delay": 120, "capella_fork_epoch": 5 } @@ -231,7 +231,7 @@ func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { s.setupWallet(ctx, c) logrus.Info("------------ DEPLOYING CONTRACT ---------------") - deployContracts(elUrl) + deployContracts(t, c, elUrl) } @@ -247,9 +247,7 @@ func (s *StaderNodeSuite) setupWallet(ctx context.Context, c *cli.Context) { w, err := services.GetWallet(c) require.Nil(s.T(), err) - mn, err := w.Initialize(wallet.DefaultNodeKeyPath, 0) - logrus.Info("------------ MNENOMIC TEST ---------------") - logrus.Info(mn) + _, err = w.Initialize(wallet.DefaultNodeKeyPath, 0) require.Nil(s.T(), err) diff --git a/testing/deploy.go b/testing/deploy.go index bd2bbfc23..1866acbea 100644 --- a/testing/deploy.go +++ b/testing/deploy.go @@ -5,27 +5,27 @@ import ( "crypto/ecdsa" "fmt" "math/big" + "testing" + "time" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethclient" - api "github.com/stader-labs/stader-node/stader-lib/api" + "github.com/stader-labs/stader-node/stader-lib/contracts" + "github.com/stretchr/testify/require" + "github.com/urfave/cli" ) var PRE_FUNDED_ACCOUNTS = "ef5177cd0b6b21c87db5a0bf35d4084a8a57a9d6a064f86d51ac85f2b873a4e2" -func deployContracts(eth1URL string) { +func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { client, err := ethclient.Dial(eth1URL) - if err != nil { - panic(err) - } + require.Nil(t, err) // private key of the deployer privateKey, err := crypto.HexToECDSA(PRE_FUNDED_ACCOUNTS) - if err != nil { - panic(err) - } + require.Nil(t, err) // extract public key of the deployer from private key publicKey := privateKey.Public() @@ -39,36 +39,98 @@ func deployContracts(eth1URL string) { // chain id of the network chainID, err := client.NetworkID(context.Background()) - if err != nil { - panic(err) - } + require.Nil(t, err) fmt.Printf("FROM: %+v \n ", fromAddress.Hex()) // Get Transaction Ops to make a valid Ethereum transaction auth, err := GetNextTransaction(client, fromAddress, privateKey, chainID) - if err != nil { - panic(err) - } + require.Nil(t, err) // deploy the contract - address, _, _, err := api.DeployETHX(auth, client) - if err != nil { - panic(err) - } + ethXAddr, _, ethxContract, err := contracts.DeployETHX(auth, client) + require.Nil(t, err) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) - if err != nil { - panic(err) + require.Nil(t, err) + + staderCfAddress, _, stdCfContract, err := contracts.DeployStaderConfig(auth, client) + require.Nil(t, err) + + auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + require.Nil(t, err) + + stdCfContract.Initialize(auth, fromAddress, ethXAddr) + auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + require.Nil(t, err) + + // Init ethx + _, err = ethxContract.Initialize(auth, fromAddress, staderCfAddress) + require.Nil(t, err) + auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + require.Nil(t, err) + + ethxContract.UpdateStaderConfig(auth, staderCfAddress) + auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + require.Nil(t, err) + + // sdcfg, err := contractsSrv.GetStaderConfigContract(c) + // require.Nil(t, err) + + // Deploy node permission + plNodeRegistryAddr, _, _, err := contracts.DeployPermissionlessNodeRegistry(auth, client) + require.Nil(t, err) + auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + require.Nil(t, err) + + // Update Node permissionless regis to stader config + _, err = stdCfContract.UpdatePermissionlessNodeRegistry(auth, plNodeRegistryAddr) + require.Nil(t, err) + auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + require.Nil(t, err) + + // Deploy permissionless pool + permissionlessPool, _, _, err := contracts.DeployPermissionlessPool(auth, client) + require.Nil(t, err) + auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + require.Nil(t, err) + + // Update Node permissionless pool to stader config + tx, err := stdCfContract.UpdatePermissionlessPool(auth, permissionlessPool) + require.Nil(t, err) + auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + require.Nil(t, err) + + for { + _, isPending, err := client.TransactionByHash(context.TODO(), tx.Hash()) + require.Nil(t, err) + if isPending != true { + break + } + time.Sleep(10 * time.Second) } - staderCfAddress, _, _, err := api.DeployStaderConfig(auth, client) + auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + require.Nil(t, err) + + auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + require.Nil(t, err) + + // time.Sleep(time.Minute) + storedPLPool, err := stdCfContract.GetPermissionlessPool(&bind.CallOpts{}) if err != nil { panic(err) } + storedPLRegis, err := stdCfContract.GetPermissionlessNodeRegistry(&bind.CallOpts{ + Pending: true, + }) + require.Nil(t, err) + fmt.Printf("Api contract from %s\n", auth.From.Hex()) - fmt.Printf("DeployETHX to %s\n", address.Hex()) + fmt.Printf("DeployETHX to %s\n", ethXAddr.Hex()) fmt.Printf("DeployStaderConfig to %s\n", staderCfAddress.Hex()) + fmt.Printf("DeployPermissionlessPool to %s <> %s \n", permissionlessPool.Hex(), storedPLPool.Hex()) + fmt.Printf("permissionlessNR to %s <> store %s\n", plNodeRegistryAddr.Hex(), storedPLRegis.Hex()) } @@ -88,7 +150,7 @@ func GetNextTransaction(client *ethclient.Client, fromAddress common.Address, pr } auth.Nonce = big.NewInt(int64(nonce)) auth.Value = big.NewInt(0) // in wei - auth.GasLimit = uint64(3000000) // in units + auth.GasLimit = uint64(3000000) // in units 1000000 auth.GasPrice = big.NewInt(1000000000) // in wei return auth, nil diff --git a/testing/node_test.go b/testing/node_test.go index dc9b61b7c..e155204b2 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -38,17 +38,16 @@ func (s *StaderNodeSuite) TestNodeDaemon() { // }) // require.Nil(s.T(), err) // }) - time.Sleep(time.Minute * 2) + time.Sleep(time.Minute * 5) - logrus.Printf("SOSSSSSSSSSSSSSSS") } // run once, before test suite methods func (s *StaderNodeSuite) SetupSuite() { + removeTestFolder(s.T()) defer func() { r := recover() - assert.Nil(s.T(), r, "------------ Recovered TESTS ---------------") }() @@ -77,7 +76,7 @@ func (s *StaderNodeSuite) SetupSuite() { a[0], "node", }) - require.Nil(s.T(), err) + assert.Nil(s.T(), err) }() } @@ -88,8 +87,12 @@ func (s *StaderNodeSuite) TearDownSuite() { defer s.kurtosisCtx.Clean(context.Background(), true) + removeTestFolder(s.T()) +} + +func removeTestFolder(t *testing.T) { path, err := homedir.Expand(ConfigPath) - require.Nil(s.T(), err) + require.Nil(t, err) _ = os.RemoveAll(path) } From 53c4d82bef8068e5e22eaf09a4bd8ccabf2adddf Mon Sep 17 00:00:00 2001 From: batphonghan Date: Fri, 16 Jun 2023 11:05:09 +0700 Subject: [PATCH 18/90] WIP --- shared/services/config/stadernode-config.go | 13 +- .../{config_test.go => configHelper_test.go} | 157 +++++++++--------- testing/{deploy.go => deployHelper_test.go} | 62 +++---- 3 files changed, 118 insertions(+), 114 deletions(-) rename testing/{config_test.go => configHelper_test.go} (61%) rename testing/{deploy.go => deployHelper_test.go} (79%) diff --git a/shared/services/config/stadernode-config.go b/shared/services/config/stadernode-config.go index 528e9ad9c..e52302a74 100644 --- a/shared/services/config/stadernode-config.go +++ b/shared/services/config/stadernode-config.go @@ -435,11 +435,18 @@ func (cfg *StaderNodeConfig) GetSpRewardCyclePath(cycle int64, daemon bool) stri } func (cfg *StaderNodeConfig) GetFeeRecipientFilePath() string { - if cfg.parent != nil && cfg.parent.IsNativeMode { - return filepath.Join(cfg.DataPath.Value.(string), "validators") + // if cfg.parent != nil && cfg.parent.IsNativeMode { + // return filepath.Join(cfg.DataPath.Value.(string), "validators") + // } + + // return filepath.Join(DaemonDataPath, "validators", NativeFeeRecipientFilename) + + if cfg.parent != nil && !cfg.parent.IsNativeMode { + return filepath.Join(DaemonDataPath, "validators", FeeRecipientFilename) } - return filepath.Join(DaemonDataPath, "validators", NativeFeeRecipientFilename) + return filepath.Join(cfg.DataPath.Value.(string), "validators", NativeFeeRecipientFilename) + } func (cfg *StaderNodeConfig) GetClaimData(cycles []*big.Int) ([]*big.Int, []*big.Int, [][][32]byte, error) { diff --git a/testing/config_test.go b/testing/configHelper_test.go similarity index 61% rename from testing/config_test.go rename to testing/configHelper_test.go index 510b1afd5..e137f9a0a 100644 --- a/testing/config_test.go +++ b/testing/configHelper_test.go @@ -5,9 +5,7 @@ import ( "fmt" "os" "path/filepath" - "time" - "github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context" "github.com/mitchellh/go-homedir" "github.com/sirupsen/logrus" "github.com/stader-labs/stader-node/shared/services" @@ -17,13 +15,44 @@ import ( cfgtypes "github.com/stader-labs/stader-node/shared/types/config" "github.com/stader-labs/stader-node/stader/api" "github.com/stader-labs/stader-node/stader/node" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/urfave/cli" "github.com/stader-labs/stader-node/shared/services/config" ) +var ( + preFundedKey = "dbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97" + UserSettingPath = filepath.Join(ConfigPath, "user-settings.yml") + ConfigPath, _ = homedir.Expand("~/.stader_testing") + PasswordPath = filepath.Join(ConfigPath, "password") + cf = []byte(`{ + "participants": [ + { + "el_client_type": "geth", + "el_client_image": "ethereum/client-go:v1.11.5", + "el_client_log_level": "", + "cl_client_type": "lighthouse", + "cl_client_image": "sigp/lighthouse:v3.5.0", + "cl_client_log_level": "", + "beacon_extra_params": [], + "el_extra_params": ["--http", "--rpc, "--rpccorsdomain "http://localhost:8000"], + "validator_extra_params": [], + "builder_network_params": null + } + ], + "network_params": { + "preregistered_validator_keys_mnemonic": "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete", + "num_validator_keys_per_node": 40, + "network_id": "3151908", + "deposit_contract_address": "0x4242424242424242424242424242424242424242", + "seconds_per_slot": 1, + "genesis_delay": 120, + "capella_fork_epoch": 5 + } + }`) +) + const ( enclaveIdPrefix = "stader" @@ -48,37 +77,6 @@ const ( defaultParallelism = 4 ) -var ( - UserSettingPath = filepath.Join(ConfigPath, "user-settings.yml") - ConfigPath, _ = homedir.Expand("~/.stader_testing") - PasswordPath = filepath.Join(ConfigPath, "password") -) -var cf = []byte(`{ - "participants": [ - { - "el_client_type": "geth", - "el_client_image": "ethereum/client-go:v1.11.5", - "el_client_log_level": "", - "cl_client_type": "lighthouse", - "cl_client_image": "sigp/lighthouse:v3.5.0", - "cl_client_log_level": "", - "beacon_extra_params": [], - "el_extra_params": ["--http"], - "validator_extra_params": [], - "builder_network_params": null - } - ], - "network_params": { - "preregistered_validator_keys_mnemonic": "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete", - "num_validator_keys_per_node": 40, - "network_id": "3151908", - "deposit_contract_address": "0x4242424242424242424242424242424242424242", - "seconds_per_slot": 1, - "genesis_delay": 120, - "capella_fork_epoch": 5 - } -}`) - func newApp() *cli.App { app := cli.NewApp() @@ -184,48 +182,49 @@ func (s *StaderNodeSuite) setConfig(c *cli.Context, elURL string, clURL string) func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { t := s.T() - - logrus.Info("------------ CONNECTING TO KURTOSIS ENGINE ---------------") - kurtosis_context.NewKurtosisContextFromLocalEngine() - kurtosisCtx, err := kurtosis_context.NewKurtosisContextFromLocalEngine() - assert.NoError(t, err, "An error occurred connecting to the Kurtosis engine") - - enclaveId := fmt.Sprintf("%s-%d", enclaveIdPrefix, time.Now().Unix()) - - enclaveCtx, err := kurtosisCtx.CreateEnclave(ctx, enclaveId, isPartitioningEnabled) - - s.kurtosisCtx = kurtosisCtx - s.enclaveId = enclaveId - assert.NoError(t, err, "An error occurred creating the enclave") - - logrus.Info("------------ EXECUTING PACKAGE ---------------") - - starlarkRunResult, err := enclaveCtx.RunStarlarkRemotePackageBlocking(ctx, remotePackage, useDefaultMainFile, useDefaultFunctionName, emptyParams, defaultDryRun, defaultParallelism) - - assert.NoError(t, err, "An error executing loading the package") - assert.Nil(t, starlarkRunResult.InterpretationError) - assert.Empty(t, starlarkRunResult.ValidationErrors) - assert.Nil(t, starlarkRunResult.ExecutionError) - - logrus.Info("------------ EXECUTING TESTS ---------------") - beaconContext, err := enclaveCtx.GetServiceContext(clClientBeacon) - assert.Nil(t, err) - apiServicePublicPorts := beaconContext.GetPublicPorts() - assert.NotNil(t, apiServicePublicPorts) - apiServiceHttpPortSpec, found := apiServicePublicPorts["http"] - assert.True(t, found) - clPort := apiServiceHttpPortSpec.GetNumber() - - elContext, err := enclaveCtx.GetServiceContext(elCient) - assert.Nil(t, err) - elPublicPorts := elContext.GetPublicPorts() - assert.NotNil(t, apiServicePublicPorts) - apiServiceHttpPortSpec, found = elPublicPorts["rpc"] - assert.True(t, found) - elPort := apiServiceHttpPortSpec.GetNumber() - - elUrl := fmt.Sprintf("http://127.0.0.1:%d", elPort) - clUrl := fmt.Sprintf("http://127.0.0.1:%d", clPort) + /* + logrus.Info("------------ CONNECTING TO KURTOSIS ENGINE ---------------") + kurtosis_context.NewKurtosisContextFromLocalEngine() + kurtosisCtx, err := kurtosis_context.NewKurtosisContextFromLocalEngine() + assert.NoError(t, err, "An error occurred connecting to the Kurtosis engine") + + enclaveId := fmt.Sprintf("%s-%d", enclaveIdPrefix, time.Now().Unix()) + + enclaveCtx, err := kurtosisCtx.CreateEnclave(ctx, enclaveId, isPartitioningEnabled) + + s.kurtosisCtx = kurtosisCtx + s.enclaveId = enclaveId + assert.NoError(t, err, "An error occurred creating the enclave") + + logrus.Info("------------ EXECUTING PACKAGE ---------------") + + starlarkRunResult, err := enclaveCtx.RunStarlarkRemotePackageBlocking(ctx, remotePackage, useDefaultMainFile, useDefaultFunctionName, emptyParams, defaultDryRun, defaultParallelism) + + assert.NoError(t, err, "An error executing loading the package") + assert.Nil(t, starlarkRunResult.InterpretationError) + assert.Empty(t, starlarkRunResult.ValidationErrors) + assert.Nil(t, starlarkRunResult.ExecutionError) + + logrus.Info("------------ EXECUTING TESTS ---------------") + beaconContext, err := enclaveCtx.GetServiceContext(clClientBeacon) + assert.Nil(t, err) + apiServicePublicPorts := beaconContext.GetPublicPorts() + assert.NotNil(t, apiServicePublicPorts) + apiServiceHttpPortSpec, found := apiServicePublicPorts["http"] + assert.True(t, found) + clPort := apiServiceHttpPortSpec.GetNumber() + + elContext, err := enclaveCtx.GetServiceContext(elCient) + assert.Nil(t, err) + elPublicPorts := elContext.GetPublicPorts() + assert.NotNil(t, apiServicePublicPorts) + apiServiceHttpPortSpec, found = elPublicPorts["rpc"] + assert.True(t, found) + elPort := apiServiceHttpPortSpec.GetNumber() + + */ + clUrl := fmt.Sprintf("http://127.0.0.1:49982") + elUrl := fmt.Sprintf("http://127.0.0.1:8545") s.setConfig(c, elUrl, clUrl) s.setupWallet(ctx, c) @@ -254,9 +253,3 @@ func (s *StaderNodeSuite) setupWallet(ctx context.Context, c *cli.Context) { err = w.Save() require.Nil(s.T(), err) } - -/* - Api contract from 0x878705ba3f8Bc32FCf7F4CAa1A35E72AF65CF766 -Api contract deployed to 0xAb2A01BC351770D09611Ac80f1DE076D56E0487d -Tx: 0xcc52c30d4d4ea67654b23beda69696485ca60577db8c2482adad82eedd199bf5 -*/ diff --git a/testing/deploy.go b/testing/deployHelper_test.go similarity index 79% rename from testing/deploy.go rename to testing/deployHelper_test.go index 1866acbea..f9c7fccfa 100644 --- a/testing/deploy.go +++ b/testing/deployHelper_test.go @@ -17,14 +17,12 @@ import ( "github.com/urfave/cli" ) -var PRE_FUNDED_ACCOUNTS = "ef5177cd0b6b21c87db5a0bf35d4084a8a57a9d6a064f86d51ac85f2b873a4e2" - func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { client, err := ethclient.Dial(eth1URL) require.Nil(t, err) // private key of the deployer - privateKey, err := crypto.HexToECDSA(PRE_FUNDED_ACCOUNTS) + privateKey, err := crypto.HexToECDSA(preFundedKey) require.Nil(t, err) // extract public key of the deployer from private key @@ -46,26 +44,34 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { auth, err := GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) - // deploy the contract + // deploy the ethx contract ethXAddr, _, ethxContract, err := contracts.DeployETHX(auth, client) require.Nil(t, err) - + // auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + time.Sleep(5 * time.Second) // Allow it to be processed by the local node :P auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) + time.Sleep(5 * time.Second) // Allow it to be processed by the local node :P + _, err = ethxContract.Decimals(&bind.CallOpts{ + Pending: true, + }) + if err != nil { + panic(err) + } + + // deploy the config contract staderCfAddress, _, stdCfContract, err := contracts.DeployStaderConfig(auth, client) require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) - auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + // Init ethx + _, err = ethxContract.Initialize(auth, fromAddress, staderCfAddress) require.Nil(t, err) - - stdCfContract.Initialize(auth, fromAddress, ethXAddr) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) - // Init ethx - _, err = ethxContract.Initialize(auth, fromAddress, staderCfAddress) - require.Nil(t, err) + stdCfContract.Initialize(auth, fromAddress, ethXAddr) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) @@ -90,33 +96,30 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { // Deploy permissionless pool permissionlessPool, _, _, err := contracts.DeployPermissionlessPool(auth, client) + + // client.Commit() require.Nil(t, err) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) // Update Node permissionless pool to stader config - tx, err := stdCfContract.UpdatePermissionlessPool(auth, permissionlessPool) + _, err = stdCfContract.UpdatePermissionlessPool(auth, permissionlessPool) require.Nil(t, err) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) - for { - _, isPending, err := client.TransactionByHash(context.TODO(), tx.Hash()) - require.Nil(t, err) - if isPending != true { - break - } - time.Sleep(10 * time.Second) + time.Sleep(time.Second) + opt := bind.CallOpts{ + Pending: true, + } + ETHxToken, err := ethxContract.Decimals(&opt) + if err != nil { + panic(err) } - auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) - require.Nil(t, err) - - auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) - require.Nil(t, err) - + fmt.Printf("ETHxToken from %+v\n", ETHxToken) // time.Sleep(time.Minute) - storedPLPool, err := stdCfContract.GetPermissionlessPool(&bind.CallOpts{}) + storedPLPool, err := stdCfContract.GetPermissionlessPool(&opt) if err != nil { panic(err) } @@ -143,15 +146,16 @@ func GetNextTransaction(client *ethclient.Client, fromAddress common.Address, pr return nil, err } + fmt.Println(" >>>>>>>>>>>>>> Nouce ", nonce) // sign the transaction auth, err := bind.NewKeyedTransactorWithChainID(privateKey, chainID) if err != nil { return nil, err } auth.Nonce = big.NewInt(int64(nonce)) - auth.Value = big.NewInt(0) // in wei - auth.GasLimit = uint64(3000000) // in units 1000000 - auth.GasPrice = big.NewInt(1000000000) // in wei + auth.Value = big.NewInt(0) // in wei + auth.GasLimit = uint64(10000000) // in units + auth.GasPrice = big.NewInt(10000000000) // in wei return auth, nil } From f78f32fad382e25479c9d8908677596b5935fd7b Mon Sep 17 00:00:00 2001 From: batphonghan Date: Fri, 16 Jun 2023 14:59:56 +0700 Subject: [PATCH 19/90] WIP --- stader-lib/contracts/ETHX.go | 4 ++-- stader-lib/contracts/stader-config.go | 4 ++-- testing/configHelper_test.go | 15 ++++++++------- testing/deployHelper_test.go | 26 ++++++++++---------------- 4 files changed, 22 insertions(+), 27 deletions(-) diff --git a/stader-lib/contracts/ETHX.go b/stader-lib/contracts/ETHX.go index d180246bf..aabda1050 100644 --- a/stader-lib/contracts/ETHX.go +++ b/stader-lib/contracts/ETHX.go @@ -44,7 +44,7 @@ var ETHXABI = ETHXMetaData.ABI var ETHXBin = ETHXMetaData.Bin // DeployETHX deploys a new Ethereum contract, binding an instance of ETHX to it. -func DeployETHX(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ETHX, error) { +func DeployETHX(auth *bind.TransactOpts, backend bind.ContractBackend, params ...interface{}) (common.Address, *types.Transaction, *ETHX, error) { parsed, err := ETHXMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployETHX(auth *bind.TransactOpts, backend bind.ContractBackend) (common.A return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ETHXBin), backend) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ETHXBin), backend, params...) if err != nil { return common.Address{}, nil, nil, err } diff --git a/stader-lib/contracts/stader-config.go b/stader-lib/contracts/stader-config.go index c30e99245..b43051b97 100644 --- a/stader-lib/contracts/stader-config.go +++ b/stader-lib/contracts/stader-config.go @@ -44,7 +44,7 @@ var StaderConfigABI = StaderConfigMetaData.ABI var StaderConfigBin = StaderConfigMetaData.Bin // DeployStaderConfig deploys a new Ethereum contract, binding an instance of StaderConfig to it. -func DeployStaderConfig(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *StaderConfig, error) { +func DeployStaderConfig(auth *bind.TransactOpts, backend bind.ContractBackend, params ...interface{}) (common.Address, *types.Transaction, *StaderConfig, error, ) { parsed, err := StaderConfigMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployStaderConfig(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(StaderConfigBin), backend) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(StaderConfigBin), backend, params) if err != nil { return common.Address{}, nil, nil, err } diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index e137f9a0a..a664876f3 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -21,12 +21,13 @@ import ( "github.com/stader-labs/stader-node/shared/services/config" ) -var ( - preFundedKey = "dbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97" - UserSettingPath = filepath.Join(ConfigPath, "user-settings.yml") - ConfigPath, _ = homedir.Expand("~/.stader_testing") - PasswordPath = filepath.Join(ConfigPath, "password") - cf = []byte(`{ +var ( //f02daebbf456faf787c5cd61a33ce780857c1ca10b00972aa451f0e9688e4ead + preFundedKeyKur = "ef5177cd0b6b21c87db5a0bf35d4084a8a57a9d6a064f86d51ac85f2b873a4e2" + preFundedKeyAnvil = "2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6" + UserSettingPath = filepath.Join(ConfigPath, "user-settings.yml") + ConfigPath, _ = homedir.Expand("~/.stader_testing") + PasswordPath = filepath.Join(ConfigPath, "password") + cf = []byte(`{ "participants": [ { "el_client_type": "geth", @@ -223,7 +224,7 @@ func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { elPort := apiServiceHttpPortSpec.GetNumber() */ - clUrl := fmt.Sprintf("http://127.0.0.1:49982") + clUrl := fmt.Sprintf("http://127.0.0.1:54643") elUrl := fmt.Sprintf("http://127.0.0.1:8545") s.setConfig(c, elUrl, clUrl) diff --git a/testing/deployHelper_test.go b/testing/deployHelper_test.go index f9c7fccfa..5af14de07 100644 --- a/testing/deployHelper_test.go +++ b/testing/deployHelper_test.go @@ -22,7 +22,7 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { require.Nil(t, err) // private key of the deployer - privateKey, err := crypto.HexToECDSA(preFundedKey) + privateKey, err := crypto.HexToECDSA(preFundedKeyAnvil) require.Nil(t, err) // extract public key of the deployer from private key @@ -45,35 +45,29 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { require.Nil(t, err) // deploy the ethx contract - ethXAddr, _, ethxContract, err := contracts.DeployETHX(auth, client) + ethXAddr, _, ethxContract, err := contracts.DeployETHX(auth, client, fromAddress, fromAddress) require.Nil(t, err) - // auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) - time.Sleep(5 * time.Second) // Allow it to be processed by the local node :P auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) - time.Sleep(5 * time.Second) // Allow it to be processed by the local node :P - _, err = ethxContract.Decimals(&bind.CallOpts{ - Pending: true, - }) - if err != nil { - panic(err) - } + StaderConfigInETHX, _ := ethxContract.StaderConfig(&bind.CallOpts{Pending: true}) + fmt.Printf(" StaderConfig %+v", StaderConfigInETHX.Hex()) // deploy the config contract - staderCfAddress, _, stdCfContract, err := contracts.DeployStaderConfig(auth, client) + staderCfAddress, _, stdCfContract, err := contracts.DeployStaderConfig(auth, client, fromAddress) require.Nil(t, err) auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) - // Init ethx + // // Init ethx _, err = ethxContract.Initialize(auth, fromAddress, staderCfAddress) require.Nil(t, err) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) - stdCfContract.Initialize(auth, fromAddress, ethXAddr) - auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) - require.Nil(t, err) + admin, _ := stdCfContract.GetAdmin(&bind.CallOpts{Pending: true}) + fmt.Printf("ADMIN %+v", admin.Hex()) + // auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + // require.Nil(t, err) ethxContract.UpdateStaderConfig(auth, staderCfAddress) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) From 0534c2ddaab1c7c9b2ffa1758c22b00a17c19854 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Sat, 17 Jun 2023 10:24:17 +0700 Subject: [PATCH 20/90] WIP --- stader-lib/contracts/ETHX.go | 29 ++++-------------------- stader-lib/contracts/stader-config.go | 4 ++-- testing/configHelper_test.go | 2 +- testing/deployHelper_test.go | 32 ++++++++++++++++++++------- 4 files changed, 31 insertions(+), 36 deletions(-) diff --git a/stader-lib/contracts/ETHX.go b/stader-lib/contracts/ETHX.go index aabda1050..168e283e8 100644 --- a/stader-lib/contracts/ETHX.go +++ b/stader-lib/contracts/ETHX.go @@ -31,8 +31,8 @@ var ( // ETHXMetaData contains all meta data concerning the ETHX contract. var ETHXMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"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\":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\":\"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\"},{\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNER_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\":\"MINTER_ROLE\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"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\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5061001861001d565b6100da565b5f54610100900460ff16156100885760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811610156100d8575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61191f806100e75f395ff3fe608060405234801561000f575f80fd5b50600436106101bb575f3560e01c8063490ffa35116100f35780639ee804cb11610093578063a9059cbb1161006e578063a9059cbb146103b6578063d5391393146103c9578063d547741f146103f0578063dd62ed3e14610403575f80fd5b80639ee804cb14610389578063a217fddf1461039c578063a457c2d7146103a3575f80fd5b806379cc6790116100ce57806379cc6790146103535780638456cb591461036657806391d148541461036e57806395d89b4114610381575f80fd5b8063490ffa35146102f55780635c975abb1461032057806370a082311461032b575f80fd5b80632f2ff15d1161015e578063395093511161013957806339509351146102b45780633f4ba83a146102c757806340c10f19146102cf578063485cc955146102e2575f80fd5b80632f2ff15d1461027d578063313ce5671461029257806336568abe146102a1575f80fd5b806318160ddd1161019957806318160ddd1461020f57806323b872dd14610221578063248a9ca314610234578063282c51f314610256575f80fd5b806301ffc9a7146101bf57806306fdde03146101e7578063095ea7b3146101fc575b5f80fd5b6101d26101cd3660046114d6565b610416565b60405190151581526020015b60405180910390f35b6101ef61044c565b6040516101de919061151f565b6101d261020a36600461156c565b6104dc565b6035545b6040519081526020016101de565b6101d261022f366004611594565b6104f3565b6102136102423660046115cd565b5f90815260c9602052604090206001015490565b6102137f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b61029061028b3660046115e4565b610516565b005b604051601281526020016101de565b6102906102af3660046115e4565b61053f565b6101d26102c236600461156c565b6105c2565b6102906105e3565b6102906102dd36600461156c565b6105f8565b6102906102f036600461160e565b610634565b60fb54610308906001600160a01b031681565b6040516001600160a01b0390911681526020016101de565b60655460ff166101d2565b610213610339366004611636565b6001600160a01b03165f9081526033602052604090205490565b61029061036136600461156c565b6107f4565b610290610830565b6101d261037c3660046115e4565b610851565b6101ef61087b565b610290610397366004611636565b61088a565b6102135f81565b6101d26103b136600461156c565b6108e7565b6101d26103c436600461156c565b610961565b6102137f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102906103fe3660046115e4565b61096e565b61021361041136600461160e565b610992565b5f6001600160e01b03198216637965db0b60e01b148061044657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606036805461045b9061164f565b80601f01602080910402602001604051908101604052809291908181526020018280546104879061164f565b80156104d25780601f106104a9576101008083540402835291602001916104d2565b820191905f5260205f20905b8154815290600101906020018083116104b557829003601f168201915b5050505050905090565b5f336104e98185856109bc565b5060019392505050565b5f33610500858285610adf565b61050b858585610b57565b506001949350505050565b5f82815260c9602052604090206001015461053081610d0b565b61053a8383610d15565b505050565b6001600160a01b03811633146105b45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6105be8282610d9a565b5050565b5f336104e98185856105d48383610992565b6105de919061169b565b6109bc565b5f6105ed81610d0b565b6105f5610e00565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661062281610d0b565b61062a610e52565b61053a8383610e98565b5f54610100900460ff161580801561065257505f54600160ff909116105b8061066b5750303b15801561066b57505f5460ff166001145b6106ce5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016105ab565b5f805460ff1916600117905580156106ef575f805461ff0019166101001790555b6106f883610f62565b61070182610f62565b6107436040518060400160405280600481526020016308aa890f60e31b8152506040518060400160405280600481526020016308aa890f60e31b815250610f89565b61074b610fb9565b610753610fe7565b60fb80546001600160a01b0319166001600160a01b0384161790556107785f84610d15565b6040516001600160a01b038316907fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a2801561053a575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84861081e81610d0b565b610826610e52565b61053a838361100d565b60fb546108479033906001600160a01b031661114a565b61084f6111cf565b565b5f91825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606037805461045b9061164f565b5f61089481610d0b565b61089d82610f62565b60fb80546001600160a01b0319166001600160a01b0384169081179091556040517fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a25050565b5f33816108f48286610992565b9050838110156109545760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105ab565b61050b82868684036109bc565b5f336104e9818585610b57565b5f82815260c9602052604090206001015461098881610d0b565b61053a8383610d9a565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b038316610a1e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105ab565b6001600160a01b038216610a7f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105ab565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f610aea8484610992565b90505f198114610b515781811015610b445760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016105ab565b610b5184848484036109bc565b50505050565b6001600160a01b038316610bbb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105ab565b6001600160a01b038216610c1d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105ab565b610c2883838361120c565b6001600160a01b0383165f9081526033602052604090205481811015610c9f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105ab565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610cfe9086815260200190565b60405180910390a3610b51565b6105f58133611214565b610d1f8282610851565b6105be575f82815260c9602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610d563390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610da48282610851565b156105be575f82815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610e0861126d565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60655460ff161561084f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105ab565b6001600160a01b038216610eee5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105ab565b610ef95f838361120c565b8060355f828254610f0a919061169b565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0381166105f55760405163d92e233d60e01b815260040160405180910390fd5b5f54610100900460ff16610faf5760405162461bcd60e51b81526004016105ab906116ae565b6105be82826112b6565b5f54610100900460ff16610fdf5760405162461bcd60e51b81526004016105ab906116ae565b61084f6112f5565b5f54610100900460ff1661084f5760405162461bcd60e51b81526004016105ab906116ae565b6001600160a01b03821661106d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105ab565b611078825f8361120c565b6001600160a01b0382165f90815260336020526040902054818110156110eb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105ab565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa15801561118e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b291906116f9565b6105be5760405163c4230ae360e01b815260040160405180910390fd5b6111d7610e52565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e353390565b61053a610e52565b61121e8282610851565b6105be5761122b81611327565b611236836020611339565b604051602001611247929190611718565b60408051601f198184030181529082905262461bcd60e51b82526105ab9160040161151f565b60655460ff1661084f5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016105ab565b5f54610100900460ff166112dc5760405162461bcd60e51b81526004016105ab906116ae565b60366112e883826117ed565b50603761053a82826117ed565b5f54610100900460ff1661131b5760405162461bcd60e51b81526004016105ab906116ae565b6065805460ff19169055565b60606104466001600160a01b03831660145b60605f6113478360026118a9565b61135290600261169b565b67ffffffffffffffff81111561136a5761136a61178c565b6040519080825280601f01601f191660200182016040528015611394576020820181803683370190505b509050600360fc1b815f815181106113ae576113ae6118c0565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106113dc576113dc6118c0565b60200101906001600160f81b03191690815f1a9053505f6113fe8460026118a9565b61140990600161169b565b90505b6001811115611480576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061143d5761143d6118c0565b1a60f81b828281518110611453576114536118c0565b60200101906001600160f81b03191690815f1a90535060049490941c93611479816118d4565b905061140c565b5083156114cf5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105ab565b9392505050565b5f602082840312156114e6575f80fd5b81356001600160e01b0319811681146114cf575f80fd5b5f5b838110156115175781810151838201526020016114ff565b50505f910152565b602081525f825180602084015261153d8160408501602087016114fd565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114611567575f80fd5b919050565b5f806040838503121561157d575f80fd5b61158683611551565b946020939093013593505050565b5f805f606084860312156115a6575f80fd5b6115af84611551565b92506115bd60208501611551565b9150604084013590509250925092565b5f602082840312156115dd575f80fd5b5035919050565b5f80604083850312156115f5575f80fd5b8235915061160560208401611551565b90509250929050565b5f806040838503121561161f575f80fd5b61162883611551565b915061160560208401611551565b5f60208284031215611646575f80fd5b6114cf82611551565b600181811c9082168061166357607f821691505b60208210810361168157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561044657610446611687565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215611709575f80fd5b815180151581146114cf575f80fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161174f8160178501602088016114fd565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516117808160288401602088016114fd565b01602801949350505050565b634e487b7160e01b5f52604160045260245ffd5b601f82111561053a575f81815260208120601f850160051c810160208610156117c65750805b601f850160051c820191505b818110156117e5578281556001016117d2565b505050505050565b815167ffffffffffffffff8111156118075761180761178c565b61181b81611815845461164f565b846117a0565b602080601f83116001811461184e575f84156118375750858301515b5f19600386901b1c1916600185901b1785556117e5565b5f85815260208120601f198616915b8281101561187c5788860151825594840194600190910190840161185d565b508582101561189957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b808202811582820484141761044657610446611687565b634e487b7160e01b5f52603260045260245ffd5b5f816118e2576118e2611687565b505f19019056fea2646970667358221220c94de1140cf181b6b7536129f51e4f76727f774db6ab37e0b086abf10bcf21d264736f6c63430008140033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"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\":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\":\"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\"},{\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNER_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\":\"MINTER_ROLE\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"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\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"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\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b5060405162001bbe38038062001bbe83398101604081905262000033916200050a565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b620001038362000215565b6200010e8262000215565b620001586040518060400160405280600481526020016308aa890f60e31b8152506040518060400160405280600481526020016308aa890f60e31b8152506200024060201b60201c565b62000162620002aa565b6200016c62000310565b60fb80546001600160a01b0319166001600160a01b038416179055620001935f846200036a565b6040516001600160a01b038316907fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a280156200020c575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620006a7565b6001600160a01b0381166200023d5760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff166200029a5760405162461bcd60e51b815260206004820152602b60248201525f8051602062001b9e83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b620002a682826200040c565b5050565b5f54610100900460ff16620003045760405162461bcd60e51b815260206004820152602b60248201525f8051602062001b9e83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200030e62000488565b565b5f54610100900460ff166200030e5760405162461bcd60e51b815260206004820152602b60248201525f8051602062001b9e83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b5f82815260c9602090815260408083206001600160a01b038516845290915290205460ff16620002a6575f82815260c9602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620003c83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f54610100900460ff16620004665760405162461bcd60e51b815260206004820152602b60248201525f8051602062001b9e83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6036620004748382620005df565b506037620004838282620005df565b505050565b5f54610100900460ff16620004e25760405162461bcd60e51b815260206004820152602b60248201525f8051602062001b9e83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6065805460ff19169055565b80516001600160a01b038116811462000505575f80fd5b919050565b5f80604083850312156200051c575f80fd5b6200052783620004ee565b91506200053760208401620004ee565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200056957607f821691505b6020821081036200058857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000483575f81815260208120601f850160051c81016020861015620005b65750805b601f850160051c820191505b81811015620005d757828155600101620005c2565b505050505050565b81516001600160401b03811115620005fb57620005fb62000540565b62000613816200060c845462000554565b846200058e565b602080601f83116001811462000649575f8415620006315750858301515b5f19600386901b1c1916600185901b178555620005d7565b5f85815260208120601f198616915b82811015620006795788860151825594840194600190910190840162000658565b50858210156200069757878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6114e980620006b55f395ff3fe608060405234801561000f575f80fd5b50600436106101a1575f3560e01c8063490ffa35116100f35780639ee804cb11610093578063a9059cbb1161006e578063a9059cbb14610389578063d53913931461039c578063d547741f146103c3578063dd62ed3e146103d6575f80fd5b80639ee804cb1461035c578063a217fddf1461036f578063a457c2d714610376575f80fd5b806379cc6790116100ce57806379cc6790146103265780638456cb591461033957806391d148541461034157806395d89b4114610354575f80fd5b8063490ffa35146102c85780635c975abb146102f357806370a08231146102fe575f80fd5b8063282c51f31161015e57806336568abe1161013957806336568abe14610287578063395093511461029a5780633f4ba83a146102ad57806340c10f19146102b5575f80fd5b8063282c51f31461023c5780632f2ff15d14610263578063313ce56714610278575f80fd5b806301ffc9a7146101a557806306fdde03146101cd578063095ea7b3146101e257806318160ddd146101f557806323b872dd14610207578063248a9ca31461021a575b5f80fd5b6101b86101b33660046111f4565b6103e9565b60405190151581526020015b60405180910390f35b6101d561041f565b6040516101c4919061123d565b6101b86101f036600461128a565b6104af565b6035545b6040519081526020016101c4565b6101b86102153660046112b2565b6104c6565b6101f96102283660046112eb565b5f90815260c9602052604090206001015490565b6101f97f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b610276610271366004611302565b6104e9565b005b604051601281526020016101c4565b610276610295366004611302565b610512565b6101b86102a836600461128a565b610595565b6102766105b6565b6102766102c336600461128a565b6105cb565b60fb546102db906001600160a01b031681565b6040516001600160a01b0390911681526020016101c4565b60655460ff166101b8565b6101f961030c36600461132c565b6001600160a01b03165f9081526033602052604090205490565b61027661033436600461128a565b610607565b610276610643565b6101b861034f366004611302565b610664565b6101d561068e565b61027661036a36600461132c565b61069d565b6101f95f81565b6101b861038436600461128a565b6106fa565b6101b861039736600461128a565b610774565b6101f97f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102766103d1366004611302565b610781565b6101f96103e4366004611345565b6107a5565b5f6001600160e01b03198216637965db0b60e01b148061041957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606036805461042e9061136d565b80601f016020809104026020016040519081016040528092919081815260200182805461045a9061136d565b80156104a55780601f1061047c576101008083540402835291602001916104a5565b820191905f5260205f20905b81548152906001019060200180831161048857829003601f168201915b5050505050905090565b5f336104bc8185856107cf565b5060019392505050565b5f336104d38582856108f2565b6104de85858561096a565b506001949350505050565b5f82815260c9602052604090206001015461050381610b1e565b61050d8383610b28565b505050565b6001600160a01b03811633146105875760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6105918282610bad565b5050565b5f336104bc8185856105a783836107a5565b6105b191906113b9565b6107cf565b5f6105c081610b1e565b6105c8610c13565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66105f581610b1e565b6105fd610c65565b61050d8383610cab565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84861063181610b1e565b610639610c65565b61050d8383610d75565b60fb5461065a9033906001600160a01b0316610eb2565b610662610f37565b565b5f91825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606037805461042e9061136d565b5f6106a781610b1e565b6106b082610f74565b60fb80546001600160a01b0319166001600160a01b0384169081179091556040517fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a25050565b5f338161070782866107a5565b9050838110156107675760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161057e565b6104de82868684036107cf565b5f336104bc81858561096a565b5f82815260c9602052604090206001015461079b81610b1e565b61050d8383610bad565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166108315760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161057e565b6001600160a01b0382166108925760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161057e565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6108fd84846107a5565b90505f19811461096457818110156109575760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161057e565b61096484848484036107cf565b50505050565b6001600160a01b0383166109ce5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161057e565b6001600160a01b038216610a305760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161057e565b610a3b838383610f9b565b6001600160a01b0383165f9081526033602052604090205481811015610ab25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161057e565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b119086815260200190565b60405180910390a3610964565b6105c88133610fa3565b610b328282610664565b610591575f82815260c9602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610b693390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610bb78282610664565b15610591575f82815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610c1b610ffc565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60655460ff16156106625760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161057e565b6001600160a01b038216610d015760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161057e565b610d0c5f8383610f9b565b8060355f828254610d1d91906113b9565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610dd55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161057e565b610de0825f83610f9b565b6001600160a01b0382165f9081526033602052604090205481811015610e535760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161057e565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015610ef6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1a91906113cc565b6105915760405163c4230ae360e01b815260040160405180910390fd5b610f3f610c65565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c483390565b6001600160a01b0381166105c85760405163d92e233d60e01b815260040160405180910390fd5b61050d610c65565b610fad8282610664565b61059157610fba81611045565b610fc5836020611057565b604051602001610fd69291906113eb565b60408051601f198184030181529082905262461bcd60e51b825261057e9160040161123d565b60655460ff166106625760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161057e565b60606104196001600160a01b03831660145b60605f61106583600261145f565b6110709060026113b9565b67ffffffffffffffff81111561108857611088611476565b6040519080825280601f01601f1916602001820160405280156110b2576020820181803683370190505b509050600360fc1b815f815181106110cc576110cc61148a565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106110fa576110fa61148a565b60200101906001600160f81b03191690815f1a9053505f61111c84600261145f565b6111279060016113b9565b90505b600181111561119e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061115b5761115b61148a565b1a60f81b8282815181106111715761117161148a565b60200101906001600160f81b03191690815f1a90535060049490941c936111978161149e565b905061112a565b5083156111ed5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161057e565b9392505050565b5f60208284031215611204575f80fd5b81356001600160e01b0319811681146111ed575f80fd5b5f5b8381101561123557818101518382015260200161121d565b50505f910152565b602081525f825180602084015261125b81604085016020870161121b565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114611285575f80fd5b919050565b5f806040838503121561129b575f80fd5b6112a48361126f565b946020939093013593505050565b5f805f606084860312156112c4575f80fd5b6112cd8461126f565b92506112db6020850161126f565b9150604084013590509250925092565b5f602082840312156112fb575f80fd5b5035919050565b5f8060408385031215611313575f80fd5b823591506113236020840161126f565b90509250929050565b5f6020828403121561133c575f80fd5b6111ed8261126f565b5f8060408385031215611356575f80fd5b61135f8361126f565b91506113236020840161126f565b600181811c9082168061138157607f821691505b60208210810361139f57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610419576104196113a5565b5f602082840312156113dc575f80fd5b815180151581146111ed575f80fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161142281601785016020880161121b565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161145381602884016020880161121b565b01602801949350505050565b8082028115828204841417610419576104196113a5565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f816114ac576114ac6113a5565b505f19019056fea264697066735822122068dd03b5d44da8f9836cb5500a07da45dd29d7d0caea3dead2aa959fbc2bb11564736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // ETHXABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var ETHXABI = ETHXMetaData.ABI var ETHXBin = ETHXMetaData.Bin // DeployETHX deploys a new Ethereum contract, binding an instance of ETHX to it. -func DeployETHX(auth *bind.TransactOpts, backend bind.ContractBackend, params ...interface{}) (common.Address, *types.Transaction, *ETHX, error) { +func DeployETHX(auth *bind.TransactOpts, backend bind.ContractBackend, _admin common.Address, _staderConfig common.Address) (common.Address, *types.Transaction, *ETHX, error) { parsed, err := ETHXMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployETHX(auth *bind.TransactOpts, backend bind.ContractBackend, params .. return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ETHXBin), backend, params...) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ETHXBin), backend, _admin, _staderConfig) if err != nil { return common.Address{}, nil, nil, err } @@ -741,27 +741,6 @@ func (_ETHX *ETHXTransactorSession) IncreaseAllowance(spender common.Address, ad return _ETHX.Contract.IncreaseAllowance(&_ETHX.TransactOpts, spender, addedValue) } -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _admin, address _staderConfig) returns() -func (_ETHX *ETHXTransactor) Initialize(opts *bind.TransactOpts, _admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { - return _ETHX.contract.Transact(opts, "initialize", _admin, _staderConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _admin, address _staderConfig) returns() -func (_ETHX *ETHXSession) Initialize(_admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { - return _ETHX.Contract.Initialize(&_ETHX.TransactOpts, _admin, _staderConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _admin, address _staderConfig) returns() -func (_ETHX *ETHXTransactorSession) Initialize(_admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { - return _ETHX.Contract.Initialize(&_ETHX.TransactOpts, _admin, _staderConfig) -} - // Mint is a paid mutator transaction binding the contract method 0x40c10f19. // // Solidity: function mint(address to, uint256 amount) returns() diff --git a/stader-lib/contracts/stader-config.go b/stader-lib/contracts/stader-config.go index b43051b97..2b966e148 100644 --- a/stader-lib/contracts/stader-config.go +++ b/stader-lib/contracts/stader-config.go @@ -44,7 +44,7 @@ var StaderConfigABI = StaderConfigMetaData.ABI var StaderConfigBin = StaderConfigMetaData.Bin // DeployStaderConfig deploys a new Ethereum contract, binding an instance of StaderConfig to it. -func DeployStaderConfig(auth *bind.TransactOpts, backend bind.ContractBackend, params ...interface{}) (common.Address, *types.Transaction, *StaderConfig, error, ) { +func DeployStaderConfig(auth *bind.TransactOpts, backend bind.ContractBackend,) (common.Address, *types.Transaction, *StaderConfig, error, ) { parsed, err := StaderConfigMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployStaderConfig(auth *bind.TransactOpts, backend bind.ContractBackend, p return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(StaderConfigBin), backend, params) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(StaderConfigBin), backend) if err != nil { return common.Address{}, nil, nil, err } diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index a664876f3..f8515839a 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -224,7 +224,7 @@ func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { elPort := apiServiceHttpPortSpec.GetNumber() */ - clUrl := fmt.Sprintf("http://127.0.0.1:54643") + clUrl := fmt.Sprintf("http://127.0.0.1:49759") elUrl := fmt.Sprintf("http://127.0.0.1:8545") s.setConfig(c, elUrl, clUrl) diff --git a/testing/deployHelper_test.go b/testing/deployHelper_test.go index 5af14de07..158613941 100644 --- a/testing/deployHelper_test.go +++ b/testing/deployHelper_test.go @@ -44,23 +44,39 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { auth, err := GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) + // deploy the config contract + staderCfAddress, _, stdCfContract, err := contracts.DeployStaderConfig(auth, client) + require.Nil(t, err) + + fmt.Printf("staderCfAddress %+v", staderCfAddress.Hex()) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + // deploy the ethx contract - ethXAddr, _, ethxContract, err := contracts.DeployETHX(auth, client, fromAddress, fromAddress) + ethXAddr, _, ethxContract, err := contracts.DeployETHX(auth, client, fromAddress, staderCfAddress) require.Nil(t, err) + fmt.Printf("ethXAddr %+v", ethXAddr.Hex()) + + time.Sleep(time.Second) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) + // // Init ethx + // _, err = ethxContract.Initialize(auth) + // require.Nil(t, err) + // auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + + // _, err = ethxContract.UpdateStaderConfig(auth, staderCfAddress) + // require.Nil(t, err) + + // auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + StaderConfigInETHX, _ := ethxContract.StaderConfig(&bind.CallOpts{Pending: true}) fmt.Printf(" StaderConfig %+v", StaderConfigInETHX.Hex()) - // deploy the config contract - staderCfAddress, _, stdCfContract, err := contracts.DeployStaderConfig(auth, client, fromAddress) - require.Nil(t, err) - auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + StaderConfigInETHX, _ = ethxContract.StaderConfig(&bind.CallOpts{Pending: false}) + time.Sleep(time.Second) + fmt.Printf(" StaderConfig %+v", StaderConfigInETHX.Hex()) - // // Init ethx - _, err = ethxContract.Initialize(auth, fromAddress, staderCfAddress) - require.Nil(t, err) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) From fb321d6b10c03f09f20be14c27b055d3b361d707 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Mon, 19 Jun 2023 12:41:45 +0700 Subject: [PATCH 21/90] Update contract code --- go.mod | 1 + go.sum | 2 + shared/services/config/stadernode-config.go | 4 +- stader-lib/contracts/ETHX.go | 22 - .../contracts/permissionless-node-registry.go | 45 +- stader-lib/contracts/permissionless-pool.go | 45 +- stader-lib/contracts/stader-config.go | 45 +- testing/configHelper_test.go | 2 +- testing/contracts/ETHX.go | 2250 +++++++ .../contracts/PermissionlessNodeRegistry.go | 5178 +++++++++++++++++ testing/contracts/PermissionlessPool.go | 2541 ++++++++ testing/contracts/StaderConfig.go | 5096 ++++++++++++++++ testing/deployHelper_test.go | 70 +- testing/node_test.go | 30 +- 14 files changed, 15096 insertions(+), 235 deletions(-) create mode 100644 testing/contracts/ETHX.go create mode 100644 testing/contracts/PermissionlessNodeRegistry.go create mode 100644 testing/contracts/PermissionlessPool.go create mode 100644 testing/contracts/StaderConfig.go diff --git a/go.mod b/go.mod index dfac8c33d..0375d6b5b 100644 --- a/go.mod +++ b/go.mod @@ -43,6 +43,7 @@ require ( github.com/stader-labs/ethcli-ui/configuration v0.0.0-20230602142021-378099c5eca8 github.com/stader-labs/ethcli-ui/wizard v0.0.0-20230602142021-378099c5eca8 github.com/stretchr/testify v1.8.4 + github.com/test-go/testify v1.1.4 // indirect github.com/tyler-smith/go-bip39 v1.1.0 github.com/ulikunitz/xz v0.5.11 // indirect github.com/urfave/cli v1.22.10 diff --git a/go.sum b/go.sum index 86e2f5e36..8a1d70704 100644 --- a/go.sum +++ b/go.sum @@ -1984,6 +1984,8 @@ github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161/go.mod h1:wM7WEv github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b/go.mod h1:5XA7W9S6mni3h5uvOC75dA3m9CCCaS83lltmc0ukdi4= github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= +github.com/test-go/testify v1.1.4 h1:Tf9lntrKUMHiXQ07qBScBTSA0dhYQlu83hswqelv1iE= +github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU= github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e h1:cR8/SYRgyQCt5cNCMniB/ZScMkhI9nk8U5C7SbISXjo= github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e/go.mod h1:Tu4lItkATkonrYuvtVjG0/rhy15qrNGNTjPdaphtZ/8= github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= diff --git a/shared/services/config/stadernode-config.go b/shared/services/config/stadernode-config.go index e52302a74..b01014a1f 100644 --- a/shared/services/config/stadernode-config.go +++ b/shared/services/config/stadernode-config.go @@ -244,7 +244,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Devnet: "0x38DE8Df722B4032Cc6987F00bCA0d9B37d9F9438", config.Network_Mainnet: "0x38DE8Df722B4032Cc6987F00bCA0d9B37d9F9438", config.Network_Zhejiang: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", - config.Network_Local: "0xAb2A01BC351770D09611Ac80f1DE076D56E0487d", + config.Network_Local: "0xA15BB66138824a1c7167f5E85b957d04Dd34E468", }, staderConfigAddress: map[config.Network]string{ @@ -252,7 +252,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Devnet: "0x749Ed651c4F41E0D705960e815A58815ffFd3afe", config.Network_Mainnet: "0x749Ed651c4F41E0D705960e815A58815ffFd3afe", config.Network_Zhejiang: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", - config.Network_Local: "0x4c849Ff66a6F0A954cbf7818b8a763105C2787D6", + config.Network_Local: "0x700b6A60ce7EaaEA56F065753d8dcB9653dbAD35", }, baseStaderBackendUrl: map[config.Network]string{ diff --git a/stader-lib/contracts/ETHX.go b/stader-lib/contracts/ETHX.go index 168e283e8..f975598c8 100644 --- a/stader-lib/contracts/ETHX.go +++ b/stader-lib/contracts/ETHX.go @@ -32,34 +32,12 @@ var ( // ETHXMetaData contains all meta data concerning the ETHX contract. var ETHXMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"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\":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\":\"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\"},{\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNER_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\":\"MINTER_ROLE\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"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\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"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\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b5060405162001bbe38038062001bbe83398101604081905262000033916200050a565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b620001038362000215565b6200010e8262000215565b620001586040518060400160405280600481526020016308aa890f60e31b8152506040518060400160405280600481526020016308aa890f60e31b8152506200024060201b60201c565b62000162620002aa565b6200016c62000310565b60fb80546001600160a01b0319166001600160a01b038416179055620001935f846200036a565b6040516001600160a01b038316907fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a280156200020c575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620006a7565b6001600160a01b0381166200023d5760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff166200029a5760405162461bcd60e51b815260206004820152602b60248201525f8051602062001b9e83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b620002a682826200040c565b5050565b5f54610100900460ff16620003045760405162461bcd60e51b815260206004820152602b60248201525f8051602062001b9e83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200030e62000488565b565b5f54610100900460ff166200030e5760405162461bcd60e51b815260206004820152602b60248201525f8051602062001b9e83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b5f82815260c9602090815260408083206001600160a01b038516845290915290205460ff16620002a6575f82815260c9602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620003c83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f54610100900460ff16620004665760405162461bcd60e51b815260206004820152602b60248201525f8051602062001b9e83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6036620004748382620005df565b506037620004838282620005df565b505050565b5f54610100900460ff16620004e25760405162461bcd60e51b815260206004820152602b60248201525f8051602062001b9e83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6065805460ff19169055565b80516001600160a01b038116811462000505575f80fd5b919050565b5f80604083850312156200051c575f80fd5b6200052783620004ee565b91506200053760208401620004ee565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200056957607f821691505b6020821081036200058857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000483575f81815260208120601f850160051c81016020861015620005b65750805b601f850160051c820191505b81811015620005d757828155600101620005c2565b505050505050565b81516001600160401b03811115620005fb57620005fb62000540565b62000613816200060c845462000554565b846200058e565b602080601f83116001811462000649575f8415620006315750858301515b5f19600386901b1c1916600185901b178555620005d7565b5f85815260208120601f198616915b82811015620006795788860151825594840194600190910190840162000658565b50858210156200069757878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6114e980620006b55f395ff3fe608060405234801561000f575f80fd5b50600436106101a1575f3560e01c8063490ffa35116100f35780639ee804cb11610093578063a9059cbb1161006e578063a9059cbb14610389578063d53913931461039c578063d547741f146103c3578063dd62ed3e146103d6575f80fd5b80639ee804cb1461035c578063a217fddf1461036f578063a457c2d714610376575f80fd5b806379cc6790116100ce57806379cc6790146103265780638456cb591461033957806391d148541461034157806395d89b4114610354575f80fd5b8063490ffa35146102c85780635c975abb146102f357806370a08231146102fe575f80fd5b8063282c51f31161015e57806336568abe1161013957806336568abe14610287578063395093511461029a5780633f4ba83a146102ad57806340c10f19146102b5575f80fd5b8063282c51f31461023c5780632f2ff15d14610263578063313ce56714610278575f80fd5b806301ffc9a7146101a557806306fdde03146101cd578063095ea7b3146101e257806318160ddd146101f557806323b872dd14610207578063248a9ca31461021a575b5f80fd5b6101b86101b33660046111f4565b6103e9565b60405190151581526020015b60405180910390f35b6101d561041f565b6040516101c4919061123d565b6101b86101f036600461128a565b6104af565b6035545b6040519081526020016101c4565b6101b86102153660046112b2565b6104c6565b6101f96102283660046112eb565b5f90815260c9602052604090206001015490565b6101f97f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b610276610271366004611302565b6104e9565b005b604051601281526020016101c4565b610276610295366004611302565b610512565b6101b86102a836600461128a565b610595565b6102766105b6565b6102766102c336600461128a565b6105cb565b60fb546102db906001600160a01b031681565b6040516001600160a01b0390911681526020016101c4565b60655460ff166101b8565b6101f961030c36600461132c565b6001600160a01b03165f9081526033602052604090205490565b61027661033436600461128a565b610607565b610276610643565b6101b861034f366004611302565b610664565b6101d561068e565b61027661036a36600461132c565b61069d565b6101f95f81565b6101b861038436600461128a565b6106fa565b6101b861039736600461128a565b610774565b6101f97f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102766103d1366004611302565b610781565b6101f96103e4366004611345565b6107a5565b5f6001600160e01b03198216637965db0b60e01b148061041957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606036805461042e9061136d565b80601f016020809104026020016040519081016040528092919081815260200182805461045a9061136d565b80156104a55780601f1061047c576101008083540402835291602001916104a5565b820191905f5260205f20905b81548152906001019060200180831161048857829003601f168201915b5050505050905090565b5f336104bc8185856107cf565b5060019392505050565b5f336104d38582856108f2565b6104de85858561096a565b506001949350505050565b5f82815260c9602052604090206001015461050381610b1e565b61050d8383610b28565b505050565b6001600160a01b03811633146105875760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6105918282610bad565b5050565b5f336104bc8185856105a783836107a5565b6105b191906113b9565b6107cf565b5f6105c081610b1e565b6105c8610c13565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66105f581610b1e565b6105fd610c65565b61050d8383610cab565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84861063181610b1e565b610639610c65565b61050d8383610d75565b60fb5461065a9033906001600160a01b0316610eb2565b610662610f37565b565b5f91825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606037805461042e9061136d565b5f6106a781610b1e565b6106b082610f74565b60fb80546001600160a01b0319166001600160a01b0384169081179091556040517fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a25050565b5f338161070782866107a5565b9050838110156107675760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161057e565b6104de82868684036107cf565b5f336104bc81858561096a565b5f82815260c9602052604090206001015461079b81610b1e565b61050d8383610bad565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166108315760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161057e565b6001600160a01b0382166108925760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161057e565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6108fd84846107a5565b90505f19811461096457818110156109575760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161057e565b61096484848484036107cf565b50505050565b6001600160a01b0383166109ce5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161057e565b6001600160a01b038216610a305760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161057e565b610a3b838383610f9b565b6001600160a01b0383165f9081526033602052604090205481811015610ab25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161057e565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b119086815260200190565b60405180910390a3610964565b6105c88133610fa3565b610b328282610664565b610591575f82815260c9602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610b693390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610bb78282610664565b15610591575f82815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610c1b610ffc565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60655460ff16156106625760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161057e565b6001600160a01b038216610d015760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161057e565b610d0c5f8383610f9b565b8060355f828254610d1d91906113b9565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610dd55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161057e565b610de0825f83610f9b565b6001600160a01b0382165f9081526033602052604090205481811015610e535760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161057e565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015610ef6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1a91906113cc565b6105915760405163c4230ae360e01b815260040160405180910390fd5b610f3f610c65565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c483390565b6001600160a01b0381166105c85760405163d92e233d60e01b815260040160405180910390fd5b61050d610c65565b610fad8282610664565b61059157610fba81611045565b610fc5836020611057565b604051602001610fd69291906113eb565b60408051601f198184030181529082905262461bcd60e51b825261057e9160040161123d565b60655460ff166106625760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161057e565b60606104196001600160a01b03831660145b60605f61106583600261145f565b6110709060026113b9565b67ffffffffffffffff81111561108857611088611476565b6040519080825280601f01601f1916602001820160405280156110b2576020820181803683370190505b509050600360fc1b815f815181106110cc576110cc61148a565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106110fa576110fa61148a565b60200101906001600160f81b03191690815f1a9053505f61111c84600261145f565b6111279060016113b9565b90505b600181111561119e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061115b5761115b61148a565b1a60f81b8282815181106111715761117161148a565b60200101906001600160f81b03191690815f1a90535060049490941c936111978161149e565b905061112a565b5083156111ed5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161057e565b9392505050565b5f60208284031215611204575f80fd5b81356001600160e01b0319811681146111ed575f80fd5b5f5b8381101561123557818101518382015260200161121d565b50505f910152565b602081525f825180602084015261125b81604085016020870161121b565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114611285575f80fd5b919050565b5f806040838503121561129b575f80fd5b6112a48361126f565b946020939093013593505050565b5f805f606084860312156112c4575f80fd5b6112cd8461126f565b92506112db6020850161126f565b9150604084013590509250925092565b5f602082840312156112fb575f80fd5b5035919050565b5f8060408385031215611313575f80fd5b823591506113236020840161126f565b90509250929050565b5f6020828403121561133c575f80fd5b6111ed8261126f565b5f8060408385031215611356575f80fd5b61135f8361126f565b91506113236020840161126f565b600181811c9082168061138157607f821691505b60208210810361139f57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610419576104196113a5565b5f602082840312156113dc575f80fd5b815180151581146111ed575f80fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161142281601785016020880161121b565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161145381602884016020880161121b565b01602801949350505050565b8082028115828204841417610419576104196113a5565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f816114ac576114ac6113a5565b505f19019056fea264697066735822122068dd03b5d44da8f9836cb5500a07da45dd29d7d0caea3dead2aa959fbc2bb11564736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // ETHXABI is the input ABI used to generate the binding from. // Deprecated: Use ETHXMetaData.ABI instead. var ETHXABI = ETHXMetaData.ABI -// ETHXBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use ETHXMetaData.Bin instead. -var ETHXBin = ETHXMetaData.Bin - -// DeployETHX deploys a new Ethereum contract, binding an instance of ETHX to it. -func DeployETHX(auth *bind.TransactOpts, backend bind.ContractBackend, _admin common.Address, _staderConfig common.Address) (common.Address, *types.Transaction, *ETHX, error) { - parsed, err := ETHXMetaData.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(ETHXBin), backend, _admin, _staderConfig) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, ÐX{ETHXCaller: ETHXCaller{contract: contract}, ETHXTransactor: ETHXTransactor{contract: contract}, ETHXFilterer: ETHXFilterer{contract: contract}}, nil -} - // ETHX is an auto generated Go binding around an Ethereum contract. type ETHX struct { ETHXCaller // Read-only binding to the contract diff --git a/stader-lib/contracts/permissionless-node-registry.go b/stader-lib/contracts/permissionless-node-registry.go index caeb8ddc7..330eea05b 100644 --- a/stader-lib/contracts/permissionless-node-registry.go +++ b/stader-lib/contracts/permissionless-node-registry.go @@ -43,35 +43,13 @@ type Validator struct { // PermissionlessNodeRegistryMetaData contains all meta data concerning the PermissionlessNodeRegistry contract. var PermissionlessNodeRegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CooldownNotComplete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicatePoolIDOrPoolNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InSufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBondEthValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidKeyCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartAndEndIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MisMatchingInputKeysSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoChangeInState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSDCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorAlreadyOnBoardedInProtocol\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorIsDeactivate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorNotOnBoarded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PageNumberIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PubkeyAlreadyExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyVerifiedKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyWithdrawnKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UNEXPECTED_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"maxKeyLimitReached\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"AddedValidatorKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"DecreasedTotalActiveValidatorCount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"IncreasedTotalActiveValidatorCount\",\"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\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nodeRewardAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"OnboardedOperator\",\"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\":\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredCollateralToPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"batchKeyDepositLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedInputKeyCountLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"UpdatedMaxNonTerminalKeyPerOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"UpdatedNextQueuedValidatorIndex\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardAddress\",\"type\":\"address\"}],\"name\":\"UpdatedOperatorDetails\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"UpdatedSocializingPoolState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"}],\"name\":\"UpdatedValidatorDepositBlock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedVerifiedKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedWithdrawnKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedAsFrontRunned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedReadyToDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorStatusMarkedAsInvalidSignature\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COLLATERAL_ETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRONT_RUN_PENALTY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ID\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_depositSignature\",\"type\":\"bytes[]\"}],\"name\":\"addValidatorKeys\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"changeSocializingPoolState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllNodeELVaultAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorRewardAddress\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalKeys\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getSocializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsByOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"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\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"increaseTotalActiveValidatorCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inputKeyCountLimit\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_readyToDepositPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_frontRunPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_invalidSignaturePubkey\",\"type\":\"bytes[]\"}],\"name\":\"markValidatorReadyToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNonTerminalKeyPerOperator\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextQueuedValidatorIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextValidatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nodeELRewardVaultByOperatorId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_operatorRewardAddress\",\"type\":\"address\"}],\"name\":\"onboardNodeOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorIDByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"operatorStructById\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"operatorRewardAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorAddress\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queuedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"socializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"totalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferCollateralToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"}],\"name\":\"updateDepositStatusAndBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_inputKeyCountLimit\",\"type\":\"uint16\"}],\"name\":\"updateInputKeyCountLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"updateMaxNonTerminalKeyPerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"updateNextQueuedValidatorIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_rewardAddress\",\"type\":\"address\"}],\"name\":\"updateOperatorDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateVerifiedKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"validatorIdByPubkey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorIdsByOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorRegistry\",\"outputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifiedKeyBatchSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"withdrawnValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b506200001b62000021565b620000e0565b5f54610100900460ff16156200008d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161015620000de575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61545780620000ee5f395ff3fe608060405260043610610366575f3560e01c80637bd977d9116101c8578063b8d2f06c116100fd578063d5e1e5ce1161009d578063ebb5c1741161006d578063ebb5c17414610a8e578063f7c0918914610aba578063f90b083814610acf578063f9c4dda414610aee575f80fd5b8063d5e1e5ce14610a09578063deacde2b14610a28578063e0bf8b5314610a3b578063e0d7d0e914610a68575f80fd5b8063c34ade5c116100d8578063c34ade5c14610962578063c8a00e7a1461098e578063cac8b306146109be578063d547741f146109ea575f80fd5b8063b8d2f06c146108fc578063bb7306bf1461091b578063bc4a3ad514610936575f80fd5b80639344b24211610168578063a217fddf11610143578063a217fddf1461089b578063ab3e71eb146108ae578063af533aa8146108c3578063b01db078146108e2575f80fd5b80639344b24214610828578063998888981461085d5780639ee804cb1461087c575f80fd5b80638456cb59116101a35780638456cb59146107c057806384b0fa4c146107d45780638a25bcec146107ea57806391d1485414610809575f80fd5b80637bd977d91461074857806383ea23581461075c57806384522a6d14610794575f80fd5b8063490ffa351161029e5780635ae7f25d1161023e57806360c3cf3f1161021957806360c3cf3f146106d2578063683547b8146106f157806374338e6d1461071d57806377c359e114610733575f80fd5b80635ae7f25d146106645780635c2c30a5146106835780635c975abb146106bb575f80fd5b806350d5d7ab1161027957806350d5d7ab146105b657806358a994ea146105f357806359c3c9b7146106125780635a1239c114610631575f80fd5b8063490ffa351461056057806349911bfb146105865780634f59ed801461059b575f80fd5b80632d1dbd741161030957806336514d9f116102e457806336514d9f146104ef57806336568abe1461050e5780633f4ba83a1461052d578063485cc95514610541575f80fd5b80632d1dbd741461048f5780632d32924f146104a45780632f2ff15d146104d0575f80fd5b8063186d954111610344578063186d9541146103f6578063248a9ca3146104155780632517cfbf14610451578063264f27f314610470575f80fd5b806301ffc9a71461036a578063044d2fe81461039e57806313797bff146103d5575b5f80fd5b348015610375575f80fd5b50610389610384366004614775565b610b25565b60405190151581526020015b60405180910390f35b3480156103a9575f80fd5b506103bd6103b8366004614801565b610b5b565b6040516001600160a01b039091168152602001610395565b3480156103e0575f80fd5b506103f46103ef3660046148a4565b610f7a565b005b348015610401575f80fd5b506103f4610410366004614936565b6113c1565b348015610420575f80fd5b5061044361042f366004614936565b5f9081526065602052604090206001015490565b604051908152602001610395565b34801561045c575f80fd5b506103f461046b36600461494d565b611471565b34801561047b575f80fd5b506103f461048a36600461496e565b6114d3565b34801561049a575f80fd5b5061044360fd5481565b3480156104af575f80fd5b506104c36104be3660046149ac565b61171e565b60405161039591906149cc565b3480156104db575f80fd5b506103f46104ea366004614a18565b611852565b3480156104fa575f80fd5b50610389610509366004614a46565b611876565b348015610519575f80fd5b506103f4610528366004614a18565b6118a3565b348015610538575f80fd5b506103f4611926565b34801561054c575f80fd5b506103f461055b366004614a78565b61194e565b34801561056b575f80fd5b5060fb546103bd90600160501b90046001600160a01b031681565b348015610591575f80fd5b5061044360ff5481565b3480156105a6575f80fd5b50610443673782dace9d90000081565b3480156105c1575f80fd5b5060fb546105db906201000090046001600160401b031681565b6040516001600160401b039091168152602001610395565b3480156105fe575f80fd5b506103f461060d366004614aa4565b611aea565b34801561061d575f80fd5b506103f461062c366004614936565b611c68565b34801561063c575f80fd5b5061065061064b366004614936565b611d08565b604051610395989796959493929190614b77565b34801561066f575f80fd5b506103f461067e366004614936565b611eea565b34801561068e575f80fd5b5061044361069d366004614c04565b80516020818301810180516101038252928201919093012091525481565b3480156106c6575f80fd5b5060975460ff16610389565b3480156106dd575f80fd5b506103f46106ec366004614cae565b612051565b3480156106fc575f80fd5b5061071061070b366004614cd4565b6120cb565b6040516103959190614d06565b348015610728575f80fd5b506104436101005481565b34801561073e575f80fd5b5061010154610443565b348015610753575f80fd5b50610443612482565b348015610767575f80fd5b506103bd610776366004614936565b5f90815261010560205260409020600201546001600160a01b031690565b34801561079f575f80fd5b506104436107ae366004614936565b6101086020525f908152604090205481565b3480156107cb575f80fd5b506103f4612499565b3480156107df575f80fd5b506104436101015481565b3480156107f5575f80fd5b506105db610804366004614cd4565b6124bf565b348015610814575f80fd5b50610389610823366004614a18565b61258a565b348015610833575f80fd5b506103bd610842366004614936565b6101096020525f90815260409020546001600160a01b031681565b348015610868575f80fd5b506107106108773660046149ac565b6125b4565b348015610887575f80fd5b506103f4610896366004614df0565b6128ff565b3480156108a6575f80fd5b506104435f81565b3480156108b9575f80fd5b5061044360fc5481565b3480156108ce575f80fd5b506103f46108dd366004614936565b612988565b3480156108ed575f80fd5b50673782dace9d900000610443565b348015610907575f80fd5b506103f4610916366004614936565b6129db565b348015610926575f80fd5b506104436729a2241af62c000081565b348015610941575f80fd5b50610443610950366004614936565b6101046020525f908152604090205481565b34801561096d575f80fd5b5061044361097c366004614936565b5f908152610107602052604090205490565b348015610999575f80fd5b506109ad6109a8366004614936565b612a66565b604051610395959493929190614e0b565b3480156109c9575f80fd5b506104436109d8366004614df0565b6101066020525f908152604090205481565b3480156109f5575f80fd5b506103f4610a04366004614a18565b612b2f565b348015610a14575f80fd5b50610443610a233660046149ac565b612b53565b6103f4610a363660046148a4565b612b7f565b348015610a46575f80fd5b5060fb54610a559061ffff1681565b60405161ffff9091168152602001610395565b348015610a73575f80fd5b50610a7c600181565b60405160ff9091168152602001610395565b348015610a99575f80fd5b50610443610aa8366004614936565b5f908152610108602052604090205490565b348015610ac5575f80fd5b5061044360fe5481565b348015610ada575f80fd5b506103bd610ae9366004614e4f565b613262565b348015610af9575f80fd5b50610389610b08366004614df0565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b5557506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b646134cb565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bda9190614e6a565b905060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c519190614e6a565b604051636fc4c27f60e11b8152600160048201526001600160a01b039182169183169063df8984fe90602401602060405180830381865afa158015610c98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cbc9190614e6a565b6001600160a01b031614610ce3576040516303b8ffef60e41b815260040160405180910390fd5b604051639f7053f560e01b81526001600160a01b03821690639f7053f590610d119088908890600401614ead565b5f604051808303815f87803b158015610d28575f80fd5b505af1158015610d3a573d5f803e3d5ffd5b50505050610d4783613511565b604051633e71376960e21b81523360048201526001600160a01b0382169063f9c4dda490602401602060405180830381865afa158015610d89573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dad9190614ec8565b15610dcb5760405163707999fb60e11b815260040160405180910390fd5b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e419190614e6a565b60fd54604051636a0b688160e01b81526001600482015260248101919091526001600160a01b039190911690636a0b6881906044016020604051808303815f875af1158015610e92573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb69190614e6a565b60fd545f9081526101096020526040902080546001600160a01b0319166001600160a01b038316179055905086610eed5780610f62565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f629190614e6a565b9250610f7087878787613538565b5050949350505050565b610f826136c6565b610f8a6134cb565b60fb5460408051633871d0f160e01b81529051611008923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fdf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110039190614ee3565b61371f565b60fc548590849083908161101c8486614f0e565b6110269190614f0e565b11156110455760405163525e3de760e01b815260040160405180910390fd5b5f5b8381101561110e575f6101038b8b8481811061106557611065614f21565b90506020028101906110779190614f35565b604051611085929190614f77565b908152602001604051809103902054905061109f816137ab565b6110a8816137f7565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b848181106110db576110db614f21565b90506020028101906110ed9190614f35565b836040516110fd93929190614f86565b60405180910390a150600101611047565b5081156111eb5760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611166573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061118a9190614e6a565b6001600160a01b0316638d0d8cb66111aa6729a2241af62c000085614fa9565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156111d3575f80fd5b505af11580156111e5573d5f803e3d5ffd5b50505050505b5f5b828110156112e1575f61010389898481811061120b5761120b614f21565b905060200281019061121d9190614f35565b60405161122b929190614f77565b9081526020016040518091039020549050611245816137ab565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b834668989848181106112ae576112ae614f21565b90506020028101906112c09190614f35565b836040516112d093929190614f86565b60405180910390a1506001016111ed565b505f5b818110156113ab575f61010387878481811061130257611302614f21565b90506020028101906113149190614f35565b604051611322929190614f77565b908152602001604051809103902054905061133c816137ab565b61134581613838565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f87878481811061137857611378614f21565b905060200281019061138a9190614f35565b8360405161139a93929190614f86565b60405180910390a1506001016112e4565b505050506113b9600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b81529051611416923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fdf573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb5461148f903390600160501b90046001600160a01b03166139ce565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c3690602001611466565b60fb5460408051633871d0f160e01b81529051611528923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fdf573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa158015611576573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159a9190614ee3565b8111156115ba57604051639519af4360e01b815260040160405180910390fd5b5f5b8181101561170f575f6101038585848181106115da576115da614f21565b90506020028101906115ec9190614f35565b6040516115fa929190614f77565b908152602001604051809103902054905061161481613a53565b611631576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b158015611693575f80fd5b505af11580156116a5573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf798585848181106116dc576116dc614f21565b90506020028101906116ee9190614f35565b836040516116fe93929190614f86565b60405180910390a1506001016115bc565b5061171981613c9e565b505050565b6060825f03611740576040516334d6e01560e01b815260040160405180910390fd5b5f8261174d600186614fc0565b6117579190614fa9565b611762906001614f0e565b90505f61176f8483614f0e565b905060fd5481116117805780611784565b60fd545b90505f828211611794575f61179e565b61179e8383614fc0565b6001600160401b038111156117b5576117b5614bf0565b6040519080825280602002602001820160405280156117de578160200160208202803683370190505b509050825b82811015611848575f81815261010960205260409020546001600160a01b03168261180e8684614fc0565b8151811061181e5761181e614f21565b6001600160a01b03909216602092830291909101909101528061184081614fd3565b9150506117e3565b5095945050505050565b5f8281526065602052604090206001015461186c81613ce9565b6117198383613cf3565b5f610103838360405161188a929190614f77565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146119185760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6119228282613d78565b5050565b60fb54611944903390600160501b90046001600160a01b0316613dde565b61194c613e63565b565b5f54610100900460ff161580801561196c57505f54600160ff909116105b806119855750303b15801561198557505f5460ff166001145b6119e85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161190f565b5f805460ff191660011790558015611a09575f805461ff0019166101001790555b611a1283613511565b611a1b82613511565b611a23613eb5565b611a2b613edb565b611a33613f09565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff0000909116600160501b6001600160a01b0386160261ffff1916171769ffffffffffffffff0000191662320000179055603260fc55611aa15f84613cf3565b8015611719575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5f9190614e6a565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b8152600401611b8c929190614ead565b5f604051808303815f87803b158015611ba3575f80fd5b505af1158015611bb5573d5f803e3d5ffd5b50505050611bc281613511565b611bcb33613f37565b50335f9081526101066020908152604080832054808452610105909252909120600101611bf9848683615068565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d8726977790611c5a90879087908790615123565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b81529051611cbd923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fdf573d5f803e3d5ffd5b806101015f828254611ccf9190614f0e565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f290602001611466565b6101026020525f90815260409020805460018201805460ff9092169291611d2e90614feb565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5a90614feb565b8015611da55780601f10611d7c57610100808354040283529160200191611da5565b820191905f5260205f20905b815481529060010190602001808311611d8857829003601f168201915b505050505090806002018054611dba90614feb565b80601f0160208091040260200160405190810160405280929190818152602001828054611de690614feb565b8015611e315780601f10611e0857610100808354040283529160200191611e31565b820191905f5260205f20905b815481529060010190602001808311611e1457829003601f168201915b505050505090806003018054611e4690614feb565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7290614feb565b8015611ebd5780601f10611e9457610100808354040283529160200191611ebd565b820191905f5260205f20905b815481529060010190602001808311611ea057829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611ef26136c6565b60fb5460408051637a87fa0b60e01b81529051611f47923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fdf573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fbc9190614e6a565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611ff4575f80fd5b505af1158015612006573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a8160405161203c91815260200190565b60405180910390a161204e600160c955565b50565b60fb5461206f903390600160501b90046001600160a01b0316613dde565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a290602001611466565b6060825f036120ed576040516334d6e01560e01b815260040160405180910390fd5b5f826120fa600186614fc0565b6121049190614fa9565b90505f6121118483614f0e565b6001600160a01b0387165f908152610106602052604081205491925081900361214d5760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311612169578261216b565b805b92505f84841161217b575f612185565b6121858585614fc0565b6001600160401b0381111561219c5761219c614bf0565b6040519080825280602002602001820160405280156121d557816020015b6121c261472b565b8152602001906001900390816121ba5790505b509050845b84811015612475575f8481526101076020526040812080548390811061220257612202614f21565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff16600581111561224457612244614af6565b600581111561225557612255614af6565b815260200160018201805461226990614feb565b80601f016020809104026020016040519081016040528092919081815260200182805461229590614feb565b80156122e05780601f106122b7576101008083540402835291602001916122e0565b820191905f5260205f20905b8154815290600101906020018083116122c357829003601f168201915b505050505081526020016002820180546122f990614feb565b80601f016020809104026020016040519081016040528092919081815260200182805461232590614feb565b80156123705780601f1061234757610100808354040283529160200191612370565b820191905f5260205f20905b81548152906001019060200180831161235357829003601f168201915b5050505050815260200160038201805461238990614feb565b80601f01602080910402602001604051908101604052809291908181526020018280546123b590614feb565b80156124005780601f106123d757610100808354040283529160200191612400565b820191905f5260205f20905b8154815290600101906020018083116123e357829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152836124468985614fc0565b8151811061245657612456614f21565b602002602001018190525050808061246d90614fd3565b9150506121da565b5098975050505050505050565b5f6101005460ff546124949190614fc0565b905090565b60fb546124b7903390600160501b90046001600160a01b0316613dde565b61194c613fa5565b5f818311156124e15760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f908152610106602052604081205490612511825f908152610107602052604090205490565b90508084116125205783612522565b805b93505f855b8581101561257f575f8481526101076020526040812080548390811061254f5761254f614f21565b905f5260205f200154905061256381613fe2565b1561257657826125728161514e565b9350505b50600101612527565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f036125d6576040516334d6e01560e01b815260040160405180910390fd5b5f826125e3600186614fc0565b6125ed9190614fa9565b6125f8906001614f0e565b90505f6126058483614f0e565b905060fe548111612616578061261a565b60fe545b90505f846001600160401b0381111561263557612635614bf0565b60405190808252806020026020018201604052801561266e57816020015b61265b61472b565b8152602001906001900390816126535790505b5090505f835b838110156128f35761268581613a53565b156128e1575f818152610102602052604090819020815161010081019092528054829060ff1660058111156126bc576126bc614af6565b60058111156126cd576126cd614af6565b81526020016001820180546126e190614feb565b80601f016020809104026020016040519081016040528092919081815260200182805461270d90614feb565b80156127585780601f1061272f57610100808354040283529160200191612758565b820191905f5260205f20905b81548152906001019060200180831161273b57829003601f168201915b5050505050815260200160028201805461277190614feb565b80601f016020809104026020016040519081016040528092919081815260200182805461279d90614feb565b80156127e85780601f106127bf576101008083540402835291602001916127e8565b820191905f5260205f20905b8154815290600101906020018083116127cb57829003601f168201915b5050505050815260200160038201805461280190614feb565b80601f016020809104026020016040519081016040528092919081815260200182805461282d90614feb565b80156128785780601f1061284f57610100808354040283529160200191612878565b820191905f5260205f20905b81548152906001019060200180831161285b57829003601f168201915b505050918352505060048201546001600160a01b03166020820152600582015460408201526006820154606082015260079091015460809091015283518490849081106128c7576128c7614f21565b602002602001018190525081806128dd90614fd3565b9250505b806128eb81614fd3565b915050612674565b50815295945050505050565b5f61290981613ce9565b61291282613511565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb546129a6903390600160501b90046001600160a01b03166139ce565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b490602001611466565b60fb5460408051637a87fa0b60e01b81529051612a30923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fdf573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da990602001611466565b6101056020525f90815260409020805460018201805460ff8084169461010090940416929190612a9590614feb565b80601f0160208091040260200160405190810160405280929190818152602001828054612ac190614feb565b8015612b0c5780601f10612ae357610100808354040283529160200191612b0c565b820191905f5260205f20905b815481529060010190602001808311612aef57829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f82815260656020526040902060010154612b4981613ce9565b6117198383613d78565b610107602052815f5260405f208181548110612b6d575f80fd5b905f5260205f20015f91509150505481565b612b876136c6565b612b8f6134cb565b5f612b9933613f37565b90505f80612ba988878686614268565b915091505f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c239190614e6a565b90505f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c9b9190614e6a565b90505f5b848110156130fa57816001600160a01b0316639f55941b8d8d84818110612cc857612cc8614f21565b9050602002810190612cda9190614f35565b8d8d86818110612cec57612cec614f21565b9050602002810190612cfe9190614f35565b8d8d88818110612d1057612d10614f21565b9050602002810190612d229190614f35565b6040518763ffffffff1660e01b8152600401612d4396959493929190615173565b5f604051808303815f87803b158015612d5a575f80fd5b505af1158015612d6c573d5f803e3d5ffd5b505050505f836001600160a01b0316637f70ce0d6001898589612d8f9190614f0e565b60fe546040516001600160e01b031960e087901b16815260ff90941660048501526024840192909252604483015260648201526084016020604051808303815f875af1158015612de1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e059190614e6a565b604080516101008101909152909150805f81526020018e8e85818110612e2d57612e2d614f21565b9050602002810190612e3f9190614f35565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018c8c85818110612e8a57612e8a614f21565b9050602002810190612e9c9190614f35565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018a8a85818110612ee757612ee7614f21565b9050602002810190612ef99190614f35565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b03841660208084019190915260408084018c905260608401839052608090930182905260fe54825261010290522081518154829060ff19166001836005811115612f8157612f81614af6565b021790555060208201516001820190612f9a90826151bb565b5060408201516002820190612faf90826151bb565b5060608201516003820190612fc490826151bb565b5060808201516004820180546001600160a01b0319166001600160a01b0390921691909117905560a0820151600582015560c0820151600682015560e09091015160079091015560fe546101038e8e8581811061302357613023614f21565b90506020028101906130359190614f35565b604051613043929190614f77565b9081526040805160209281900383019020929092555f898152610107825291822060fe5481546001810183559184529190922090910155337fab5128638b64e6216e80dfafa70d3cb6d54913a536dc41e76eb4a04cfbe979cf8e8e858181106130ae576130ae614f21565b90506020028101906130c09190614f35565b60fe546040516130d293929190614f86565b60405180910390a260fe8054905f6130e983614fd3565b919050555081600101915050612c9f565b5060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa15801561314c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131709190614e6a565b6001600160a01b031663eda0ae128560fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131f49190614ee3565b6131fe9190614fa9565b8d8d8d8d8b8a6040518863ffffffff1660e01b8152600401613225969594939291906152ff565b5f604051808303818588803b15801561323c575f80fd5b505af115801561324e573d5f803e3d5ffd5b505050505050505050506113b9600160c955565b5f8061326d33613f37565b5f818152610105602052604090205490915083151561010090910460ff161515036132ab57604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133209190614ee3565b5f82815261010860205260409020546133399190614f0e565b4310156133595760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b031691508215613450576001600160a01b03821631156133d857816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156133c1575f80fd5b505af11580156133d3573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613429573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061344d9190614e6a565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff161561194c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161190f565b6001600160a01b03811661204e5760405163d92e233d60e01b815260040160405180910390fd5b6040518060a00160405280600115158152602001851515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b0384166020808401919091523360409384015260fd548252610105815290829020835181549285015161ffff1990931690151561ff00191617610100921515929092029190911781559082015160018201906135ee90826151bb565b5060608201516002820180546001600160a01b03199081166001600160a01b039384161790915560809093015160039092018054909316911617905560fd8054335f9081526101066020908152604080832084905592825261010890529081204390558154919061365e83614fd3565b9190505550336001600160a01b03167f55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd482600160fd5461369e9190614fc0565b604080516001600160a01b039093168352602083019190915287151590820152606001611c5a565b600260c954036137185760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161190f565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa15801561376a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061378e9190614ec8565b6117195760405163168dfea160e01b815260040160405180910390fd5b8015806137d957505f818152610102602052604081205460ff1660058111156137d6576137d6614af6565b14155b1561204e576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff80548452610104909252822083905580549161383083614fd3565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa1580156138b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138d99190614e6a565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa158015613938573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061395c9190614ee3565b61396e90673782dace9d900000614fc0565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b1580156139ab575f80fd5b505af11580156139bd573d5f803e3d5ffd5b5050505050505050565b600160c955565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa158015613a12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a369190614ec8565b6119225760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff166005811115613a8857613a88614af6565b6005811115613a9957613a99614af6565b8152602001600182018054613aad90614feb565b80601f0160208091040260200160405190810160405280929190818152602001828054613ad990614feb565b8015613b245780601f10613afb57610100808354040283529160200191613b24565b820191905f5260205f20905b815481529060010190602001808311613b0757829003601f168201915b50505050508152602001600282018054613b3d90614feb565b80601f0160208091040260200160405190810160405280929190818152602001828054613b6990614feb565b8015613bb45780601f10613b8b57610100808354040283529160200191613bb4565b820191905f5260205f20905b815481529060010190602001808311613b9757829003601f168201915b50505050508152602001600382018054613bcd90614feb565b80601f0160208091040260200160405190810160405280929190818152602001828054613bf990614feb565b8015613c445780601f10613c1b57610100808354040283529160200191613c44565b820191905f5260205f20905b815481529060010190602001808311613c2757829003601f168201915b50505091835250506004828101546001600160a01b03166020830152600583015460408301526006830154606083015260079092015460809091015290915081516005811115613c9657613c96614af6565b149392505050565b806101015f828254613cb09190614fc0565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece390602001611466565b61204e8133614483565b613cfd828261258a565b611922575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613d343390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b613d82828261258a565b15611922575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015613e22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e469190614ec8565b6119225760405163c4230ae360e01b815260040160405180910390fd5b613e6b6144dc565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f54610100900460ff1661194c5760405162461bcd60e51b815260040161190f9061533b565b5f54610100900460ff16613f015760405162461bcd60e51b815260040161190f9061533b565b61194c614525565b5f54610100900460ff16613f2f5760405162461bcd60e51b815260040161190f9061533b565b61194c614557565b6001600160a01b0381165f908152610106602052604081205490819003613f715760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff16613fa05760405163c11cb1df60e01b815260040160405180910390fd5b919050565b613fad6134cb565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613e983390565b5f818152610102602052604080822081516101008101909252805483929190829060ff16600581111561401757614017614af6565b600581111561402857614028614af6565b815260200160018201805461403c90614feb565b80601f016020809104026020016040519081016040528092919081815260200182805461406890614feb565b80156140b35780601f1061408a576101008083540402835291602001916140b3565b820191905f5260205f20905b81548152906001019060200180831161409657829003601f168201915b505050505081526020016002820180546140cc90614feb565b80601f01602080910402602001604051908101604052809291908181526020018280546140f890614feb565b80156141435780601f1061411a57610100808354040283529160200191614143565b820191905f5260205f20905b81548152906001019060200180831161412657829003601f168201915b5050505050815260200160038201805461415c90614feb565b80601f016020809104026020016040519081016040528092919081815260200182805461418890614feb565b80156141d35780601f106141aa576101008083540402835291602001916141d3565b820191905f5260205f20905b8154815290600101906020018083116141b657829003601f168201915b505050918352505060048201546001600160a01b031660208201526005808301546040830152600683015460608301526007909201546080909101529091508151600581111561422557614225614af6565b1480614243575060028151600581111561424157614241614af6565b145b80614260575060018151600581111561425e5761425e614af6565b145b159392505050565b5f8084861415806142795750838614155b156142975760405163e5fe884360e01b815260040160405180910390fd5b8591508115806142ac575060fb5461ffff1682115b156142ca576040516379b348ff60e11b815260040160405180910390fd5b505f8281526101076020526040812054906142e63382846124bf565b60fb546001600160401b039182169250620100009004166143078483614f0e565b111561432657604051633e10caad60e21b815260040160405180910390fd5b614338673782dace9d90000084614fa9565b341461435757604051635aaa2d1f60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b031663aa9537956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143cc9190614e6a565b6001600160a01b031663b178e38e3360016143e78786614f0e565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260ff90911660248301526044820152606401602060405180830381865afa158015614438573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061445c9190614ec8565b61447957604051633bf053fd60e11b815260040160405180910390fd5b5094509492505050565b61448d828261258a565b6119225761449a8161457d565b6144a583602061458f565b6040516020016144b6929190615386565b60408051601f198184030181529082905262461bcd60e51b825261190f916004016153fa565b60975460ff1661194c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161190f565b5f54610100900460ff1661454b5760405162461bcd60e51b815260040161190f9061533b565b6097805460ff19169055565b5f54610100900460ff166139c75760405162461bcd60e51b815260040161190f9061533b565b6060610b556001600160a01b03831660145b60605f61459d836002614fa9565b6145a8906002614f0e565b6001600160401b038111156145bf576145bf614bf0565b6040519080825280601f01601f1916602001820160405280156145e9576020820181803683370190505b509050600360fc1b815f8151811061460357614603614f21565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061463157614631614f21565b60200101906001600160f81b03191690815f1a9053505f614653846002614fa9565b61465e906001614f0e565b90505b60018111156146d5576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061469257614692614f21565b1a60f81b8282815181106146a8576146a8614f21565b60200101906001600160f81b03191690815f1a90535060049490941c936146ce8161540c565b9050614661565b5083156147245760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161190f565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f60208284031215614785575f80fd5b81356001600160e01b031981168114614724575f80fd5b801515811461204e575f80fd5b5f8083601f8401126147b9575f80fd5b5081356001600160401b038111156147cf575f80fd5b6020830191508360208285010111156147e6575f80fd5b9250929050565b6001600160a01b038116811461204e575f80fd5b5f805f8060608587031215614814575f80fd5b843561481f8161479c565b935060208501356001600160401b03811115614839575f80fd5b614845878288016147a9565b9094509250506040850135614859816147ed565b939692955090935050565b5f8083601f840112614874575f80fd5b5081356001600160401b0381111561488a575f80fd5b6020830191508360208260051b85010111156147e6575f80fd5b5f805f805f80606087890312156148b9575f80fd5b86356001600160401b03808211156148cf575f80fd5b6148db8a838b01614864565b909850965060208901359150808211156148f3575f80fd5b6148ff8a838b01614864565b90965094506040890135915080821115614917575f80fd5b5061492489828a01614864565b979a9699509497509295939492505050565b5f60208284031215614946575f80fd5b5035919050565b5f6020828403121561495d575f80fd5b813561ffff81168114614724575f80fd5b5f806020838503121561497f575f80fd5b82356001600160401b03811115614994575f80fd5b6149a085828601614864565b90969095509350505050565b5f80604083850312156149bd575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b81811015614a0c5783516001600160a01b0316835292840192918401916001016149e7565b50909695505050505050565b5f8060408385031215614a29575f80fd5b823591506020830135614a3b816147ed565b809150509250929050565b5f8060208385031215614a57575f80fd5b82356001600160401b03811115614a6c575f80fd5b6149a0858286016147a9565b5f8060408385031215614a89575f80fd5b8235614a94816147ed565b91506020830135614a3b816147ed565b5f805f60408486031215614ab6575f80fd5b83356001600160401b03811115614acb575f80fd5b614ad7868287016147a9565b9094509250506020840135614aeb816147ed565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614b2657634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015614b44578181015183820152602001614b2c565b50505f910152565b5f8151808452614b63816020860160208601614b2a565b601f01601f19169290920160200192915050565b5f610100614b85838c614b0a565b806020840152614b978184018b614b4c565b90508281036040840152614bab818a614b4c565b90508281036060840152614bbf8189614b4c565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215614c14575f80fd5b81356001600160401b0380821115614c2a575f80fd5b818401915084601f830112614c3d575f80fd5b813581811115614c4f57614c4f614bf0565b604051601f8201601f19908116603f01168101908382118183101715614c7757614c77614bf0565b81604052828152876020848701011115614c8f575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f60208284031215614cbe575f80fd5b81356001600160401b0381168114614724575f80fd5b5f805f60608486031215614ce6575f80fd5b8335614cf1816147ed565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b83811015614de257603f198984030185528151610100614d4c858351614b0a565b88820151818a870152614d6182870182614b4c565b9150508782015185820389870152614d798282614b4c565b91505060608083015186830382880152614d938382614b4c565b92505050608080830151614db1828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e09182015191909401529386019390860190600101614d2b565b509098975050505050505050565b5f60208284031215614e00575f80fd5b8135614724816147ed565b8515158152841515602082015260a060408201525f614e2d60a0830186614b4c565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f60208284031215614e5f575f80fd5b81356147248161479c565b5f60208284031215614e7a575f80fd5b8151614724816147ed565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f614ec0602083018486614e85565b949350505050565b5f60208284031215614ed8575f80fd5b81516147248161479c565b5f60208284031215614ef3575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b5557610b55614efa565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112614f4a575f80fd5b8301803591506001600160401b03821115614f63575f80fd5b6020019150368190038213156147e6575f80fd5b818382375f9101908152919050565b604081525f614f99604083018587614e85565b9050826020830152949350505050565b8082028115828204841417610b5557610b55614efa565b81810381811115610b5557610b55614efa565b5f60018201614fe457614fe4614efa565b5060010190565b600181811c90821680614fff57607f821691505b60208210810361501d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115611719575f81815260208120601f850160051c810160208610156150495750805b601f850160051c820191505b818110156113b957828155600101615055565b6001600160401b0383111561507f5761507f614bf0565b6150938361508d8354614feb565b83615023565b5f601f8411600181146150c4575f85156150ad5750838201355b5f19600387901b1c1916600186901b17835561511c565b5f83815260209020601f19861690835b828110156150f457868501358255602094850194600190920191016150d4565b5086821015615110575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f615136604083018587614e85565b905060018060a01b0383166020830152949350505050565b5f6001600160401b0380831681810361516957615169614efa565b6001019392505050565b606081525f61518660608301888a614e85565b8281036020840152615199818789614e85565b905082810360408401526151ae818587614e85565b9998505050505050505050565b81516001600160401b038111156151d4576151d4614bf0565b6151e8816151e28454614feb565b84615023565b602080601f83116001811461521b575f84156152045750858301515b5f19600386901b1c1916600185901b1785556113b9565b5f85815260208120601f198616915b828110156152495788860151825594840194600190910190840161522a565b508582101561526657878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8183525f60208085019450848460051b8601845f5b878110156152f25783830389528135601e198836030181126152ab575f80fd5b870185810190356001600160401b038111156152c5575f80fd5b8036038213156152d3575f80fd5b6152de858284614e85565b9a87019a945050509084019060010161528b565b5090979650505050505050565b608081525f61531260808301888a615276565b8281036020840152615325818789615276565b6040840195909552505060600152949350505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516153bd816017850160208801614b2a565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516153ee816028840160208801614b2a565b01602801949350505050565b602081525f6147246020830184614b4c565b5f8161541a5761541a614efa565b505f19019056fea2646970667358221220fa16a22260d29f7dcdf996d53e3ce183d121812d49a591d3c1cc302f0341140364736f6c63430008140033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CooldownNotComplete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicatePoolIDOrPoolNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InSufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBondEthValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidKeyCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartAndEndIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MisMatchingInputKeysSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoChangeInState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSDCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorAlreadyOnBoardedInProtocol\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorIsDeactivate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorNotOnBoarded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PageNumberIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PubkeyAlreadyExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyVerifiedKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyWithdrawnKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UNEXPECTED_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"maxKeyLimitReached\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"AddedValidatorKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"DecreasedTotalActiveValidatorCount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"IncreasedTotalActiveValidatorCount\",\"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\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nodeRewardAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"OnboardedOperator\",\"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\":\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredCollateralToPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"batchKeyDepositLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedInputKeyCountLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"UpdatedMaxNonTerminalKeyPerOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"UpdatedNextQueuedValidatorIndex\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardAddress\",\"type\":\"address\"}],\"name\":\"UpdatedOperatorDetails\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"UpdatedSocializingPoolState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"}],\"name\":\"UpdatedValidatorDepositBlock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedVerifiedKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedWithdrawnKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedAsFrontRunned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedReadyToDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorStatusMarkedAsInvalidSignature\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COLLATERAL_ETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRONT_RUN_PENALTY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ID\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_depositSignature\",\"type\":\"bytes[]\"}],\"name\":\"addValidatorKeys\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"changeSocializingPoolState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllNodeELVaultAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorRewardAddress\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalKeys\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getSocializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsByOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"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\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"increaseTotalActiveValidatorCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inputKeyCountLimit\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_readyToDepositPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_frontRunPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_invalidSignaturePubkey\",\"type\":\"bytes[]\"}],\"name\":\"markValidatorReadyToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNonTerminalKeyPerOperator\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextQueuedValidatorIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextValidatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nodeELRewardVaultByOperatorId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_operatorRewardAddress\",\"type\":\"address\"}],\"name\":\"onboardNodeOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorIDByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"operatorStructById\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"operatorRewardAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorAddress\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queuedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"socializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"totalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferCollateralToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"}],\"name\":\"updateDepositStatusAndBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_inputKeyCountLimit\",\"type\":\"uint16\"}],\"name\":\"updateInputKeyCountLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"updateMaxNonTerminalKeyPerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"updateNextQueuedValidatorIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_rewardAddress\",\"type\":\"address\"}],\"name\":\"updateOperatorDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateVerifiedKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"validatorIdByPubkey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorIdsByOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorRegistry\",\"outputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifiedKeyBatchSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"withdrawnValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // PermissionlessNodeRegistryABI is the input ABI used to generate the binding from. // Deprecated: Use PermissionlessNodeRegistryMetaData.ABI instead. var PermissionlessNodeRegistryABI = PermissionlessNodeRegistryMetaData.ABI -// PermissionlessNodeRegistryBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use PermissionlessNodeRegistryMetaData.Bin instead. -var PermissionlessNodeRegistryBin = PermissionlessNodeRegistryMetaData.Bin - -// DeployPermissionlessNodeRegistry deploys a new Ethereum contract, binding an instance of PermissionlessNodeRegistry to it. -func DeployPermissionlessNodeRegistry(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *PermissionlessNodeRegistry, error) { - parsed, err := PermissionlessNodeRegistryMetaData.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(PermissionlessNodeRegistryBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &PermissionlessNodeRegistry{PermissionlessNodeRegistryCaller: PermissionlessNodeRegistryCaller{contract: contract}, PermissionlessNodeRegistryTransactor: PermissionlessNodeRegistryTransactor{contract: contract}, PermissionlessNodeRegistryFilterer: PermissionlessNodeRegistryFilterer{contract: contract}}, nil -} - // PermissionlessNodeRegistry is an auto generated Go binding around an Ethereum contract. type PermissionlessNodeRegistry struct { PermissionlessNodeRegistryCaller // Read-only binding to the contract @@ -1518,27 +1496,6 @@ func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) return _PermissionlessNodeRegistry.Contract.IncreaseTotalActiveValidatorCount(&_PermissionlessNodeRegistry.TransactOpts, _count) } -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _admin, address _staderConfig) returns() -func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) Initialize(opts *bind.TransactOpts, _admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { - return _PermissionlessNodeRegistry.contract.Transact(opts, "initialize", _admin, _staderConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _admin, address _staderConfig) returns() -func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) Initialize(_admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { - return _PermissionlessNodeRegistry.Contract.Initialize(&_PermissionlessNodeRegistry.TransactOpts, _admin, _staderConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _admin, address _staderConfig) returns() -func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) Initialize(_admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { - return _PermissionlessNodeRegistry.Contract.Initialize(&_PermissionlessNodeRegistry.TransactOpts, _admin, _staderConfig) -} - // MarkValidatorReadyToDeposit is a paid mutator transaction binding the contract method 0x13797bff. // // Solidity: function markValidatorReadyToDeposit(bytes[] _readyToDepositPubkey, bytes[] _frontRunPubkey, bytes[] _invalidSignaturePubkey) returns() diff --git a/stader-lib/contracts/permissionless-pool.go b/stader-lib/contracts/permissionless-pool.go index ed94b9902..569c147b8 100644 --- a/stader-lib/contracts/permissionless-pool.go +++ b/stader-lib/contracts/permissionless-pool.go @@ -31,35 +31,13 @@ var ( // PermissionlessPoolMetaData contains all meta data concerning the PermissionlessPool contract. var PermissionlessPoolMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CouldNotDetermineExcessETH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCommission\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ReceivedCollateralETH\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ReceivedInsuranceFund\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredETHToSSPMForDefectiveKeys\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorFee\",\"type\":\"uint256\"}],\"name\":\"UpdatedCommissionFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorDepositedOnBeaconChain\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorPreDepositedOnBeaconChain\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEPOSIT_NODE_BOND\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_COMMISSION_LIMIT_BIPS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_withdrawCredential\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_depositAmount\",\"type\":\"uint256\"}],\"name\":\"computeDepositDataRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"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\":[],\"name\":\"getSocializingPoolAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"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\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_operatorTotalKeys\",\"type\":\"uint256\"}],\"name\":\"preDepositOnBeaconChain\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"receiveRemainingCollateralETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"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\":\"uint256\",\"name\":\"_protocolFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_operatorFee\",\"type\":\"uint256\"}],\"name\":\"setCommissionFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeUserETHToBeaconChain\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x608060405234801562000010575f80fd5b506200001b62000021565b620000e0565b5f54610100900460ff16156200008d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161015620000de575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612eba80620000ee5f395ff3fe60806040526004361061019f575f3560e01c806389afc0f1116100eb578063b01db07811610089578063d547741f11610063578063d547741f14610463578063eda0ae1214610482578063f74b4cd114610495578063f9c4dda4146104a9576101bd565b8063b01db07814610426578063b0e21e8a1461043a578063b6fb3fac1461044f576101bd565b80639b26728e116100c55780639b26728e146103d75780639cd6dd56146103df5780639ee804cb146103f4578063a217fddf14610413576101bd565b806389afc0f1146103845780638a25bcec1461039957806391d14854146103b8576101bd565b806336514d9f11610158578063490ffa3511610132578063490ffa35146103065780635c164e531461033d57806377c359e11461035c5780637bd977d914610370576101bd565b806336514d9f146102a957806336568abe146102c8578063485cc955146102e7576101bd565b806301ffc9a7146101d65780631f033ef01461020a57806321066d1814610214578063248a9ca31461023357806324f697061461026f5780632f2ff15d1461028a576101bd565b366101bd57604051639ba6061b60e01b815260040160405180910390fd5b604051639ba6061b60e01b815260040160405180910390fd5b3480156101e1575f80fd5b506101f56101f036600461256a565b6104c8565b60405190151581526020015b60405180910390f35b6102126104fe565b005b34801561021f575f80fd5b5061021261022e366004612591565b6105ab565b34801561023e575f80fd5b5061026161024d3660046125b1565b5f9081526065602052604090206001015490565b604051908152602001610201565b34801561027a575f80fd5b506102616729a2241af62c000081565b348015610295575f80fd5b506102126102a43660046125dc565b610636565b3480156102b4575f80fd5b506101f56102c336600461264f565b61065f565b3480156102d3575f80fd5b506102126102e23660046125dc565b61073d565b3480156102f2575f80fd5b5061021261030136600461268e565b6107c0565b348015610311575f80fd5b5060c954610325906001600160a01b031681565b6040516001600160a01b039091168152602001610201565b348015610348575f80fd5b506102616103573660046126ba565b610916565b348015610367575f80fd5b50610261610c51565b34801561037b575f80fd5b50610261610d20565b34801561038f575f80fd5b5061026160cb5481565b3480156103a4575f80fd5b506102616103b3366004612755565b610dc6565b3480156103c3575f80fd5b506101f56103d23660046125dc565b610ebb565b610212610ee5565b3480156103ea575f80fd5b506102616105dc81565b3480156103ff575f80fd5b5061021261040e366004612787565b6113d6565b34801561041e575f80fd5b506102615f81565b348015610431575f80fd5b50610261611437565b348015610445575f80fd5b5061026160ca5481565b34801561045a575f80fd5b506103256114dd565b34801561046e575f80fd5b5061021261047d3660046125dc565b611548565b6102126104903660046127e3565b61156c565b3480156104a0575f80fd5b50610325611b30565b3480156104b4575f80fd5b506101f56104c3366004612787565b611b77565b5f6001600160e01b03198216637965db0b60e01b14806104f857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60c95460408051630a9548ed60e11b815290516105769233926001600160a01b0390911691829163152a91da9160048083019260209291908290030181865afa15801561054d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610571919061285b565b611c4c565b6040513481527f3726a70cbf9252aacb06774b2f9f7108d837fc60afd7143f86eec77d7e3da94b9060200160405180910390a1565b60c9546105c29033906001600160a01b0316611cd8565b6105dc6105cf8284612886565b11156105ee5760405163dc81db8560e01b815260040160405180910390fd5b60ca82905560cb81905560408051838152602081018390527fe8525a7862504bbe091b0440fe96979769664cae1625591ff0a9816512a5287b91015b60405180910390a15050565b5f8281526065602052604090206001015461065081611d5d565b61065a8383611d6a565b505050565b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa1580156106a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ca91906128a9565b6001600160a01b03166336514d9f84846040518363ffffffff1660e01b81526004016106f79291906128ec565b602060405180830381865afa158015610712573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107369190612907565b9392505050565b6001600160a01b03811633146107b25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107bc8282611def565b5050565b5f54610100900460ff16158080156107de57505f54600160ff909116105b806107f75750303b1580156107f757505f5460ff166001145b61085a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107a9565b5f805460ff19166001179055801561087b575f805461ff0019166101001790555b61088483611e55565b61088d82611e55565b610895611e7c565b61089d611ea2565b6101f460ca81905560cb5560c980546001600160a01b0319166001600160a01b0384161790556108cd5f84611d6a565b801561065a575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b5f8061092183611ed0565b90505f60028a8a5f60801b60405160200161093e93929190612926565b60408051601f19818403018152908290526109589161296f565b602060405180830381855afa158015610973573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610996919061285b565b90505f6002806109a96040848c8e61298a565b6040516020016109ba9291906129b1565b60408051601f19818403018152908290526109d49161296f565b602060405180830381855afa1580156109ef573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a12919061285b565b6002610a218b6040818f61298a565b604051610a349291905f906020016129c0565b60408051601f1981840301815290829052610a4e9161296f565b602060405180830381855afa158015610a69573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8c919061285b565b60408051602081019390935282015260600160408051601f1981840301815290829052610ab89161296f565b602060405180830381855afa158015610ad3573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610af6919061285b565b9050600280838989604051602001610b10939291906129d2565b60408051601f1981840301815290829052610b2a9161296f565b602060405180830381855afa158015610b45573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b68919061285b565b604051600290610b809087905f9087906020016129eb565b60408051601f1981840301815290829052610b9a9161296f565b602060405180830381855afa158015610bb5573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610bd8919061285b565b60408051602081019390935282015260600160408051601f1981840301815290829052610c049161296f565b602060405180830381855afa158015610c1f573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610c42919061285b565b9b9a5050505050505050505050565b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa158015610c98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cbc91906128a9565b6001600160a01b03166377c359e16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1b919061285b565b905090565b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa158015610d67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8b91906128a9565b6001600160a01b0316637bd977d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf7573d5f803e3d5ffd5b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa158015610e0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3191906128a9565b6040516322896f3b60e21b81526001600160a01b03868116600483015260248201869052604482018590529190911690638a25bcec90606401602060405180830381865afa158015610e85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea99190612a22565b67ffffffffffffffff16949350505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610eed61208c565b60c9546040805163529deeeb60e11b81529051610f3c9233926001600160a01b0390911691829163a53bddd69160048083019260209291908290030181865afa15801561054d573d5f803e3d5ffd5b5f6729a2241af62c000060c95f9054906101000a90046001600160a01b03166001600160a01b031663fa71fcbb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fba919061285b565b610fc49190612a49565b610fce9034612a5c565b90505f60c95f9054906101000a90046001600160a01b03166001600160a01b031663360374a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611021573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104591906128a9565b90506001600160a01b038116635ae7f25d6110686729a2241af62c000085612a7b565b6040518263ffffffff1660e01b815260040161108691815260200190565b5f604051808303815f87803b15801561109d575f80fd5b505af11580156110af573d5f803e3d5ffd5b505050505f60c95f9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015611104573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112891906128a9565b90505f60c95f9054906101000a90046001600160a01b03166001600160a01b0316638f8b38676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061119f91906128a9565b90505f836001600160a01b03166374338e6d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611202919061285b565b9050805b6112108287612886565b81101561130b5760405163bc4a3ad560e01b8152600481018290525f906001600160a01b0387169063bc4a3ad590602401602060405180830381865afa15801561125c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611280919061285b565b90506113028686868460c95f9054906101000a90046001600160a01b03166001600160a01b031663fa71fcbb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112fd919061285b565b6120e5565b50600101611206565b506001600160a01b03841663b8d2f06c6113258784612886565b6040518263ffffffff1660e01b815260040161134391815260200190565b5f604051808303815f87803b15801561135a575f80fd5b505af115801561136c573d5f803e3d5ffd5b50506040516359c3c9b760e01b8152600481018890526001600160a01b03871692506359c3c9b791506024015f604051808303815f87803b1580156113af575f80fd5b505af11580156113c1573d5f803e3d5ffd5b5050505050505050506113d46001609755565b565b5f6113e081611d5d565b6113e982611e55565b60c980546001600160a01b0319166001600160a01b0384169081179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200161062a565b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa15801561147e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114a291906128a9565b6001600160a01b031663b01db0786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf7573d5f803e3d5ffd5b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa158015611524573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1b91906128a9565b5f8281526065602052604090206001015461156281611d5d565b61065a8383611def565b61157461208c565b60c95460408051630a9548ed60e11b815290516115c39233926001600160a01b0390911691829163152a91da9160048083019260209291908290030181865afa15801561054d573d5f803e3d5ffd5b60c9546040805163062f2ca160e21b815290515f926001600160a01b0316916318bcb2849160048083019260209291908290030181865afa15801561160a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061162e91906128a9565b9050855f5b81811015611b1b575f836001600160a01b03166374903b0260c95f9054906101000a90046001600160a01b03166001600160a01b031663360374a46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561169b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116bf91906128a9565b6001600160a01b031663e0d7d0e96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061171e9190612a92565b88611729868a612886565b6040516001600160e01b031960e086901b16815260ff909316600484015260248301919091526044820152606401602060405180830381865afa158015611772573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061179691906128a9565b60405163ae4e4e4560e01b81526001600160a01b0380831660048301529192505f9186169063ae4e4e45906024015f60405180830381865afa1580156117de573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526118059190810190612b4b565b90505f30635c164e538d8d8781811061182057611820612b7d565b90506020028101906118329190612b91565b8d8d8981811061184457611844612b7d565b90506020028101906118569190612b91565b60c95460408051630829764560e01b815290518a926001600160a01b03169163082976459160048083019260209291908290030181865afa15801561189d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118c1919061285b565b6040518763ffffffff1660e01b81526004016118e296959493929190612bff565b602060405180830381865afa1580156118fd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611921919061285b565b905060c95f9054906101000a90046001600160a01b03166001600160a01b0316638f8b38676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611973573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199791906128a9565b6001600160a01b0316632289511860c95f9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a19919061285b565b8e8e88818110611a2b57611a2b612b7d565b9050602002810190611a3d9190612b91565b868f8f8b818110611a5057611a50612b7d565b9050602002810190611a629190612b91565b886040518863ffffffff1660e01b8152600401611a8496959493929190612c4d565b5f604051808303818588803b158015611a9b575f80fd5b505af1158015611aad573d5f803e3d5ffd5b50505050507fa35366ad083efbaee7949ff15c68508b95e2c0441248e80d73da97ac82bc1f108c8c86818110611ae557611ae5612b7d565b9050602002810190611af79190612b91565b604051611b059291906128ec565b60405180910390a1836001019350505050611633565b505050611b286001609755565b505050505050565b60c9546040805163051fdecd60e11b815290515f926001600160a01b031691630a3fbd9a9160048083019260209291908290030181865afa158015611524573d5f803e3d5ffd5b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa158015611bbe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be291906128a9565b604051633e71376960e21b81526001600160a01b038481166004830152919091169063f9c4dda490602401602060405180830381865afa158015611c28573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f89190612907565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa158015611c97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cbb9190612907565b61065a5760405163168dfea160e01b815260040160405180910390fd5b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015611d1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d409190612907565b6107bc5760405163c4230ae360e01b815260040160405180910390fd5b611d678133612343565b50565b611d748282610ebb565b6107bc575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611dab3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611df98282610ebb565b156107bc575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b038116611d675760405163d92e233d60e01b815260040160405180910390fd5b5f54610100900460ff166113d45760405162461bcd60e51b81526004016107a990612c87565b5f54610100900460ff16611ec85760405162461bcd60e51b81526004016107a990612c87565b6113d461239c565b60605f611ee1633b9aca0084612a5c565b60408051600880825281830190925291925060208201818036833701905050915060c081901b8060071a60f81b835f81518110611f2057611f20612b7d565b60200101906001600160f81b03191690815f1a9053508060061a60f81b83600181518110611f5057611f50612b7d565b60200101906001600160f81b03191690815f1a9053508060051a60f81b83600281518110611f8057611f80612b7d565b60200101906001600160f81b03191690815f1a9053508060041a60f81b83600381518110611fb057611fb0612b7d565b60200101906001600160f81b03191690815f1a9053508060031a60f81b83600481518110611fe057611fe0612b7d565b60200101906001600160f81b03191690815f1a9053508060021a60f81b8360058151811061201057612010612b7d565b60200101906001600160f81b03191690815f1a9053508060011a60f81b8360068151811061204057612040612b7d565b60200101906001600160f81b03191690815f1a905350805f1a60f81b8360078151811061206f5761206f612b7d565b60200101906001600160f81b03191690815f1a9053505050919050565b6002609754036120de5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107a9565b6002609755565b5f805f876001600160a01b0316635a1239c1866040518263ffffffff1660e01b815260040161211691815260200190565b5f60405180830381865afa158015612130573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121579190810190612ce0565b505060405163ae4e4e4560e01b81526001600160a01b0380841660048301529599509297509095505f945050918a169163ae4e4e4591506024015f60405180830381865afa1580156121ab573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121d29190810190612b4b565b604051635c164e5360e01b81529091505f903090635c164e5390612200908890889087908c90600401612d9f565b602060405180830381865afa15801561221b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061223f919061285b565b9050876001600160a01b0316632289511887878588866040518663ffffffff1660e01b81526004016122749493929190612d9f565b5f604051808303818588803b15801561228b575f80fd5b505af115801561229d573d5f803e3d5ffd5b505060405163186d954160e01b8152600481018b90526001600160a01b038e16935063186d9541925060240190505f604051808303815f87803b1580156122e2575f80fd5b505af11580156122f4573d5f803e3d5ffd5b50505050867fbef89de94658b7ef396ba7f9316542858c893c9011602906b1a2ad18d0a99c35866040516123289190612de9565b60405180910390a250505050505050505050565b6001609755565b61234d8282610ebb565b6107bc5761235a816123c2565b6123658360206123d4565b604051602001612376929190612dfb565b60408051601f198184030181529082905262461bcd60e51b82526107a991600401612de9565b5f54610100900460ff1661233c5760405162461bcd60e51b81526004016107a990612c87565b60606104f86001600160a01b03831660145b60605f6123e2836002612a7b565b6123ed906002612886565b67ffffffffffffffff81111561240557612405612ab2565b6040519080825280601f01601f19166020018201604052801561242f576020820181803683370190505b509050600360fc1b815f8151811061244957612449612b7d565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061247757612477612b7d565b60200101906001600160f81b03191690815f1a9053505f612499846002612a7b565b6124a4906001612886565b90505b600181111561251b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106124d8576124d8612b7d565b1a60f81b8282815181106124ee576124ee612b7d565b60200101906001600160f81b03191690815f1a90535060049490941c9361251481612e6f565b90506124a7565b5083156107365760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107a9565b5f6020828403121561257a575f80fd5b81356001600160e01b031981168114610736575f80fd5b5f80604083850312156125a2575f80fd5b50508035926020909101359150565b5f602082840312156125c1575f80fd5b5035919050565b6001600160a01b0381168114611d67575f80fd5b5f80604083850312156125ed575f80fd5b8235915060208301356125ff816125c8565b809150509250929050565b5f8083601f84011261261a575f80fd5b50813567ffffffffffffffff811115612631575f80fd5b602083019150836020828501011115612648575f80fd5b9250929050565b5f8060208385031215612660575f80fd5b823567ffffffffffffffff811115612676575f80fd5b6126828582860161260a565b90969095509350505050565b5f806040838503121561269f575f80fd5b82356126aa816125c8565b915060208301356125ff816125c8565b5f805f805f805f6080888a0312156126d0575f80fd5b873567ffffffffffffffff808211156126e7575f80fd5b6126f38b838c0161260a565b909950975060208a013591508082111561270b575f80fd5b6127178b838c0161260a565b909750955060408a013591508082111561272f575f80fd5b5061273c8a828b0161260a565b989b979a50959894979596606090950135949350505050565b5f805f60608486031215612767575f80fd5b8335612772816125c8565b95602085013595506040909401359392505050565b5f60208284031215612797575f80fd5b8135610736816125c8565b5f8083601f8401126127b2575f80fd5b50813567ffffffffffffffff8111156127c9575f80fd5b6020830191508360208260051b8501011115612648575f80fd5b5f805f805f80608087890312156127f8575f80fd5b863567ffffffffffffffff8082111561280f575f80fd5b61281b8a838b016127a2565b90985096506020890135915080821115612833575f80fd5b5061284089828a016127a2565b979a9699509760408101359660609091013595509350505050565b5f6020828403121561286b575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156104f8576104f8612872565b80516128a4816125c8565b919050565b5f602082840312156128b9575f80fd5b8151610736816125c8565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6128ff6020830184866128c4565b949350505050565b5f60208284031215612917575f80fd5b81518015158114610736575f80fd5b828482376fffffffffffffffffffffffffffffffff19919091169101908152601001919050565b5f5b8381101561296757818101518382015260200161294f565b50505f910152565b5f825161298081846020870161294d565b9190910192915050565b5f8085851115612998575f80fd5b838611156129a4575f80fd5b5050820193919092039150565b818382375f9101908152919050565b82848237909101908152602001919050565b838152818360208301375f910160200190815292915050565b5f84516129fc81846020890161294d565b67ffffffffffffffff199490941691909301908152601881019190915260380192915050565b5f60208284031215612a32575f80fd5b815167ffffffffffffffff81168114610736575f80fd5b818103818111156104f8576104f8612872565b5f82612a7657634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176104f8576104f8612872565b5f60208284031215612aa2575f80fd5b815160ff81168114610736575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112612ad5575f80fd5b815167ffffffffffffffff80821115612af057612af0612ab2565b604051601f8301601f19908116603f01168101908282118183101715612b1857612b18612ab2565b81604052838152866020858801011115612b30575f80fd5b612b4184602083016020890161294d565b9695505050505050565b5f60208284031215612b5b575f80fd5b815167ffffffffffffffff811115612b71575f80fd5b6128ff84828501612ac6565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112612ba6575f80fd5b83018035915067ffffffffffffffff821115612bc0575f80fd5b602001915036819003821315612648575f80fd5b5f8151808452612beb81602086016020860161294d565b601f01601f19169290920160200192915050565b608081525f612c1260808301888a6128c4565b8281036020840152612c258187896128c4565b90508281036040840152612c398186612bd4565b915050826060830152979650505050505050565b608081525f612c6060808301888a6128c4565b8281036020840152612c728188612bd4565b90508281036040840152612c398186886128c4565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b8051600681106128a4575f80fd5b5f805f805f805f80610100898b031215612cf8575f80fd5b612d0189612cd2565b9750602089015167ffffffffffffffff80821115612d1d575f80fd5b612d298c838d01612ac6565b985060408b0151915080821115612d3e575f80fd5b612d4a8c838d01612ac6565b975060608b0151915080821115612d5f575f80fd5b50612d6c8b828c01612ac6565b955050612d7b60808a01612899565b935060a0890151925060c0890151915060e089015190509295985092959890939650565b608081525f612db16080830187612bd4565b8281036020840152612dc38187612bd4565b90508281036040840152612dd78186612bd4565b91505082606083015295945050505050565b602081525f6107366020830184612bd4565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351612e3281601785016020880161294d565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612e6381602884016020880161294d565b01602801949350505050565b5f81612e7d57612e7d612872565b505f19019056fea26469706673582212204758ccfdf9a98ccf0999455c598ed27c9278ad8ad9d6696533e14b00e82825cc64736f6c63430008140033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CouldNotDetermineExcessETH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCommission\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ReceivedCollateralETH\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ReceivedInsuranceFund\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredETHToSSPMForDefectiveKeys\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorFee\",\"type\":\"uint256\"}],\"name\":\"UpdatedCommissionFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorDepositedOnBeaconChain\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorPreDepositedOnBeaconChain\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEPOSIT_NODE_BOND\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_COMMISSION_LIMIT_BIPS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_withdrawCredential\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_depositAmount\",\"type\":\"uint256\"}],\"name\":\"computeDepositDataRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"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\":[],\"name\":\"getSocializingPoolAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"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\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_operatorTotalKeys\",\"type\":\"uint256\"}],\"name\":\"preDepositOnBeaconChain\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"receiveRemainingCollateralETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"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\":\"uint256\",\"name\":\"_protocolFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_operatorFee\",\"type\":\"uint256\"}],\"name\":\"setCommissionFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeUserETHToBeaconChain\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", } // PermissionlessPoolABI is the input ABI used to generate the binding from. // Deprecated: Use PermissionlessPoolMetaData.ABI instead. var PermissionlessPoolABI = PermissionlessPoolMetaData.ABI -// PermissionlessPoolBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use PermissionlessPoolMetaData.Bin instead. -var PermissionlessPoolBin = PermissionlessPoolMetaData.Bin - -// DeployPermissionlessPool deploys a new Ethereum contract, binding an instance of PermissionlessPool to it. -func DeployPermissionlessPool(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *PermissionlessPool, error) { - parsed, err := PermissionlessPoolMetaData.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(PermissionlessPoolBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &PermissionlessPool{PermissionlessPoolCaller: PermissionlessPoolCaller{contract: contract}, PermissionlessPoolTransactor: PermissionlessPoolTransactor{contract: contract}, PermissionlessPoolFilterer: PermissionlessPoolFilterer{contract: contract}}, nil -} - // PermissionlessPool is an auto generated Go binding around an Ethereum contract. type PermissionlessPool struct { PermissionlessPoolCaller // Read-only binding to the contract @@ -781,27 +759,6 @@ func (_PermissionlessPool *PermissionlessPoolTransactorSession) GrantRole(role [ return _PermissionlessPool.Contract.GrantRole(&_PermissionlessPool.TransactOpts, role, account) } -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _admin, address _staderConfig) returns() -func (_PermissionlessPool *PermissionlessPoolTransactor) Initialize(opts *bind.TransactOpts, _admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { - return _PermissionlessPool.contract.Transact(opts, "initialize", _admin, _staderConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _admin, address _staderConfig) returns() -func (_PermissionlessPool *PermissionlessPoolSession) Initialize(_admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { - return _PermissionlessPool.Contract.Initialize(&_PermissionlessPool.TransactOpts, _admin, _staderConfig) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _admin, address _staderConfig) returns() -func (_PermissionlessPool *PermissionlessPoolTransactorSession) Initialize(_admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { - return _PermissionlessPool.Contract.Initialize(&_PermissionlessPool.TransactOpts, _admin, _staderConfig) -} - // PreDepositOnBeaconChain is a paid mutator transaction binding the contract method 0xeda0ae12. // // Solidity: function preDepositOnBeaconChain(bytes[] _pubkey, bytes[] _preDepositSignature, uint256 _operatorId, uint256 _operatorTotalKeys) payable returns() diff --git a/stader-lib/contracts/stader-config.go b/stader-lib/contracts/stader-config.go index 2b966e148..973a8503a 100644 --- a/stader-lib/contracts/stader-config.go +++ b/stader-lib/contracts/stader-config.go @@ -31,35 +31,13 @@ var ( // StaderConfigMetaData contains all meta data concerning the StaderConfig contract. var StaderConfigMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidLimits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMaxDepositValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMaxWithdrawValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMinDepositValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMinWithdrawValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SetConstant\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SetVariable\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUCTION_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DECIMALS\",\"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\":\"ETHX_SUPPLY_POR_FEED\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_BALANCE_POR_FEED\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_DEPOSIT_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_PER_NODE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETHx\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FULL_DEPOSIT_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_DEPOSIT_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_WITHDRAW_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_DEPOSIT_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_WITHDRAW_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_EL_REWARD_VAULT_IMPLEMENTATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_MAX_NAME_LENGTH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_REWARD_COLLECTOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PENALTY_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_NODE_REGISTRY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_SOCIALIZING_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_NODE_REGISTRY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_SOCIALIZING_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_SELECTOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_UTILS\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRE_DEPOSIT_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REWARD_THRESHOLD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SD_COLLATERAL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOCIALIZING_POOL_CYCLE_DURATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_INSURANCE_FUND\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_ORACLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_TREASURY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKE_POOL_MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOTAL_FEE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"USER_WITHDRAW_MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_FACTORY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WITHDRAWN_KEYS_BATCH_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuctionContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDecimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHBalancePORFeedProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHDepositContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHXSupplyPORFeedProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHxToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFullDepositSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxDepositAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxWithdrawAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinBlockDelayToFinalizeWithdrawRequest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinDepositAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinWithdrawAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeELRewardVaultImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperatorMaxNameLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperatorRewardsCollector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPenaltyContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedSocializingPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessSocializingPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSelector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolUtils\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPreDepositSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsThreshold\",\"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\":[],\"name\":\"getSDCollateral\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSocializingPoolCycleDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSocializingPoolOptInCoolingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderInsuranceFund\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakePoolManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakedEthPerNode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUserWithdrawManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidatorWithdrawalVaultImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawnKeyBatchSize\",\"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\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ethDepositContract\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"onlyManagerRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"onlyOperatorRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_contractName\",\"type\":\"bytes32\"}],\"name\":\"onlyStaderContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"updateAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_auctionContract\",\"type\":\"address\"}],\"name\":\"updateAuctionContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethBalanceProxy\",\"type\":\"address\"}],\"name\":\"updateETHBalancePORFeedProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethXSupplyProxy\",\"type\":\"address\"}],\"name\":\"updateETHXSupplyPORFeedProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethX\",\"type\":\"address\"}],\"name\":\"updateETHxToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDepositAmount\",\"type\":\"uint256\"}],\"name\":\"updateMaxDepositAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxWithdrawAmount\",\"type\":\"uint256\"}],\"name\":\"updateMaxWithdrawAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minBlockDelay\",\"type\":\"uint256\"}],\"name\":\"updateMinBlockDelayToFinalizeWithdrawRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minDepositAmount\",\"type\":\"uint256\"}],\"name\":\"updateMinDepositAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minWithdrawAmount\",\"type\":\"uint256\"}],\"name\":\"updateMinWithdrawAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeELRewardVaultImpl\",\"type\":\"address\"}],\"name\":\"updateNodeELRewardImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operatorRewardsCollector\",\"type\":\"address\"}],\"name\":\"updateOperatorRewardsCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_penaltyContract\",\"type\":\"address\"}],\"name\":\"updatePenaltyContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedNodeRegistry\",\"type\":\"address\"}],\"name\":\"updatePermissionedNodeRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedPool\",\"type\":\"address\"}],\"name\":\"updatePermissionedPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedSocializePool\",\"type\":\"address\"}],\"name\":\"updatePermissionedSocializingPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessNodeRegistry\",\"type\":\"address\"}],\"name\":\"updatePermissionlessNodeRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessPool\",\"type\":\"address\"}],\"name\":\"updatePermissionlessPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessSocializePool\",\"type\":\"address\"}],\"name\":\"updatePermissionlessSocializingPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolSelector\",\"type\":\"address\"}],\"name\":\"updatePoolSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolUtils\",\"type\":\"address\"}],\"name\":\"updatePoolUtils\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardsThreshold\",\"type\":\"uint256\"}],\"name\":\"updateRewardsThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sdCollateral\",\"type\":\"address\"}],\"name\":\"updateSDCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_socializingPoolCycleDuration\",\"type\":\"uint256\"}],\"name\":\"updateSocializingPoolCycleDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_SocializePoolOptInCoolingPeriod\",\"type\":\"uint256\"}],\"name\":\"updateSocializingPoolOptInCoolingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderInsuranceFund\",\"type\":\"address\"}],\"name\":\"updateStaderInsuranceFund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderOracle\",\"type\":\"address\"}],\"name\":\"updateStaderOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderToken\",\"type\":\"address\"}],\"name\":\"updateStaderToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderTreasury\",\"type\":\"address\"}],\"name\":\"updateStaderTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_stakePoolManager\",\"type\":\"address\"}],\"name\":\"updateStakePoolManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userWithdrawManager\",\"type\":\"address\"}],\"name\":\"updateUserWithdrawManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validatorWithdrawalVaultImpl\",\"type\":\"address\"}],\"name\":\"updateValidatorWithdrawalVaultImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vaultFactory\",\"type\":\"address\"}],\"name\":\"updateVaultFactory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateWithdrawnKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b506200001b62000021565b620000e0565b5f54610100900460ff16156200008d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161015620000de575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61347a80620000ee5f395ff3fe608060405234801561000f575f80fd5b506004361061077a575f3560e01c8063686a8b67116103d8578063aa9537951161020b578063dde63e8f1161012a578063f0141d84116100bf578063f6c278c11161008f578063f6c278c114611d19578063f83c778714611d40578063fa71fcbb14611d53578063ff387f3a14611da2578063ff4f354614611df1575f80fd5b8063f0141d8414611c67578063f122961f14611cb6578063f4914d3314611cdd578063f63718e714611d06575f80fd5b8063e4f59b6c116100fa578063e4f59b6c14611b7d578063e7bdba3214611b90578063e8fe187314611bb7578063ecf170a814611c0f575f80fd5b8063dde63e8f14611a93578063defd024d14611aba578063e069f71414611b12578063e2f273bd14611b6a575f80fd5b8063bbb99bb5116101a0578063ca78360c11610170578063ca78360c146119d9578063cc45dabe146119ec578063d2cee8ba14611a44578063d547741f14611a80575f80fd5b8063bbb99bb514611965578063bedcb34c14611978578063c20573c11461199f578063c60470d3146119b2575f80fd5b8063b549dbff116101db578063b549dbff146118d3578063b5cfee6c146118e6578063b68578441461193e578063b9894a1114611952575f80fd5b8063aa953795146117eb578063b11c699d14611843578063b31239221461186a578063b479a51714611897575f80fd5b8063841b83b3116102f7578063983d27371161028c578063a217fddf1161025c578063a217fddf14611752578063a469e24714611759578063a53bddd6146117b1578063aa2f56c7146117d8575f80fd5b8063983d27371461166857806398c359271461168f5780639ca76b73146116a2578063a0b4079f146116fa575f80fd5b80638910115c116102c75780638910115c146115925780638a4cfb58146115ea5780638f8b3867146115fd57806391d1485414611655575f80fd5b8063841b83b31461151d578063847802051461154457806385e2fcd31461155757806388993d8b1461157e575f80fd5b806372ce78b01161036d5780637a87fa0b1161033d5780637a87fa0b146114815780637ae316d0146114a85780637b4cd7ec146114f7578063831485931461150a575f80fd5b806372ce78b0146113b457806377e8a0c31461140c57806379175a7414611433578063792c8cc31461145a575f80fd5b80636e0fddfc116103a85780636e0fddfc146112fa5780636e9960c31461134957806372195b3e1461138e578063723b732c146113a1575f80fd5b8063686a8b67146112105780636870bb2b146112375780636ccb9d701461124a5780636d28ad1c146112a2575f80fd5b80632f2ff15d116105b0578063489ed651116104cf5780635b5961fc116104645780636176bbde116104345780636176bbde1461119b5780636240fb9c146111af57806363db7eae146111c257806367dcf134146111e9575f80fd5b80635b5961fc1461110a5780635b9cc8b11461111d5780635be6ce69146111305780635edc686e14611143575f80fd5b80635455e4721161049f5780635455e4721461103c5780635458a106146110635780635726a356146110bb578063572c686a146110f7575f80fd5b8063489ed65114610f965780634c34a98214610fee57806352112bd31461100257806353f5713b14611029575f80fd5b8063384002a211610545578063403efe7f11610515578063403efe7f14610f355780634191e0fe14610f4857806344ba0ea214610f6f578063485cc95514610f83575f80fd5b8063384002a214610ead5780633871d0f114610ed45780633b6bcca014610efb5780633c128dad14610f22575f80fd5b806336568abe1161058057806336568abe14610e0857806336854d6314610e1b578063368f9d1714610e4257806336c157f414610e55575f80fd5b80632f2ff15d14610d4f578063326a16a314610d6257806334d17d7414610d9e578063360374a414610db1575f80fd5b806318bcb2841161069c578063248a9ca3116106315780632a9cc2c4116106015780632a9cc2c414610c515780632ca03f6614610c785780632e0f262514610cd05780632ec5e01814610cf7575f80fd5b8063248a9ca314610bb05780632651644c14610bd2578063278671bb14610be55780632a0acc6a14610c3d575f80fd5b80631c55cccd1161066c5780631c55cccd14610b135780631ca197a514610b3a5780631de03db814610b895780631ea30fef14610b9c575f80fd5b806318bcb28414610a595780631af0fff314610ab15780631b2df85014610ad85780631bf6a41c14610aec575f80fd5b8063103f290711610712578063121669f1116106e2578063121669f1146109a857806314e1b8fd146109bb578063152a91da146109e457806318829fc314610a0a575f80fd5b8063103f2907146108f85780631049e32e1461091f57806310deba2b146109325780631202007514610981575f80fd5b8063088ee72d1161074d578063088ee72d1461083f5780630945d42c146108525780630a3fbd9a146108655780630bdf3166146108d1575f80fd5b806301ffc9a71461077e5780630430246e146107a6578063047cb439146107db57806308297645146107f0575b5f80fd5b61079161078c3660046130d5565b611e04565b60405190151581526020015b60405180910390f35b6107cd7f9b1ae66636378b5626322a52e22518dd40bb04881cf0440ed16a20c0f902b24281565b60405190815260200161079d565b6107ee6107e9366004613117565b611e3a565b005b7f9b1ae66636378b5626322a52e22518dd40bb04881cf0440ed16a20c0f902b2425f5260976020527f2b5f44404b80fc874d00ce3803444dc1d8415bef002ea5e3d4c6a1fc229b361b546107cd565b6107ee61084d366004613117565b611e72565b6107ee610860366004613130565b611ea6565b7fc5b1a6a0b843563e6a17ca90bc59d2315c523be427d0c9c2ba08d77ced4f46b15f52609a6020527f93bda0178f178a956e1154aad6f6d04aca130dc29bb626bd6774e853c8c9f354546001600160a01b03165b6040516001600160a01b03909116815260200161079d565b6107cd7f3e4ded42f360c2e6b1251d584085ae1d9aa9cbed18687fac6b6aef8eed1c5ad381565b6107cd7f8d4341681b282735dd0d55670ff8e0ad68a80cbfc2cee847065e9f771470f88f81565b6107ee61092d366004613117565b611edc565b7f59b5f464ec5829246a81f005456c8cb714ee224aea800742e2dae497263e46695f5260976020527ff1d631be95f382e871541957d68e9595b265874c488308836f37d0f22a9fbae9546107cd565b6107cd7f4c9466ca1bf288a7334a7494f09a0acc38ee31628eaf8c68b574b9f0ec22a9c181565b6107ee6109b6366004613117565b611f10565b5f805160206133458339815191525f5260986020525f805160206133e5833981519152546107cd565b6107cd7e665c1b06e0667c56a1ca1706b7573435d1b9162c6327b5d0ea1daeb491ad0d81565b7f46b41285bb7b8513ce3a9d95cdf6916699fb00b47326e8d3850be1b6186e03495f5260986020527f4d508419d31c3547aff85909df3c1fcaa249c360d3c9fa4e4f9e9c899cebbedc546107cd565b7f8d4341681b282735dd0d55670ff8e0ad68a80cbfc2cee847065e9f771470f88f5f52609a6020527f510a692d092451633b86b6d5ebd49dd58b5ea01b6d0783a379a8169a08baac9f546001600160a01b03166108b9565b6107cd7fe5240448c78dfcff5bda4e4eed69ba9635df15d79da0e8a4cf889217106fa45b81565b6107cd5f8051602061330583398151915281565b6107cd7f29384ec8473b541e7a7850226a4d1906a700f14cc394266ee08800ba62dc3af981565b6107cd7fbd34382cd421c5250595893a4ed6cdb2125e6be7d5e0a9dbc469de5d583adfcf81565b7f3c6dcff840f36f9818a73b67d9d00197362f63687bd52e3c277bd0ffb30dde335f5260986020527f9e4fbca7af476428837bb1c0659b29a978bd5be1038b9848cfd6837f97c0c036546107cd565b6107ee610b97366004613117565b611f44565b6107cd5f8051602061342583398151915281565b6107cd610bbe366004613130565b5f9081526065602052604090206001015490565b6107ee610be0366004613117565b611f78565b7f5be667ef1f4c6c279e2aa7e62595a1045043db6a43145cb438c6d36e7a3c3ed85f52609a6020527f3f1c1b82007b7a87a83473281505b32822fde2464206a16635328330125264a8546001600160a01b03166108b9565b6107cd5f805160206133c583398151915281565b6107cd7fb134afa3abad633a84ab2d33dd5171f2b371e38b0f7bca001383aaf08ed6d2d181565b7fb134afa3abad633a84ab2d33dd5171f2b371e38b0f7bca001383aaf08ed6d2d15f52609a6020527fb5c61d48a513a298b438559aede2612ccf11b8fe4c725b0f159efab727297353546001600160a01b03166108b9565b6107cd7f08593985ae1bebfb02f6c30105edffb176a6d87c9fad54c434bf9b58f67e81b681565b7f3d88d1233771c5c30791fb6805b7f91424dae1e5a68a57da846ca7ff83c640295f52609a6020527f018f2aef664aeeb1561d5a44d318b67f16f75b697bf95eeabc62c48d36323e72546001600160a01b03166108b9565b6107ee610d5d366004613147565b611fac565b5f805160206133258339815191525f5260986020527fd179a4a9329ee39fba707fd91c699ec0f088afc56731eb89ff424b873ac70844546107cd565b6107ee610dac366004613117565b611fd5565b7e665c1b06e0667c56a1ca1706b7573435d1b9162c6327b5d0ea1daeb491ad0d5f52609a6020527fe107fed811895732bef768006b62e8ce98d10a188d78cab697a91a201b5e2404546001600160a01b03166108b9565b6107ee610e16366004613147565b612009565b6107cd7ff935b8bf66b325637ad32ca875b588849cf4026791b79b4dc20623cd3dd36e2081565b6107ee610e50366004613117565b612088565b7f8e96355022bb9b9f4d9d4e01fe2b58f45e78549c982c401c96f75f33c5de457e5f52609a6020527fe74d6d5cda9d4a34ee9d4950f99c58c26803c1cf17dbd9d3e9f82fcea7feb01e546001600160a01b03166108b9565b6107cd7f95bf18d68834a11aaae7b73ff6037326f163a81a7b5ea80cba96856ce2284fbd81565b6107cd7f9f919a2294d86593fbcec81ea71aa683cec51c78771c642f8894ba8f3949705281565b6107cd7fc5b1a6a0b843563e6a17ca90bc59d2315c523be427d0c9c2ba08d77ced4f46b181565b6107ee610f30366004613117565b6120bc565b6107ee610f43366004613117565b6120f0565b6107cd7fa4083e7a78dd898def03c51ce199cb4286b8828be4f6f46e04aec6176196747181565b6107cd5f8051602061332583398151915281565b6107ee610f91366004613171565b612124565b7f690795c57e13eaf2526f76202b6799e9afdb069afca1e572f693953d013569d85f52609a6020527f38e84315fdfc8f1b16767d9fd043998a9ff60cfbcb629d8f48542b4e3ee87096546001600160a01b03166108b9565b6107cd5f8051602061338583398151915281565b6107cd7f602490b12960e59ddb584affd1da6cd5692f4455c1ba0cc4e865af81e111ebe281565b610791611037366004613117565b612444565b6107cd7f59b5f464ec5829246a81f005456c8cb714ee224aea800742e2dae497263e466981565b7fdb5d1c2a9350ca010dcdf3953da11a9e8f7c5e2918cdfa65500e84e7fd4fde7d5f52609a6020527f642611b82cedca4c0a5510e3234bea9632cc7eb6e135d12e2ef4f8c68dc23add546001600160a01b03166108b9565b5f805160206133858339815191525f5260986020527ffcacc1044a5a1b4eb9c058396306426a857813d37a4fb6ccf5a3adde30e0c914546107cd565b6107ee611105366004613130565b61246f565b6107ee611118366004613117565b6124b0565b6107ee61112b366004613130565b6124e4565b6107ee61113e366004613117565b612505565b7fa4083e7a78dd898def03c51ce199cb4286b8828be4f6f46e04aec617619674715f52609a6020527f863e03b3878962463f3668c14c10a4aeeabb7baa9c7a9b990796f179109d8692546001600160a01b03166108b9565b6107cd5f805160206133a583398151915281565b6107916111bd366004613117565b612539565b6107cd7f33271b56873d8abb908de4853f90a8a0ef8829548ec0bf6c298feed3917c50a281565b6107cd7ff822b1f0c3b886ce1cdf1c2a5317844145470db33b02c63cae4813f8c9b2dc1781565b6107cd7fc54a7590fe6738d7a81f393c1cf5ab3e577c91781037d93a5a9f5ce44f19eb5181565b6107ee611245366004613130565b612551565b7fd7e49a298cb2719de62e5df1024257eed316db6337361b3a30d56a75324046075f52609a6020527f294ce448c5d68d362948bb2b78c5571986464589b6911cc804ca52d7abbad2e3546001600160a01b03166108b9565b7fbd34382cd421c5250595893a4ed6cdb2125e6be7d5e0a9dbc469de5d583adfcf5f52609a6020527f3195564ffd56571794a8c7ffc14e3d393758b399f23318e874273db13addfdfe546001600160a01b03166108b9565b7fc54a7590fe6738d7a81f393c1cf5ab3e577c91781037d93a5a9f5ce44f19eb515f5260986020527f4d985796191711ecc0d75f056488220f1f755856cdfe3ebd45de3537c37b9b50546107cd565b5f805160206133c58339815191525f5260996020527f15be86566e203c1f41b9ae149d9fbb01b2c14f503704423d739a6e3d2db5a9ee546001600160a01b03166108b9565b6107ee61139c366004613117565b612592565b6107ee6113af366004613130565b6125c6565b7f8567f5af844d68168987760a7ce1762804b9de703165fc50ce4fa85246016c915f5260996020527f2c1f6cfa08e101d854b66353df53d6eb32e981bfc1a8351f458fd54b64cfc181546001600160a01b03166108b9565b6107cd7f84b42b3d5e6851893d4418c6ebc9a4727e78afdf84e73674c8b9c1c2b1904e2d81565b6107cd7f5be667ef1f4c6c279e2aa7e62595a1045043db6a43145cb438c6d36e7a3c3ed881565b6107cd7f876943525608da6d95be5925fe6c4fe80e8622c8a76e7414f80e8ba210e0711c81565b6107cd7f76d62e541b8d573110ca3eb9003e96426f530422a76712d1356f6c6ce50541ca81565b7f33271b56873d8abb908de4853f90a8a0ef8829548ec0bf6c298feed3917c50a25f5260976020527f799f922a2554690a852ce3427a174a9d0f64f94f53730bd0c6e1e1fdc54799ae546107cd565b6107ee611505366004613117565b6125e7565b6107ee611518366004613117565b612628565b6107cd7f8567f5af844d68168987760a7ce1762804b9de703165fc50ce4fa85246016c9181565b6107ee611552366004613130565b61265c565b6107cd7fd7e49a298cb2719de62e5df1024257eed316db6337361b3a30d56a753240460781565b6107cd5f8051602061336583398151915281565b7f29384ec8473b541e7a7850226a4d1906a700f14cc394266ee08800ba62dc3af95f52609a6020527f249a87d52af73222d4a479ebe40b904ebabf543d4706240658e6092ca9388c26546001600160a01b03166108b9565b6107ee6115f8366004613130565b61268a565b7f84b42b3d5e6851893d4418c6ebc9a4727e78afdf84e73674c8b9c1c2b1904e2d5f52609a6020527f492656d26f3accf1cea0a783c131178deb1c8733d9c679e5cecde8df27a9ad95546001600160a01b03166108b9565b610791611663366004613147565b6126cb565b6107cd7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c81565b6107ee61169d366004613117565b6126f5565b7f76d62e541b8d573110ca3eb9003e96426f530422a76712d1356f6c6ce50541ca5f52609a6020527f86012a00795dbb89a313ebfe1e3a458a84ce87cdb7c6a7971caf999119513627546001600160a01b03166108b9565b7f602490b12960e59ddb584affd1da6cd5692f4455c1ba0cc4e865af81e111ebe25f52609a6020527fd54531c6bba5beed207277daa8e0e65bdfb6aece3f974fb0394154eb989d1d42546001600160a01b03166108b9565b6107cd5f81565b7f4c9466ca1bf288a7334a7494f09a0acc38ee31628eaf8c68b574b9f0ec22a9c15f52609a6020527f2df8b6a0a0cdef82de21edc971a252888647231024af6c12c533010687315b1f546001600160a01b03166108b9565b6107cd7f3d88d1233771c5c30791fb6805b7f91424dae1e5a68a57da846ca7ff83c6402981565b6107ee6117e6366004613117565b612729565b7f5c00ec259bace293b50174e499c413ca897b4bcb54ed468b7e6bade51c6a9f965f52609a6020527fcda3409ebc466b6ac691341dcf169fdb28e448f6cf860239292340843aa52984546001600160a01b03166108b9565b6107cd7f8e96355022bb9b9f4d9d4e01fe2b58f45e78549c982c401c96f75f33c5de457e81565b610791611878366004613199565b5f908152609a60205260409020546001600160a01b0390811691161490565b5f805160206133658339815191525f5260986020527f72873426992e590ffa79a15175a7f2c8cf191cf402b7484af189cd125376fcdc546107cd565b6107ee6118e1366004613117565b61275d565b7fe5240448c78dfcff5bda4e4eed69ba9635df15d79da0e8a4cf889217106fa45b5f52609a6020527fcce26741946f801b25ce3c49451d2dd729b689d4d0d23ea57849f6c666bb5ee3546001600160a01b03166108b9565b6107cd5f8051602061334583398151915281565b6107ee611960366004613117565b612791565b6107ee611973366004613130565b6127c5565b6107cd7f3c6dcff840f36f9818a73b67d9d00197362f63687bd52e3c277bd0ffb30dde3381565b6107ee6119ad366004613117565b612806565b6107cd7f690795c57e13eaf2526f76202b6799e9afdb069afca1e572f693953d013569d881565b6107ee6119e7366004613117565b61283a565b7f09dfa94a9be22222b511ecf509f49718fc08fbe3ada37a44d2022489eca3b44c5f52609b6020527fe98ed444639fcf7afa9e33a4ea67ac4155aa97d88f546111c8d1357c98dbca00546001600160a01b03166108b9565b5f805160206133a58339815191525f5260986020527f0ccceacf55cd457ff25dca300775a2cb43db2c0b890d3ee063f4abba210c504f546107cd565b6107ee611a8e366004613147565b61286e565b6107cd7fdb5d1c2a9350ca010dcdf3953da11a9e8f7c5e2918cdfa65500e84e7fd4fde7d81565b7f9f919a2294d86593fbcec81ea71aa683cec51c78771c642f8894ba8f394970525f52609a6020527f99c8bd240e5bd2ee897b6a14ca3ca43a06f489dad5e38985ad188e67459dc6d7546001600160a01b03166108b9565b7f95bf18d68834a11aaae7b73ff6037326f163a81a7b5ea80cba96856ce2284fbd5f52609b6020527f20c8b2f4826823ac4cd62278270e8be9c7f63b9fe22e1f148f5369ec26bc69f4546001600160a01b03166108b9565b6107ee611b78366004613117565b612892565b6107ee611b8b366004613117565b61290a565b6107cd7f46b41285bb7b8513ce3a9d95cdf6916699fb00b47326e8d3850be1b6186e034981565b7f3e4ded42f360c2e6b1251d584085ae1d9aa9cbed18687fac6b6aef8eed1c5ad35f52609a6020527fe298efc0f606c3be77912795055e173991a2c395633d4b0a06597a13b46e0c0b546001600160a01b03166108b9565b7ff935b8bf66b325637ad32ca875b588849cf4026791b79b4dc20623cd3dd36e205f52609a6020527f18d210dd586fe31598c73b0131261a1f7a576051e2667bbf5a4f8a01cf2f1392546001600160a01b03166108b9565b7f08593985ae1bebfb02f6c30105edffb176a6d87c9fad54c434bf9b58f67e81b65f5260976020527fb645ae2edae7c0716931b638cd9631a05f9a39fec3f15294f7f3af49f2f51ca8546107cd565b6107cd7f5c00ec259bace293b50174e499c413ca897b4bcb54ed468b7e6bade51c6a9f9681565b5f805160206134258339815191525f5260986020525f80516020613405833981519152546107cd565b6107ee611d14366004613117565b61293e565b6107cd7f09dfa94a9be22222b511ecf509f49718fc08fbe3ada37a44d2022489eca3b44c81565b6107ee611d4e366004613117565b612971565b7f876943525608da6d95be5925fe6c4fe80e8622c8a76e7414f80e8ba210e0711c5f5260976020527fea561c0677f20715a0e74899b0381a0fa1265a58e9e02fb4a5a398d87555d1fe546107cd565b7ff822b1f0c3b886ce1cdf1c2a5317844145470db33b02c63cae4813f8c9b2dc175f5260976020527f9863915096f3522486953e53c4b97560d72679216b36fd98b4bdd4eca3a01eaa546107cd565b6107ee611dff366004613130565b6129a5565b5f6001600160e01b03198216637965db0b60e01b1480611e3457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f611e44816129c6565b611e6e7fdb5d1c2a9350ca010dcdf3953da11a9e8f7c5e2918cdfa65500e84e7fd4fde7d836129d3565b5050565b5f611e7c816129c6565b611e6e7ff935b8bf66b325637ad32ca875b588849cf4026791b79b4dc20623cd3dd36e20836129d3565b5f80516020613305833981519152611ebd816129c6565b611ed45f8051602061338583398151915283612a42565b611e6e612a89565b5f611ee6816129c6565b611e6e7fc5b1a6a0b843563e6a17ca90bc59d2315c523be427d0c9c2ba08d77ced4f46b1836129d3565b5f611f1a816129c6565b611e6e7f8e96355022bb9b9f4d9d4e01fe2b58f45e78549c982c401c96f75f33c5de457e836129d3565b5f611f4e816129c6565b611e6e7f5be667ef1f4c6c279e2aa7e62595a1045043db6a43145cb438c6d36e7a3c3ed8836129d3565b5f611f82816129c6565b611e6e7fd7e49a298cb2719de62e5df1024257eed316db6337361b3a30d56a7532404607836129d3565b5f82815260656020526040902060010154611fc6816129c6565b611fd08383612c3c565b505050565b5f611fdf816129c6565b611e6e7f5c00ec259bace293b50174e499c413ca897b4bcb54ed468b7e6bade51c6a9f96836129d3565b6001600160a01b038116331461207e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b611e6e8282612cc1565b5f612092816129c6565b611e6e7f3d88d1233771c5c30791fb6805b7f91424dae1e5a68a57da846ca7ff83c64029836129d3565b5f6120c6816129c6565b611e6e7fa4083e7a78dd898def03c51ce199cb4286b8828be4f6f46e04aec61761967471836129d3565b5f6120fa816129c6565b611e6e7f690795c57e13eaf2526f76202b6799e9afdb069afca1e572f693953d013569d8836129d3565b5f54610100900460ff161580801561214257505f54600160ff909116105b8061215b5750303b15801561215b57505f5460ff166001145b6121be5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401612075565b5f805460ff1916600117905580156121df575f805461ff0019166101001790555b6121e883612d27565b6121f182612d27565b6121f9612d4e565b61222c7ff822b1f0c3b886ce1cdf1c2a5317844145470db33b02c63cae4813f8c9b2dc176801bc16d674ec800000612db8565b61225e7f9b1ae66636378b5626322a52e22518dd40bb04881cf0440ed16a20c0f902b242670de0b6b3a7640000612db8565b6122917f876943525608da6d95be5925fe6c4fe80e8622c8a76e7414f80e8ba210e0711c6801ae361fc1451c0000612db8565b6122bd7f33271b56873d8abb908de4853f90a8a0ef8829548ec0bf6c298feed3917c50a2612710612db8565b6122ef7f08593985ae1bebfb02f6c30105edffb176a6d87c9fad54c434bf9b58f67e81b6670de0b6b3a7640000612db8565b61231a7f59b5f464ec5829246a81f005456c8cb714ee224aea800742e2dae497263e466960ff612db8565b6123375f80516020613425833981519152655af3107a4000612a42565b6123585f8051602061338583398151915269021e19e0c9bab2400000612a42565b6123755f80516020613345833981519152655af3107a4000612a42565b6123965f8051602061332583398151915269021e19e0c9bab2400000612a42565b6123ae5f805160206133658339815191526032612a42565b6123c75f805160206133a5833981519152610258612a42565b6123f17f84b42b3d5e6851893d4418c6ebc9a4727e78afdf84e73674c8b9c1c2b1904e2d836129d3565b6123fb5f84612c3c565b8015611fd0575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b5f611e347f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c836126cb565b5f80516020613305833981519152612486816129c6565b611e6e7f46b41285bb7b8513ce3a9d95cdf6916699fb00b47326e8d3850be1b6186e034983612a42565b5f6124ba816129c6565b611e6e7fbd34382cd421c5250595893a4ed6cdb2125e6be7d5e0a9dbc469de5d583adfcf836129d3565b5f6124ee816129c6565b611ed45f8051602061332583398151915283612a42565b5f61250f816129c6565b611e6e7f3e4ded42f360c2e6b1251d584085ae1d9aa9cbed18687fac6b6aef8eed1c5ad3836129d3565b5f611e345f80516020613305833981519152836126cb565b5f80516020613305833981519152612568816129c6565b611e6e7f3c6dcff840f36f9818a73b67d9d00197362f63687bd52e3c277bd0ffb30dde3383612a42565b5f61259c816129c6565b611e6e7fb134afa3abad633a84ab2d33dd5171f2b371e38b0f7bca001383aaf08ed6d2d1836129d3565b5f6125d0816129c6565b611e6e5f805160206133a583398151915283612a42565b5f805160206133058339815191526125fe816129c6565b611e6e7f8567f5af844d68168987760a7ce1762804b9de703165fc50ce4fa85246016c9183612dff565b5f612632816129c6565b611e6e7f95bf18d68834a11aaae7b73ff6037326f163a81a7b5ea80cba96856ce2284fbd83612e66565b5f80516020613305833981519152612673816129c6565b611ed45f8051602061342583398151915283612a42565b5f805160206133058339815191526126a1816129c6565b611e6e7fc54a7590fe6738d7a81f393c1cf5ab3e577c91781037d93a5a9f5ce44f19eb5183612a42565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f6126ff816129c6565b611e6e7f8d4341681b282735dd0d55670ff8e0ad68a80cbfc2cee847065e9f771470f88f836129d3565b5f612733816129c6565b611e6e7fe5240448c78dfcff5bda4e4eed69ba9635df15d79da0e8a4cf889217106fa45b836129d3565b5f612767816129c6565b611e6e7f602490b12960e59ddb584affd1da6cd5692f4455c1ba0cc4e865af81e111ebe2836129d3565b5f61279b816129c6565b611e6e7f09dfa94a9be22222b511ecf509f49718fc08fbe3ada37a44d2022489eca3b44c83612e66565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c6127ef816129c6565b611e6e5f8051602061336583398151915283612a42565b5f612810816129c6565b611e6e7f76d62e541b8d573110ca3eb9003e96426f530422a76712d1356f6c6ce50541ca836129d3565b5f612844816129c6565b611e6e7f9f919a2294d86593fbcec81ea71aa683cec51c78771c642f8894ba8f39497052836129d3565b5f82815260656020526040902060010154612888816129c6565b611fd08383612cc1565b5f61289c816129c6565b5f805160206133c58339815191525f90815260996020527f15be86566e203c1f41b9ae149d9fbb01b2c14f503704423d739a6e3d2db5a9ee546001600160a01b0316906128e99084612c3c565b6129005f805160206133c583398151915284612dff565b611fd05f82612cc1565b5f612914816129c6565b611e6e7f4c9466ca1bf288a7334a7494f09a0acc38ee31628eaf8c68b574b9f0ec22a9c1836129d3565b5f612948816129c6565b611e6e7e665c1b06e0667c56a1ca1706b7573435d1b9162c6327b5d0ea1daeb491ad0d836129d3565b5f61297b816129c6565b611e6e7f29384ec8473b541e7a7850226a4d1906a700f14cc394266ee08800ba62dc3af9836129d3565b5f6129af816129c6565b611ed45f8051602061334583398151915283612a42565b6129d08133612ecd565b50565b6129dc81612d27565b5f828152609a602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251858152918201527f5de40a806536a2029221dac2c8887ac9f11952fcc1ed3d7cfb4476dd5259b74091015b60405180910390a15050565b5f8281526098602090815260409182902083905581518481529081018390527f9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c465816309101612a36565b5f805160206134258339815191525f5260986020525f805160206134058339815191525415801590612add57505f805160206133458339815191525f5260986020525f805160206133e58339815191525415155b8015612b2d575060986020527ffcacc1044a5a1b4eb9c058396306426a857813d37a4fb6ccf5a3adde30e0c914545f805160206134258339815191525f525f805160206134058339815191525411155b8015612b7d575060986020527fd179a4a9329ee39fba707fd91c699ec0f088afc56731eb89ff424b873ac70844545f805160206133458339815191525f525f805160206133e58339815191525411155b8015612bba575060986020525f80516020613405833981519152545f805160206133458339815191525f525f805160206133e58339815191525411155b8015612c1d575060986020527ffcacc1044a5a1b4eb9c058396306426a857813d37a4fb6ccf5a3adde30e0c914545f805160206133258339815191525f527fd179a4a9329ee39fba707fd91c699ec0f088afc56731eb89ff424b873ac708445410155b612c3a5760405163e773e0a960e01b815260040160405180910390fd5b565b612c4682826126cb565b611e6e575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612c7d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612ccb82826126cb565b15611e6e575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0381166129d05760405163d92e233d60e01b815260040160405180910390fd5b5f54610100900460ff16612c3a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401612075565b5f8281526097602090815260409182902083905581518481529081018390527f9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c465816309101612a36565b612e0881612d27565b5f8281526099602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251858152918201527fcbdd341876786c7241ad12a5ce5ea46739a4ce7b1587d0c216dfa655a98e50a69101612a36565b612e6f81612d27565b5f828152609b602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251858152918201527f19aab10c6a9f5d648eaa15e2d515f8dfda570ee221e7c8cb9dc07694e68005bc9101612a36565b612ed782826126cb565b611e6e57612ee481612f26565b612eef836020612f38565b604051602001612f009291906131e3565b60408051601f198184030181529082905262461bcd60e51b825261207591600401613257565b6060611e346001600160a01b03831660145b60605f612f4683600261329d565b612f519060026132b4565b67ffffffffffffffff811115612f6957612f696132c7565b6040519080825280601f01601f191660200182016040528015612f93576020820181803683370190505b509050600360fc1b815f81518110612fad57612fad6132db565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110612fdb57612fdb6132db565b60200101906001600160f81b03191690815f1a9053505f612ffd84600261329d565b6130089060016132b4565b90505b600181111561307f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061303c5761303c6132db565b1a60f81b828281518110613052576130526132db565b60200101906001600160f81b03191690815f1a90535060049490941c93613078816132ef565b905061300b565b5083156130ce5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401612075565b9392505050565b5f602082840312156130e5575f80fd5b81356001600160e01b0319811681146130ce575f80fd5b80356001600160a01b0381168114613112575f80fd5b919050565b5f60208284031215613127575f80fd5b6130ce826130fc565b5f60208284031215613140575f80fd5b5035919050565b5f8060408385031215613158575f80fd5b82359150613168602084016130fc565b90509250929050565b5f8060408385031215613182575f80fd5b61318b836130fc565b9150613168602084016130fc565b5f80604083850312156131aa575f80fd5b6131b3836130fc565b946020939093013593505050565b5f5b838110156131db5781810151838201526020016131c3565b50505f910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161321a8160178501602088016131c1565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161324b8160288401602088016131c1565b01602801949350505050565b602081525f82518060208401526132758160408501602087016131c1565b601f01601f19169190910160400192915050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417611e3457611e34613289565b80820180821115611e3457611e34613289565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f816132fd576132fd613289565b505f19019056feaf290d8680820aad922855f39b306097b20e28774d6c1ad35a20325630c3a02c1c2fe98ddbbbffbcf7735c7446ffcddb5ccd2a4ec2ace0f7d90f73e9ff13fcc7b18278bb399a7088b8b0b26f4896d5ebaba4497c611bbe9d43abe92d9a1fe83d6f8d0b773ad4970d3e7d47623dc9ce06a1b4fe833bf451d06a47e774f9acaa63712c13b90acf399d7bc7625370ce37c64b5eba41011b0961a88c2ef1648870cf2cf2377da51daa9c0d7e3f98c7532a67ee5e9398afad7b7db6e578b978a27094df8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428f1b9b075a455aa4e85ab4edea73c8fe6d4e2e5e4c6675d6135fefdca5e95a258489bc07817c82dd59579d43388f707a6a0a4a614b58e7df61bb06baec0de2c1fa5a84fed05ba4c93fcc5ba1f4ad010e3bef3e6394b367aa10b3ec01997375cca26469706673582212207e8023528ebc11124bddb9cb8602596106598c299e0b12b4b38f5e81bfc8806c64736f6c63430008140033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ethDepositContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidLimits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMaxDepositValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMaxWithdrawValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMinDepositValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMinWithdrawValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SetConstant\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SetVariable\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUCTION_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DECIMALS\",\"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\":\"ETHX_SUPPLY_POR_FEED\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_BALANCE_POR_FEED\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_DEPOSIT_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_PER_NODE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETHx\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FULL_DEPOSIT_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_DEPOSIT_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_WITHDRAW_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_DEPOSIT_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_WITHDRAW_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_EL_REWARD_VAULT_IMPLEMENTATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_MAX_NAME_LENGTH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_REWARD_COLLECTOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PENALTY_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_NODE_REGISTRY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_SOCIALIZING_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_NODE_REGISTRY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_SOCIALIZING_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_SELECTOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_UTILS\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRE_DEPOSIT_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REWARD_THRESHOLD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SD_COLLATERAL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOCIALIZING_POOL_CYCLE_DURATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_INSURANCE_FUND\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_ORACLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_TREASURY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKE_POOL_MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOTAL_FEE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"USER_WITHDRAW_MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_FACTORY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WITHDRAWN_KEYS_BATCH_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuctionContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDecimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHBalancePORFeedProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHDepositContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHXSupplyPORFeedProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHxToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFullDepositSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxDepositAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxWithdrawAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinBlockDelayToFinalizeWithdrawRequest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinDepositAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinWithdrawAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeELRewardVaultImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperatorMaxNameLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperatorRewardsCollector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPenaltyContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedSocializingPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessSocializingPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSelector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolUtils\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPreDepositSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsThreshold\",\"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\":[],\"name\":\"getSDCollateral\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSocializingPoolCycleDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSocializingPoolOptInCoolingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderInsuranceFund\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakePoolManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakedEthPerNode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUserWithdrawManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidatorWithdrawalVaultImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawnKeyBatchSize\",\"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\":\"account\",\"type\":\"address\"}],\"name\":\"onlyManagerRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"onlyOperatorRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_contractName\",\"type\":\"bytes32\"}],\"name\":\"onlyStaderContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"updateAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_auctionContract\",\"type\":\"address\"}],\"name\":\"updateAuctionContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethBalanceProxy\",\"type\":\"address\"}],\"name\":\"updateETHBalancePORFeedProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethXSupplyProxy\",\"type\":\"address\"}],\"name\":\"updateETHXSupplyPORFeedProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethX\",\"type\":\"address\"}],\"name\":\"updateETHxToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDepositAmount\",\"type\":\"uint256\"}],\"name\":\"updateMaxDepositAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxWithdrawAmount\",\"type\":\"uint256\"}],\"name\":\"updateMaxWithdrawAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minBlockDelay\",\"type\":\"uint256\"}],\"name\":\"updateMinBlockDelayToFinalizeWithdrawRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minDepositAmount\",\"type\":\"uint256\"}],\"name\":\"updateMinDepositAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minWithdrawAmount\",\"type\":\"uint256\"}],\"name\":\"updateMinWithdrawAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeELRewardVaultImpl\",\"type\":\"address\"}],\"name\":\"updateNodeELRewardImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operatorRewardsCollector\",\"type\":\"address\"}],\"name\":\"updateOperatorRewardsCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_penaltyContract\",\"type\":\"address\"}],\"name\":\"updatePenaltyContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedNodeRegistry\",\"type\":\"address\"}],\"name\":\"updatePermissionedNodeRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedPool\",\"type\":\"address\"}],\"name\":\"updatePermissionedPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedSocializePool\",\"type\":\"address\"}],\"name\":\"updatePermissionedSocializingPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessNodeRegistry\",\"type\":\"address\"}],\"name\":\"updatePermissionlessNodeRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessPool\",\"type\":\"address\"}],\"name\":\"updatePermissionlessPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessSocializePool\",\"type\":\"address\"}],\"name\":\"updatePermissionlessSocializingPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolSelector\",\"type\":\"address\"}],\"name\":\"updatePoolSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolUtils\",\"type\":\"address\"}],\"name\":\"updatePoolUtils\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardsThreshold\",\"type\":\"uint256\"}],\"name\":\"updateRewardsThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sdCollateral\",\"type\":\"address\"}],\"name\":\"updateSDCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_socializingPoolCycleDuration\",\"type\":\"uint256\"}],\"name\":\"updateSocializingPoolCycleDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_SocializePoolOptInCoolingPeriod\",\"type\":\"uint256\"}],\"name\":\"updateSocializingPoolOptInCoolingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderInsuranceFund\",\"type\":\"address\"}],\"name\":\"updateStaderInsuranceFund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderOracle\",\"type\":\"address\"}],\"name\":\"updateStaderOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderToken\",\"type\":\"address\"}],\"name\":\"updateStaderToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderTreasury\",\"type\":\"address\"}],\"name\":\"updateStaderTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_stakePoolManager\",\"type\":\"address\"}],\"name\":\"updateStakePoolManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userWithdrawManager\",\"type\":\"address\"}],\"name\":\"updateUserWithdrawManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validatorWithdrawalVaultImpl\",\"type\":\"address\"}],\"name\":\"updateValidatorWithdrawalVaultImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vaultFactory\",\"type\":\"address\"}],\"name\":\"updateVaultFactory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateWithdrawnKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // StaderConfigABI is the input ABI used to generate the binding from. // Deprecated: Use StaderConfigMetaData.ABI instead. var StaderConfigABI = StaderConfigMetaData.ABI -// StaderConfigBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use StaderConfigMetaData.Bin instead. -var StaderConfigBin = StaderConfigMetaData.Bin - -// DeployStaderConfig deploys a new Ethereum contract, binding an instance of StaderConfig to it. -func DeployStaderConfig(auth *bind.TransactOpts, backend bind.ContractBackend,) (common.Address, *types.Transaction, *StaderConfig, error, ) { - parsed, err := StaderConfigMetaData.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(StaderConfigBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &StaderConfig{StaderConfigCaller: StaderConfigCaller{contract: contract}, StaderConfigTransactor: StaderConfigTransactor{contract: contract}, StaderConfigFilterer: StaderConfigFilterer{contract: contract}}, nil -} - // StaderConfig is an auto generated Go binding around an Ethereum contract. type StaderConfig struct { StaderConfigCaller // Read-only binding to the contract @@ -3044,27 +3022,6 @@ func (_StaderConfig *StaderConfigTransactorSession) GrantRole(role [32]byte, acc return _StaderConfig.Contract.GrantRole(&_StaderConfig.TransactOpts, role, account) } -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _admin, address _ethDepositContract) returns() -func (_StaderConfig *StaderConfigTransactor) Initialize(opts *bind.TransactOpts, _admin common.Address, _ethDepositContract common.Address) (*types.Transaction, error) { - return _StaderConfig.contract.Transact(opts, "initialize", _admin, _ethDepositContract) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _admin, address _ethDepositContract) returns() -func (_StaderConfig *StaderConfigSession) Initialize(_admin common.Address, _ethDepositContract common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.Initialize(&_StaderConfig.TransactOpts, _admin, _ethDepositContract) -} - -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. -// -// Solidity: function initialize(address _admin, address _ethDepositContract) returns() -func (_StaderConfig *StaderConfigTransactorSession) Initialize(_admin common.Address, _ethDepositContract common.Address) (*types.Transaction, error) { - return _StaderConfig.Contract.Initialize(&_StaderConfig.TransactOpts, _admin, _ethDepositContract) -} - // RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. // // Solidity: function renounceRole(bytes32 role, address account) returns() diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index f8515839a..bb7a62ddd 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -224,7 +224,7 @@ func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { elPort := apiServiceHttpPortSpec.GetNumber() */ - clUrl := fmt.Sprintf("http://127.0.0.1:49759") + clUrl := fmt.Sprintf("http://127.0.0.1:51814") elUrl := fmt.Sprintf("http://127.0.0.1:8545") s.setConfig(c, elUrl, clUrl) diff --git a/testing/contracts/ETHX.go b/testing/contracts/ETHX.go new file mode 100644 index 000000000..2f0fe8a0d --- /dev/null +++ b/testing/contracts/ETHX.go @@ -0,0 +1,2250 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contracts + +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 +) + +// ETHXMetaData contains all meta data concerning the ETHX contract. +var ETHXMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"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\":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\":\"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\"},{\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNER_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\":\"MINTER_ROLE\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"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\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"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\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b5060405162001bbe38038062001bbe83398101604081905262000033916200050a565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b620001038362000215565b6200010e8262000215565b620001586040518060400160405280600481526020016308aa890f60e31b8152506040518060400160405280600481526020016308aa890f60e31b8152506200024060201b60201c565b62000162620002aa565b6200016c62000310565b60fb80546001600160a01b0319166001600160a01b038416179055620001935f846200036a565b6040516001600160a01b038316907fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a280156200020c575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620006a7565b6001600160a01b0381166200023d5760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff166200029a5760405162461bcd60e51b815260206004820152602b60248201525f8051602062001b9e83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b620002a682826200040c565b5050565b5f54610100900460ff16620003045760405162461bcd60e51b815260206004820152602b60248201525f8051602062001b9e83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200030e62000488565b565b5f54610100900460ff166200030e5760405162461bcd60e51b815260206004820152602b60248201525f8051602062001b9e83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b5f82815260c9602090815260408083206001600160a01b038516845290915290205460ff16620002a6575f82815260c9602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620003c83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f54610100900460ff16620004665760405162461bcd60e51b815260206004820152602b60248201525f8051602062001b9e83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6036620004748382620005df565b506037620004838282620005df565b505050565b5f54610100900460ff16620004e25760405162461bcd60e51b815260206004820152602b60248201525f8051602062001b9e83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6065805460ff19169055565b80516001600160a01b038116811462000505575f80fd5b919050565b5f80604083850312156200051c575f80fd5b6200052783620004ee565b91506200053760208401620004ee565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200056957607f821691505b6020821081036200058857634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000483575f81815260208120601f850160051c81016020861015620005b65750805b601f850160051c820191505b81811015620005d757828155600101620005c2565b505050505050565b81516001600160401b03811115620005fb57620005fb62000540565b62000613816200060c845462000554565b846200058e565b602080601f83116001811462000649575f8415620006315750858301515b5f19600386901b1c1916600185901b178555620005d7565b5f85815260208120601f198616915b82811015620006795788860151825594840194600190910190840162000658565b50858210156200069757878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6114e980620006b55f395ff3fe608060405234801561000f575f80fd5b50600436106101a1575f3560e01c8063490ffa35116100f35780639ee804cb11610093578063a9059cbb1161006e578063a9059cbb14610389578063d53913931461039c578063d547741f146103c3578063dd62ed3e146103d6575f80fd5b80639ee804cb1461035c578063a217fddf1461036f578063a457c2d714610376575f80fd5b806379cc6790116100ce57806379cc6790146103265780638456cb591461033957806391d148541461034157806395d89b4114610354575f80fd5b8063490ffa35146102c85780635c975abb146102f357806370a08231146102fe575f80fd5b8063282c51f31161015e57806336568abe1161013957806336568abe14610287578063395093511461029a5780633f4ba83a146102ad57806340c10f19146102b5575f80fd5b8063282c51f31461023c5780632f2ff15d14610263578063313ce56714610278575f80fd5b806301ffc9a7146101a557806306fdde03146101cd578063095ea7b3146101e257806318160ddd146101f557806323b872dd14610207578063248a9ca31461021a575b5f80fd5b6101b86101b33660046111f4565b6103e9565b60405190151581526020015b60405180910390f35b6101d561041f565b6040516101c4919061123d565b6101b86101f036600461128a565b6104af565b6035545b6040519081526020016101c4565b6101b86102153660046112b2565b6104c6565b6101f96102283660046112eb565b5f90815260c9602052604090206001015490565b6101f97f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b610276610271366004611302565b6104e9565b005b604051601281526020016101c4565b610276610295366004611302565b610512565b6101b86102a836600461128a565b610595565b6102766105b6565b6102766102c336600461128a565b6105cb565b60fb546102db906001600160a01b031681565b6040516001600160a01b0390911681526020016101c4565b60655460ff166101b8565b6101f961030c36600461132c565b6001600160a01b03165f9081526033602052604090205490565b61027661033436600461128a565b610607565b610276610643565b6101b861034f366004611302565b610664565b6101d561068e565b61027661036a36600461132c565b61069d565b6101f95f81565b6101b861038436600461128a565b6106fa565b6101b861039736600461128a565b610774565b6101f97f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102766103d1366004611302565b610781565b6101f96103e4366004611345565b6107a5565b5f6001600160e01b03198216637965db0b60e01b148061041957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606036805461042e9061136d565b80601f016020809104026020016040519081016040528092919081815260200182805461045a9061136d565b80156104a55780601f1061047c576101008083540402835291602001916104a5565b820191905f5260205f20905b81548152906001019060200180831161048857829003601f168201915b5050505050905090565b5f336104bc8185856107cf565b5060019392505050565b5f336104d38582856108f2565b6104de85858561096a565b506001949350505050565b5f82815260c9602052604090206001015461050381610b1e565b61050d8383610b28565b505050565b6001600160a01b03811633146105875760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6105918282610bad565b5050565b5f336104bc8185856105a783836107a5565b6105b191906113b9565b6107cf565b5f6105c081610b1e565b6105c8610c13565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66105f581610b1e565b6105fd610c65565b61050d8383610cab565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84861063181610b1e565b610639610c65565b61050d8383610d75565b60fb5461065a9033906001600160a01b0316610eb2565b610662610f37565b565b5f91825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606037805461042e9061136d565b5f6106a781610b1e565b6106b082610f74565b60fb80546001600160a01b0319166001600160a01b0384169081179091556040517fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a25050565b5f338161070782866107a5565b9050838110156107675760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161057e565b6104de82868684036107cf565b5f336104bc81858561096a565b5f82815260c9602052604090206001015461079b81610b1e565b61050d8383610bad565b6001600160a01b039182165f90815260346020908152604080832093909416825291909152205490565b6001600160a01b0383166108315760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161057e565b6001600160a01b0382166108925760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161057e565b6001600160a01b038381165f8181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6108fd84846107a5565b90505f19811461096457818110156109575760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161057e565b61096484848484036107cf565b50505050565b6001600160a01b0383166109ce5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161057e565b6001600160a01b038216610a305760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161057e565b610a3b838383610f9b565b6001600160a01b0383165f9081526033602052604090205481811015610ab25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161057e565b6001600160a01b038085165f8181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b119086815260200190565b60405180910390a3610964565b6105c88133610fa3565b610b328282610664565b610591575f82815260c9602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610b693390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610bb78282610664565b15610591575f82815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610c1b610ffc565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60655460ff16156106625760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161057e565b6001600160a01b038216610d015760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161057e565b610d0c5f8383610f9b565b8060355f828254610d1d91906113b9565b90915550506001600160a01b0382165f818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610dd55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161057e565b610de0825f83610f9b565b6001600160a01b0382165f9081526033602052604090205481811015610e535760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161057e565b6001600160a01b0383165f8181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015610ef6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1a91906113cc565b6105915760405163c4230ae360e01b815260040160405180910390fd5b610f3f610c65565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610c483390565b6001600160a01b0381166105c85760405163d92e233d60e01b815260040160405180910390fd5b61050d610c65565b610fad8282610664565b61059157610fba81611045565b610fc5836020611057565b604051602001610fd69291906113eb565b60408051601f198184030181529082905262461bcd60e51b825261057e9160040161123d565b60655460ff166106625760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161057e565b60606104196001600160a01b03831660145b60605f61106583600261145f565b6110709060026113b9565b67ffffffffffffffff81111561108857611088611476565b6040519080825280601f01601f1916602001820160405280156110b2576020820181803683370190505b509050600360fc1b815f815181106110cc576110cc61148a565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106110fa576110fa61148a565b60200101906001600160f81b03191690815f1a9053505f61111c84600261145f565b6111279060016113b9565b90505b600181111561119e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061115b5761115b61148a565b1a60f81b8282815181106111715761117161148a565b60200101906001600160f81b03191690815f1a90535060049490941c936111978161149e565b905061112a565b5083156111ed5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161057e565b9392505050565b5f60208284031215611204575f80fd5b81356001600160e01b0319811681146111ed575f80fd5b5f5b8381101561123557818101518382015260200161121d565b50505f910152565b602081525f825180602084015261125b81604085016020870161121b565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114611285575f80fd5b919050565b5f806040838503121561129b575f80fd5b6112a48361126f565b946020939093013593505050565b5f805f606084860312156112c4575f80fd5b6112cd8461126f565b92506112db6020850161126f565b9150604084013590509250925092565b5f602082840312156112fb575f80fd5b5035919050565b5f8060408385031215611313575f80fd5b823591506113236020840161126f565b90509250929050565b5f6020828403121561133c575f80fd5b6111ed8261126f565b5f8060408385031215611356575f80fd5b61135f8361126f565b91506113236020840161126f565b600181811c9082168061138157607f821691505b60208210810361139f57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610419576104196113a5565b5f602082840312156113dc575f80fd5b815180151581146111ed575f80fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f835161142281601785016020880161121b565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161145381602884016020880161121b565b01602801949350505050565b8082028115828204841417610419576104196113a5565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f816114ac576114ac6113a5565b505f19019056fea26469706673582212208c5d220a0ac0e54b26a929cfe2e90add2296be233a1eb6dca7de46a5750bab3964736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", +} + +// ETHXABI is the input ABI used to generate the binding from. +// Deprecated: Use ETHXMetaData.ABI instead. +var ETHXABI = ETHXMetaData.ABI + +// ETHXBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ETHXMetaData.Bin instead. +var ETHXBin = ETHXMetaData.Bin + +// DeployETHX deploys a new Ethereum contract, binding an instance of ETHX to it. +func DeployETHX(auth *bind.TransactOpts, backend bind.ContractBackend, _admin common.Address, _staderConfig common.Address) (common.Address, *types.Transaction, *ETHX, error) { + parsed, err := ETHXMetaData.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(ETHXBin), backend, _admin, _staderConfig) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, ÐX{ETHXCaller: ETHXCaller{contract: contract}, ETHXTransactor: ETHXTransactor{contract: contract}, ETHXFilterer: ETHXFilterer{contract: contract}}, nil +} + +// ETHX is an auto generated Go binding around an Ethereum contract. +type ETHX struct { + ETHXCaller // Read-only binding to the contract + ETHXTransactor // Write-only binding to the contract + ETHXFilterer // Log filterer for contract events +} + +// ETHXCaller is an auto generated read-only Go binding around an Ethereum contract. +type ETHXCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ETHXTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ETHXTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ETHXFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ETHXFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ETHXSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ETHXSession struct { + Contract *ETHX // 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 +} + +// ETHXCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ETHXCallerSession struct { + Contract *ETHXCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ETHXTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ETHXTransactorSession struct { + Contract *ETHXTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ETHXRaw is an auto generated low-level Go binding around an Ethereum contract. +type ETHXRaw struct { + Contract *ETHX // Generic contract binding to access the raw methods on +} + +// ETHXCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ETHXCallerRaw struct { + Contract *ETHXCaller // Generic read-only contract binding to access the raw methods on +} + +// ETHXTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ETHXTransactorRaw struct { + Contract *ETHXTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewETHX creates a new instance of ETHX, bound to a specific deployed contract. +func NewETHX(address common.Address, backend bind.ContractBackend) (*ETHX, error) { + contract, err := bindETHX(address, backend, backend, backend) + if err != nil { + return nil, err + } + return ÐX{ETHXCaller: ETHXCaller{contract: contract}, ETHXTransactor: ETHXTransactor{contract: contract}, ETHXFilterer: ETHXFilterer{contract: contract}}, nil +} + +// NewETHXCaller creates a new read-only instance of ETHX, bound to a specific deployed contract. +func NewETHXCaller(address common.Address, caller bind.ContractCaller) (*ETHXCaller, error) { + contract, err := bindETHX(address, caller, nil, nil) + if err != nil { + return nil, err + } + return ÐXCaller{contract: contract}, nil +} + +// NewETHXTransactor creates a new write-only instance of ETHX, bound to a specific deployed contract. +func NewETHXTransactor(address common.Address, transactor bind.ContractTransactor) (*ETHXTransactor, error) { + contract, err := bindETHX(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return ÐXTransactor{contract: contract}, nil +} + +// NewETHXFilterer creates a new log filterer instance of ETHX, bound to a specific deployed contract. +func NewETHXFilterer(address common.Address, filterer bind.ContractFilterer) (*ETHXFilterer, error) { + contract, err := bindETHX(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return ÐXFilterer{contract: contract}, nil +} + +// bindETHX binds a generic wrapper to an already deployed contract. +func bindETHX(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ETHXMetaData.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 (_ETHX *ETHXRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ETHX.Contract.ETHXCaller.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 (_ETHX *ETHXRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ETHX.Contract.ETHXTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ETHX *ETHXRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ETHX.Contract.ETHXTransactor.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 (_ETHX *ETHXCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ETHX.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 (_ETHX *ETHXTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ETHX.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ETHX *ETHXTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ETHX.Contract.contract.Transact(opts, method, params...) +} + +// BURNERROLE is a free data retrieval call binding the contract method 0x282c51f3. +// +// Solidity: function BURNER_ROLE() view returns(bytes32) +func (_ETHX *ETHXCaller) BURNERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ETHX.contract.Call(opts, &out, "BURNER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// BURNERROLE is a free data retrieval call binding the contract method 0x282c51f3. +// +// Solidity: function BURNER_ROLE() view returns(bytes32) +func (_ETHX *ETHXSession) BURNERROLE() ([32]byte, error) { + return _ETHX.Contract.BURNERROLE(&_ETHX.CallOpts) +} + +// BURNERROLE is a free data retrieval call binding the contract method 0x282c51f3. +// +// Solidity: function BURNER_ROLE() view returns(bytes32) +func (_ETHX *ETHXCallerSession) BURNERROLE() ([32]byte, error) { + return _ETHX.Contract.BURNERROLE(&_ETHX.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ETHX *ETHXCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ETHX.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ETHX *ETHXSession) DEFAULTADMINROLE() ([32]byte, error) { + return _ETHX.Contract.DEFAULTADMINROLE(&_ETHX.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ETHX *ETHXCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _ETHX.Contract.DEFAULTADMINROLE(&_ETHX.CallOpts) +} + +// MINTERROLE is a free data retrieval call binding the contract method 0xd5391393. +// +// Solidity: function MINTER_ROLE() view returns(bytes32) +func (_ETHX *ETHXCaller) MINTERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ETHX.contract.Call(opts, &out, "MINTER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MINTERROLE is a free data retrieval call binding the contract method 0xd5391393. +// +// Solidity: function MINTER_ROLE() view returns(bytes32) +func (_ETHX *ETHXSession) MINTERROLE() ([32]byte, error) { + return _ETHX.Contract.MINTERROLE(&_ETHX.CallOpts) +} + +// MINTERROLE is a free data retrieval call binding the contract method 0xd5391393. +// +// Solidity: function MINTER_ROLE() view returns(bytes32) +func (_ETHX *ETHXCallerSession) MINTERROLE() ([32]byte, error) { + return _ETHX.Contract.MINTERROLE(&_ETHX.CallOpts) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address owner, address spender) view returns(uint256) +func (_ETHX *ETHXCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var out []interface{} + err := _ETHX.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 (_ETHX *ETHXSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _ETHX.Contract.Allowance(&_ETHX.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 (_ETHX *ETHXCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _ETHX.Contract.Allowance(&_ETHX.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_ETHX *ETHXCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) { + var out []interface{} + err := _ETHX.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 (_ETHX *ETHXSession) BalanceOf(account common.Address) (*big.Int, error) { + return _ETHX.Contract.BalanceOf(&_ETHX.CallOpts, account) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address account) view returns(uint256) +func (_ETHX *ETHXCallerSession) BalanceOf(account common.Address) (*big.Int, error) { + return _ETHX.Contract.BalanceOf(&_ETHX.CallOpts, account) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_ETHX *ETHXCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _ETHX.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 (_ETHX *ETHXSession) Decimals() (uint8, error) { + return _ETHX.Contract.Decimals(&_ETHX.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_ETHX *ETHXCallerSession) Decimals() (uint8, error) { + return _ETHX.Contract.Decimals(&_ETHX.CallOpts) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ETHX *ETHXCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _ETHX.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ETHX *ETHXSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _ETHX.Contract.GetRoleAdmin(&_ETHX.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ETHX *ETHXCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _ETHX.Contract.GetRoleAdmin(&_ETHX.CallOpts, role) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ETHX *ETHXCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _ETHX.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ETHX *ETHXSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _ETHX.Contract.HasRole(&_ETHX.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ETHX *ETHXCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _ETHX.Contract.HasRole(&_ETHX.CallOpts, role, account) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_ETHX *ETHXCaller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ETHX.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 (_ETHX *ETHXSession) Name() (string, error) { + return _ETHX.Contract.Name(&_ETHX.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_ETHX *ETHXCallerSession) Name() (string, error) { + return _ETHX.Contract.Name(&_ETHX.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_ETHX *ETHXCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ETHX.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 (_ETHX *ETHXSession) Paused() (bool, error) { + return _ETHX.Contract.Paused(&_ETHX.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_ETHX *ETHXCallerSession) Paused() (bool, error) { + return _ETHX.Contract.Paused(&_ETHX.CallOpts) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_ETHX *ETHXCaller) StaderConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ETHX.contract.Call(opts, &out, "staderConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_ETHX *ETHXSession) StaderConfig() (common.Address, error) { + return _ETHX.Contract.StaderConfig(&_ETHX.CallOpts) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_ETHX *ETHXCallerSession) StaderConfig() (common.Address, error) { + return _ETHX.Contract.StaderConfig(&_ETHX.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ETHX *ETHXCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _ETHX.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 (_ETHX *ETHXSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _ETHX.Contract.SupportsInterface(&_ETHX.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ETHX *ETHXCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _ETHX.Contract.SupportsInterface(&_ETHX.CallOpts, interfaceId) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_ETHX *ETHXCaller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ETHX.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 (_ETHX *ETHXSession) Symbol() (string, error) { + return _ETHX.Contract.Symbol(&_ETHX.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_ETHX *ETHXCallerSession) Symbol() (string, error) { + return _ETHX.Contract.Symbol(&_ETHX.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_ETHX *ETHXCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ETHX.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 (_ETHX *ETHXSession) TotalSupply() (*big.Int, error) { + return _ETHX.Contract.TotalSupply(&_ETHX.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_ETHX *ETHXCallerSession) TotalSupply() (*big.Int, error) { + return _ETHX.Contract.TotalSupply(&_ETHX.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_ETHX *ETHXTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.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 (_ETHX *ETHXSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.Approve(&_ETHX.TransactOpts, spender, amount) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address spender, uint256 amount) returns(bool) +func (_ETHX *ETHXTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.Approve(&_ETHX.TransactOpts, spender, amount) +} + +// BurnFrom is a paid mutator transaction binding the contract method 0x79cc6790. +// +// Solidity: function burnFrom(address account, uint256 amount) returns() +func (_ETHX *ETHXTransactor) BurnFrom(opts *bind.TransactOpts, account common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.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 (_ETHX *ETHXSession) BurnFrom(account common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.BurnFrom(&_ETHX.TransactOpts, account, amount) +} + +// BurnFrom is a paid mutator transaction binding the contract method 0x79cc6790. +// +// Solidity: function burnFrom(address account, uint256 amount) returns() +func (_ETHX *ETHXTransactorSession) BurnFrom(account common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.BurnFrom(&_ETHX.TransactOpts, account, amount) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_ETHX *ETHXTransactor) DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _ETHX.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 (_ETHX *ETHXSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.DecreaseAllowance(&_ETHX.TransactOpts, spender, subtractedValue) +} + +// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. +// +// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) +func (_ETHX *ETHXTransactorSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.DecreaseAllowance(&_ETHX.TransactOpts, spender, subtractedValue) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ETHX *ETHXTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ETHX *ETHXSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.Contract.GrantRole(&_ETHX.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ETHX *ETHXTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.Contract.GrantRole(&_ETHX.TransactOpts, role, account) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_ETHX *ETHXTransactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _ETHX.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 (_ETHX *ETHXSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.IncreaseAllowance(&_ETHX.TransactOpts, spender, addedValue) +} + +// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. +// +// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) +func (_ETHX *ETHXTransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.IncreaseAllowance(&_ETHX.TransactOpts, spender, addedValue) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address to, uint256 amount) returns() +func (_ETHX *ETHXTransactor) Mint(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.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 (_ETHX *ETHXSession) Mint(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.Mint(&_ETHX.TransactOpts, to, amount) +} + +// Mint is a paid mutator transaction binding the contract method 0x40c10f19. +// +// Solidity: function mint(address to, uint256 amount) returns() +func (_ETHX *ETHXTransactorSession) Mint(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.Mint(&_ETHX.TransactOpts, to, amount) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ETHX *ETHXTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ETHX.contract.Transact(opts, "pause") +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ETHX *ETHXSession) Pause() (*types.Transaction, error) { + return _ETHX.Contract.Pause(&_ETHX.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_ETHX *ETHXTransactorSession) Pause() (*types.Transaction, error) { + return _ETHX.Contract.Pause(&_ETHX.TransactOpts) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_ETHX *ETHXTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.contract.Transact(opts, "renounceRole", role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_ETHX *ETHXSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.Contract.RenounceRole(&_ETHX.TransactOpts, role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_ETHX *ETHXTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.Contract.RenounceRole(&_ETHX.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ETHX *ETHXTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ETHX *ETHXSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.Contract.RevokeRole(&_ETHX.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ETHX *ETHXTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ETHX.Contract.RevokeRole(&_ETHX.TransactOpts, role, account) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_ETHX *ETHXTransactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.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 (_ETHX *ETHXSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.Transfer(&_ETHX.TransactOpts, to, amount) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address to, uint256 amount) returns(bool) +func (_ETHX *ETHXTransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.Transfer(&_ETHX.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 (_ETHX *ETHXTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.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 (_ETHX *ETHXSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.TransferFrom(&_ETHX.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 (_ETHX *ETHXTransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _ETHX.Contract.TransferFrom(&_ETHX.TransactOpts, from, to, amount) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ETHX *ETHXTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ETHX.contract.Transact(opts, "unpause") +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ETHX *ETHXSession) Unpause() (*types.Transaction, error) { + return _ETHX.Contract.Unpause(&_ETHX.TransactOpts) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_ETHX *ETHXTransactorSession) Unpause() (*types.Transaction, error) { + return _ETHX.Contract.Unpause(&_ETHX.TransactOpts) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_ETHX *ETHXTransactor) UpdateStaderConfig(opts *bind.TransactOpts, _staderConfig common.Address) (*types.Transaction, error) { + return _ETHX.contract.Transact(opts, "updateStaderConfig", _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_ETHX *ETHXSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _ETHX.Contract.UpdateStaderConfig(&_ETHX.TransactOpts, _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_ETHX *ETHXTransactorSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _ETHX.Contract.UpdateStaderConfig(&_ETHX.TransactOpts, _staderConfig) +} + +// ETHXApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ETHX contract. +type ETHXApprovalIterator struct { + Event *ETHXApproval // 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 *ETHXApprovalIterator) 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(ETHXApproval) + if err := 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(ETHXApproval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXApproval represents a Approval event raised by the ETHX contract. +type ETHXApproval 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 (_ETHX *ETHXFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*ETHXApprovalIterator, 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 := _ETHX.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return ÐXApprovalIterator{contract: _ETHX.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 (_ETHX *ETHXFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ETHXApproval, 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 := _ETHX.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(ETHXApproval) + if err := _ETHX.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 (_ETHX *ETHXFilterer) ParseApproval(log types.Log) (*ETHXApproval, error) { + event := new(ETHXApproval) + if err := _ETHX.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ETHXInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ETHX contract. +type ETHXInitializedIterator struct { + Event *ETHXInitialized // 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 *ETHXInitializedIterator) 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(ETHXInitialized) + if err := 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(ETHXInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXInitialized represents a Initialized event raised by the ETHX contract. +type ETHXInitialized 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 (_ETHX *ETHXFilterer) FilterInitialized(opts *bind.FilterOpts) (*ETHXInitializedIterator, error) { + + logs, sub, err := _ETHX.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return ÐXInitializedIterator{contract: _ETHX.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 (_ETHX *ETHXFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ETHXInitialized) (event.Subscription, error) { + + logs, sub, err := _ETHX.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(ETHXInitialized) + if err := _ETHX.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 (_ETHX *ETHXFilterer) ParseInitialized(log types.Log) (*ETHXInitialized, error) { + event := new(ETHXInitialized) + if err := _ETHX.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ETHXPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ETHX contract. +type ETHXPausedIterator struct { + Event *ETHXPaused // 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 *ETHXPausedIterator) 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(ETHXPaused) + if err := 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(ETHXPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXPaused represents a Paused event raised by the ETHX contract. +type ETHXPaused 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 (_ETHX *ETHXFilterer) FilterPaused(opts *bind.FilterOpts) (*ETHXPausedIterator, error) { + + logs, sub, err := _ETHX.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return ÐXPausedIterator{contract: _ETHX.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 (_ETHX *ETHXFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *ETHXPaused) (event.Subscription, error) { + + logs, sub, err := _ETHX.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(ETHXPaused) + if err := _ETHX.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 (_ETHX *ETHXFilterer) ParsePaused(log types.Log) (*ETHXPaused, error) { + event := new(ETHXPaused) + if err := _ETHX.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ETHXRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the ETHX contract. +type ETHXRoleAdminChangedIterator struct { + Event *ETHXRoleAdminChanged // 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 *ETHXRoleAdminChangedIterator) 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(ETHXRoleAdminChanged) + if err := 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(ETHXRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXRoleAdminChanged represents a RoleAdminChanged event raised by the ETHX contract. +type ETHXRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ETHX *ETHXFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*ETHXRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _ETHX.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return ÐXRoleAdminChangedIterator{contract: _ETHX.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ETHX *ETHXFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *ETHXRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _ETHX.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(ETHXRoleAdminChanged) + if err := _ETHX.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ETHX *ETHXFilterer) ParseRoleAdminChanged(log types.Log) (*ETHXRoleAdminChanged, error) { + event := new(ETHXRoleAdminChanged) + if err := _ETHX.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ETHXRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the ETHX contract. +type ETHXRoleGrantedIterator struct { + Event *ETHXRoleGranted // 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 *ETHXRoleGrantedIterator) 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(ETHXRoleGranted) + if err := 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(ETHXRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXRoleGranted represents a RoleGranted event raised by the ETHX contract. +type ETHXRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ETHX *ETHXFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ETHXRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ETHX.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return ÐXRoleGrantedIterator{contract: _ETHX.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ETHX *ETHXFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *ETHXRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ETHX.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, 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(ETHXRoleGranted) + if err := _ETHX.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_ETHX *ETHXFilterer) ParseRoleGranted(log types.Log) (*ETHXRoleGranted, error) { + event := new(ETHXRoleGranted) + if err := _ETHX.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ETHXRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the ETHX contract. +type ETHXRoleRevokedIterator struct { + Event *ETHXRoleRevoked // 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 *ETHXRoleRevokedIterator) 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(ETHXRoleRevoked) + if err := 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(ETHXRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXRoleRevoked represents a RoleRevoked event raised by the ETHX contract. +type ETHXRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ETHX *ETHXFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ETHXRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ETHX.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return ÐXRoleRevokedIterator{contract: _ETHX.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ETHX *ETHXFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *ETHXRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _ETHX.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, 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(ETHXRoleRevoked) + if err := _ETHX.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_ETHX *ETHXFilterer) ParseRoleRevoked(log types.Log) (*ETHXRoleRevoked, error) { + event := new(ETHXRoleRevoked) + if err := _ETHX.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ETHXTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ETHX contract. +type ETHXTransferIterator struct { + Event *ETHXTransfer // 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 *ETHXTransferIterator) 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(ETHXTransfer) + if err := 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(ETHXTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXTransfer represents a Transfer event raised by the ETHX contract. +type ETHXTransfer 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 (_ETHX *ETHXFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ETHXTransferIterator, 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 := _ETHX.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return ÐXTransferIterator{contract: _ETHX.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 (_ETHX *ETHXFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ETHXTransfer, 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 := _ETHX.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(ETHXTransfer) + if err := _ETHX.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 (_ETHX *ETHXFilterer) ParseTransfer(log types.Log) (*ETHXTransfer, error) { + event := new(ETHXTransfer) + if err := _ETHX.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ETHXUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the ETHX contract. +type ETHXUnpausedIterator struct { + Event *ETHXUnpaused // 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 *ETHXUnpausedIterator) 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(ETHXUnpaused) + if err := 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(ETHXUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXUnpaused represents a Unpaused event raised by the ETHX contract. +type ETHXUnpaused 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 (_ETHX *ETHXFilterer) FilterUnpaused(opts *bind.FilterOpts) (*ETHXUnpausedIterator, error) { + + logs, sub, err := _ETHX.contract.FilterLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return ÐXUnpausedIterator{contract: _ETHX.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 (_ETHX *ETHXFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ETHXUnpaused) (event.Subscription, error) { + + logs, sub, err := _ETHX.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(ETHXUnpaused) + if err := _ETHX.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 (_ETHX *ETHXFilterer) ParseUnpaused(log types.Log) (*ETHXUnpaused, error) { + event := new(ETHXUnpaused) + if err := _ETHX.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ETHXUpdatedStaderConfigIterator is returned from FilterUpdatedStaderConfig and is used to iterate over the raw logs and unpacked data for UpdatedStaderConfig events raised by the ETHX contract. +type ETHXUpdatedStaderConfigIterator struct { + Event *ETHXUpdatedStaderConfig // 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 *ETHXUpdatedStaderConfigIterator) 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(ETHXUpdatedStaderConfig) + if err := 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(ETHXUpdatedStaderConfig) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *ETHXUpdatedStaderConfigIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ETHXUpdatedStaderConfigIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ETHXUpdatedStaderConfig represents a UpdatedStaderConfig event raised by the ETHX contract. +type ETHXUpdatedStaderConfig struct { + StaderConfig common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedStaderConfig is a free log retrieval operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address indexed _staderConfig) +func (_ETHX *ETHXFilterer) FilterUpdatedStaderConfig(opts *bind.FilterOpts, _staderConfig []common.Address) (*ETHXUpdatedStaderConfigIterator, error) { + + var _staderConfigRule []interface{} + for _, _staderConfigItem := range _staderConfig { + _staderConfigRule = append(_staderConfigRule, _staderConfigItem) + } + + logs, sub, err := _ETHX.contract.FilterLogs(opts, "UpdatedStaderConfig", _staderConfigRule) + if err != nil { + return nil, err + } + return ÐXUpdatedStaderConfigIterator{contract: _ETHX.contract, event: "UpdatedStaderConfig", logs: logs, sub: sub}, nil +} + +// WatchUpdatedStaderConfig is a free log subscription operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address indexed _staderConfig) +func (_ETHX *ETHXFilterer) WatchUpdatedStaderConfig(opts *bind.WatchOpts, sink chan<- *ETHXUpdatedStaderConfig, _staderConfig []common.Address) (event.Subscription, error) { + + var _staderConfigRule []interface{} + for _, _staderConfigItem := range _staderConfig { + _staderConfigRule = append(_staderConfigRule, _staderConfigItem) + } + + logs, sub, err := _ETHX.contract.WatchLogs(opts, "UpdatedStaderConfig", _staderConfigRule) + 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(ETHXUpdatedStaderConfig) + if err := _ETHX.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedStaderConfig is a log parse operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address indexed _staderConfig) +func (_ETHX *ETHXFilterer) ParseUpdatedStaderConfig(log types.Log) (*ETHXUpdatedStaderConfig, error) { + event := new(ETHXUpdatedStaderConfig) + if err := _ETHX.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/testing/contracts/PermissionlessNodeRegistry.go b/testing/contracts/PermissionlessNodeRegistry.go new file mode 100644 index 000000000..3dc6ca088 --- /dev/null +++ b/testing/contracts/PermissionlessNodeRegistry.go @@ -0,0 +1,5178 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contracts + +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 +) + +// Validator is an auto generated low-level Go binding around an user-defined struct. +type Validator struct { + Status uint8 + Pubkey []byte + PreDepositSignature []byte + DepositSignature []byte + WithdrawVaultAddress common.Address + OperatorId *big.Int + DepositBlock *big.Int + WithdrawnBlock *big.Int +} + +// PermissionlessNodeRegistryMetaData contains all meta data concerning the PermissionlessNodeRegistry contract. +var PermissionlessNodeRegistryMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CooldownNotComplete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicatePoolIDOrPoolNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InSufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBondEthValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidKeyCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartAndEndIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MisMatchingInputKeysSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoChangeInState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSDCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorAlreadyOnBoardedInProtocol\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorIsDeactivate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorNotOnBoarded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PageNumberIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PubkeyAlreadyExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyVerifiedKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyWithdrawnKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UNEXPECTED_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"maxKeyLimitReached\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"AddedValidatorKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"DecreasedTotalActiveValidatorCount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"IncreasedTotalActiveValidatorCount\",\"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\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nodeRewardAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"OnboardedOperator\",\"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\":\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredCollateralToPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"batchKeyDepositLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedInputKeyCountLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"UpdatedMaxNonTerminalKeyPerOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"UpdatedNextQueuedValidatorIndex\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardAddress\",\"type\":\"address\"}],\"name\":\"UpdatedOperatorDetails\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"UpdatedSocializingPoolState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"}],\"name\":\"UpdatedValidatorDepositBlock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedVerifiedKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedWithdrawnKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedAsFrontRunned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedReadyToDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorStatusMarkedAsInvalidSignature\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COLLATERAL_ETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRONT_RUN_PENALTY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ID\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_depositSignature\",\"type\":\"bytes[]\"}],\"name\":\"addValidatorKeys\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"changeSocializingPoolState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllNodeELVaultAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorRewardAddress\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalKeys\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getSocializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsByOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"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\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"increaseTotalActiveValidatorCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inputKeyCountLimit\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_readyToDepositPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_frontRunPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_invalidSignaturePubkey\",\"type\":\"bytes[]\"}],\"name\":\"markValidatorReadyToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNonTerminalKeyPerOperator\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextQueuedValidatorIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextValidatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nodeELRewardVaultByOperatorId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_operatorRewardAddress\",\"type\":\"address\"}],\"name\":\"onboardNodeOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorIDByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"operatorStructById\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"operatorRewardAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorAddress\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queuedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"socializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"totalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferCollateralToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"}],\"name\":\"updateDepositStatusAndBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_inputKeyCountLimit\",\"type\":\"uint16\"}],\"name\":\"updateInputKeyCountLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"updateMaxNonTerminalKeyPerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"updateNextQueuedValidatorIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_rewardAddress\",\"type\":\"address\"}],\"name\":\"updateOperatorDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateVerifiedKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"validatorIdByPubkey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorIdsByOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorRegistry\",\"outputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifiedKeyBatchSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"withdrawnValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b5060405162005666380380620056668339810160408190526200003391620004c6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001f1565b6200010e82620001f1565b620001186200021c565b6200012262000278565b6200012c620002dc565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff00009091166a01000000000000000000006001600160a01b0386160261ffff1916171762010000600160501b03191662320000179055603260fc55620001a25f8462000340565b8015620001e8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620004fc565b6001600160a01b038116620002195760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002765760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002d25760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b62000276620003e3565b5f54610100900460ff16620003365760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200027662000449565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16620003df575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200039e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff166200043d5760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff16620004a35760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b0381168114620004c1575f80fd5b919050565b5f8060408385031215620004d8575f80fd5b620004e383620004aa565b9150620004f360208401620004aa565b90509250929050565b61513c806200050a5f395ff3fe60806040526004361061035b575f3560e01c806383ea2358116101bd578063bb7306bf116100f2578063deacde2b11610092578063ebb5c1741161006d578063ebb5c17414610a64578063f7c0918914610a90578063f90b083814610aa5578063f9c4dda414610ac4575f80fd5b8063deacde2b146109fe578063e0bf8b5314610a11578063e0d7d0e914610a3e575f80fd5b8063c8a00e7a116100cd578063c8a00e7a14610964578063cac8b30614610994578063d547741f146109c0578063d5e1e5ce146109df575f80fd5b8063bb7306bf146108f1578063bc4a3ad51461090c578063c34ade5c14610938575f80fd5b8063998888981161015d578063ab3e71eb11610138578063ab3e71eb14610884578063af533aa814610899578063b01db078146108b8578063b8d2f06c146108d2575f80fd5b806399888898146108335780639ee804cb14610852578063a217fddf14610871575f80fd5b806384b0fa4c1161019857806384b0fa4c146107aa5780638a25bcec146107c057806391d14854146107df5780639344b242146107fe575f80fd5b806383ea23581461073257806384522a6d1461076a5780638456cb5914610796575f80fd5b806349911bfb116102935780635c2c30a511610233578063683547b81161020e578063683547b8146106c757806374338e6d146106f357806377c359e1146107095780637bd977d91461071e575f80fd5b80635c2c30a5146106595780635c975abb1461069157806360c3cf3f146106a8575f80fd5b806358a994ea1161026e57806358a994ea146105c957806359c3c9b7146105e85780635a1239c1146106075780635ae7f25d1461063a575f80fd5b806349911bfb1461055c5780634f59ed801461057157806350d5d7ab1461058c575f80fd5b80632d1dbd74116102fe57806336514d9f116102d957806336514d9f146104e457806336568abe146105035780633f4ba83a14610522578063490ffa3514610536575f80fd5b80632d1dbd74146104845780632d32924f146104995780632f2ff15d146104c5575f80fd5b8063186d954111610339578063186d9541146103eb578063248a9ca31461040a5780632517cfbf14610446578063264f27f314610465575f80fd5b806301ffc9a71461035f578063044d2fe81461039357806313797bff146103ca575b5f80fd5b34801561036a575f80fd5b5061037e6103793660046144ce565b610afb565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103b26103ad36600461455a565b610b31565b6040516001600160a01b03909116815260200161038a565b3480156103d5575f80fd5b506103e96103e43660046145fd565b610f50565b005b3480156103f6575f80fd5b506103e961040536600461468f565b611397565b348015610415575f80fd5b5061043861042436600461468f565b5f9081526065602052604090206001015490565b60405190815260200161038a565b348015610451575f80fd5b506103e96104603660046146a6565b611447565b348015610470575f80fd5b506103e961047f3660046146c7565b6114a9565b34801561048f575f80fd5b5061043860fd5481565b3480156104a4575f80fd5b506104b86104b3366004614705565b6116f4565b60405161038a9190614725565b3480156104d0575f80fd5b506103e96104df366004614771565b611828565b3480156104ef575f80fd5b5061037e6104fe36600461479f565b61184c565b34801561050e575f80fd5b506103e961051d366004614771565b611879565b34801561052d575f80fd5b506103e96118fc565b348015610541575f80fd5b5060fb546103b290600160501b90046001600160a01b031681565b348015610567575f80fd5b5061043860ff5481565b34801561057c575f80fd5b50610438673782dace9d90000081565b348015610597575f80fd5b5060fb546105b1906201000090046001600160401b031681565b6040516001600160401b03909116815260200161038a565b3480156105d4575f80fd5b506103e96105e33660046147d1565b611924565b3480156105f3575f80fd5b506103e961060236600461468f565b611aa2565b348015610612575f80fd5b5061062661062136600461468f565b611b42565b60405161038a9897969594939291906148a4565b348015610645575f80fd5b506103e961065436600461468f565b611d24565b348015610664575f80fd5b50610438610673366004614931565b80516020818301810180516101038252928201919093012091525481565b34801561069c575f80fd5b5060975460ff1661037e565b3480156106b3575f80fd5b506103e96106c23660046149db565b611e8b565b3480156106d2575f80fd5b506106e66106e1366004614a01565b611f05565b60405161038a9190614a33565b3480156106fe575f80fd5b506104386101005481565b348015610714575f80fd5b5061010154610438565b348015610729575f80fd5b506104386122bc565b34801561073d575f80fd5b506103b261074c36600461468f565b5f90815261010560205260409020600201546001600160a01b031690565b348015610775575f80fd5b5061043861078436600461468f565b6101086020525f908152604090205481565b3480156107a1575f80fd5b506103e96122d3565b3480156107b5575f80fd5b506104386101015481565b3480156107cb575f80fd5b506105b16107da366004614a01565b6122f9565b3480156107ea575f80fd5b5061037e6107f9366004614771565b6123c4565b348015610809575f80fd5b506103b261081836600461468f565b6101096020525f90815260409020546001600160a01b031681565b34801561083e575f80fd5b506106e661084d366004614705565b6123ee565b34801561085d575f80fd5b506103e961086c366004614b1d565b612739565b34801561087c575f80fd5b506104385f81565b34801561088f575f80fd5b5061043860fc5481565b3480156108a4575f80fd5b506103e96108b336600461468f565b6127c2565b3480156108c3575f80fd5b50673782dace9d900000610438565b3480156108dd575f80fd5b506103e96108ec36600461468f565b612815565b3480156108fc575f80fd5b506104386729a2241af62c000081565b348015610917575f80fd5b5061043861092636600461468f565b6101046020525f908152604090205481565b348015610943575f80fd5b5061043861095236600461468f565b5f908152610107602052604090205490565b34801561096f575f80fd5b5061098361097e36600461468f565b6128a0565b60405161038a959493929190614b38565b34801561099f575f80fd5b506104386109ae366004614b1d565b6101066020525f908152604090205481565b3480156109cb575f80fd5b506103e96109da366004614771565b612969565b3480156109ea575f80fd5b506104386109f9366004614705565b61298d565b6103e9610a0c3660046145fd565b6129b9565b348015610a1c575f80fd5b5060fb54610a2b9061ffff1681565b60405161ffff909116815260200161038a565b348015610a49575f80fd5b50610a52600181565b60405160ff909116815260200161038a565b348015610a6f575f80fd5b50610438610a7e36600461468f565b5f908152610108602052604090205490565b348015610a9b575f80fd5b5061043860fe5481565b348015610ab0575f80fd5b506103b2610abf366004614b7c565b61309c565b348015610acf575f80fd5b5061037e610ade366004614b1d565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b2b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b3a613305565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb09190614b97565b905060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c279190614b97565b604051636fc4c27f60e11b8152600160048201526001600160a01b039182169183169063df8984fe90602401602060405180830381865afa158015610c6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c929190614b97565b6001600160a01b031614610cb9576040516303b8ffef60e41b815260040160405180910390fd5b604051639f7053f560e01b81526001600160a01b03821690639f7053f590610ce79088908890600401614bda565b5f604051808303815f87803b158015610cfe575f80fd5b505af1158015610d10573d5f803e3d5ffd5b50505050610d1d8361334b565b604051633e71376960e21b81523360048201526001600160a01b0382169063f9c4dda490602401602060405180830381865afa158015610d5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d839190614bf5565b15610da15760405163707999fb60e11b815260040160405180910390fd5b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e179190614b97565b60fd54604051636a0b688160e01b81526001600482015260248101919091526001600160a01b039190911690636a0b6881906044016020604051808303815f875af1158015610e68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8c9190614b97565b60fd545f9081526101096020526040902080546001600160a01b0319166001600160a01b038316179055905086610ec35780610f38565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f389190614b97565b9250610f4687878787613372565b5050949350505050565b610f58613500565b610f60613305565b60fb5460408051633871d0f160e01b81529051610fde923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd99190614c10565b613559565b60fc5485908490839081610ff28486614c3b565b610ffc9190614c3b565b111561101b5760405163525e3de760e01b815260040160405180910390fd5b5f5b838110156110e4575f6101038b8b8481811061103b5761103b614c4e565b905060200281019061104d9190614c62565b60405161105b929190614ca4565b9081526020016040518091039020549050611075816135e5565b61107e81613631565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b848181106110b1576110b1614c4e565b90506020028101906110c39190614c62565b836040516110d393929190614cb3565b60405180910390a15060010161101d565b5081156111c15760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111609190614b97565b6001600160a01b0316638d0d8cb66111806729a2241af62c000085614cd6565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156111a9575f80fd5b505af11580156111bb573d5f803e3d5ffd5b50505050505b5f5b828110156112b7575f6101038989848181106111e1576111e1614c4e565b90506020028101906111f39190614c62565b604051611201929190614ca4565b908152602001604051809103902054905061121b816135e5565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b8346689898481811061128457611284614c4e565b90506020028101906112969190614c62565b836040516112a693929190614cb3565b60405180910390a1506001016111c3565b505f5b81811015611381575f6101038787848181106112d8576112d8614c4e565b90506020028101906112ea9190614c62565b6040516112f8929190614ca4565b9081526020016040518091039020549050611312816135e5565b61131b81613672565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f87878481811061134e5761134e614c4e565b90506020028101906113609190614c62565b8360405161137093929190614cb3565b60405180910390a1506001016112ba565b5050505061138f600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b815290516113ec923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb54611465903390600160501b90046001600160a01b0316613801565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c369060200161143c565b60fb5460408051633871d0f160e01b815290516114fe923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa15801561154c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115709190614c10565b81111561159057604051639519af4360e01b815260040160405180910390fd5b5f5b818110156116e5575f6101038585848181106115b0576115b0614c4e565b90506020028101906115c29190614c62565b6040516115d0929190614ca4565b90815260200160405180910390205490506115ea81613886565b611607576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b158015611669575f80fd5b505af115801561167b573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf798585848181106116b2576116b2614c4e565b90506020028101906116c49190614c62565b836040516116d493929190614cb3565b60405180910390a150600101611592565b506116ef81613ad1565b505050565b6060825f03611716576040516334d6e01560e01b815260040160405180910390fd5b5f82611723600186614ced565b61172d9190614cd6565b611738906001614c3b565b90505f6117458483614c3b565b905060fd548111611756578061175a565b60fd545b90505f82821161176a575f611774565b6117748383614ced565b6001600160401b0381111561178b5761178b61491d565b6040519080825280602002602001820160405280156117b4578160200160208202803683370190505b509050825b8281101561181e575f81815261010960205260409020546001600160a01b0316826117e48684614ced565b815181106117f4576117f4614c4e565b6001600160a01b03909216602092830291909101909101528061181681614d00565b9150506117b9565b5095945050505050565b5f8281526065602052604090206001015461184281613b1c565b6116ef8383613b26565b5f6101038383604051611860929190614ca4565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146118ee5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6118f88282613bab565b5050565b60fb5461191a903390600160501b90046001600160a01b0316613c11565b611922613c96565b565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611975573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119999190614b97565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b81526004016119c6929190614bda565b5f604051808303815f87803b1580156119dd575f80fd5b505af11580156119ef573d5f803e3d5ffd5b505050506119fc8161334b565b611a0533613ce8565b50335f9081526101066020908152604080832054808452610105909252909120600101611a33848683614d95565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d8726977790611a9490879087908790614e50565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b81529051611af7923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b806101015f828254611b099190614c3b565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f29060200161143c565b6101026020525f90815260409020805460018201805460ff9092169291611b6890614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9490614d18565b8015611bdf5780601f10611bb657610100808354040283529160200191611bdf565b820191905f5260205f20905b815481529060010190602001808311611bc257829003601f168201915b505050505090806002018054611bf490614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2090614d18565b8015611c6b5780601f10611c4257610100808354040283529160200191611c6b565b820191905f5260205f20905b815481529060010190602001808311611c4e57829003601f168201915b505050505090806003018054611c8090614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054611cac90614d18565b8015611cf75780601f10611cce57610100808354040283529160200191611cf7565b820191905f5260205f20905b815481529060010190602001808311611cda57829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611d2c613500565b60fb5460408051637a87fa0b60e01b81529051611d81923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df69190614b97565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611e2e575f80fd5b505af1158015611e40573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a81604051611e7691815260200190565b60405180910390a1611e88600160c955565b50565b60fb54611ea9903390600160501b90046001600160a01b0316613c11565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a29060200161143c565b6060825f03611f27576040516334d6e01560e01b815260040160405180910390fd5b5f82611f34600186614ced565b611f3e9190614cd6565b90505f611f4b8483614c3b565b6001600160a01b0387165f9081526101066020526040812054919250819003611f875760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311611fa35782611fa5565b805b92505f848411611fb5575f611fbf565b611fbf8585614ced565b6001600160401b03811115611fd657611fd661491d565b60405190808252806020026020018201604052801561200f57816020015b611ffc614484565b815260200190600190039081611ff45790505b509050845b848110156122af575f8481526101076020526040812080548390811061203c5761203c614c4e565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff16600581111561207e5761207e614823565b600581111561208f5761208f614823565b81526020016001820180546120a390614d18565b80601f01602080910402602001604051908101604052809291908181526020018280546120cf90614d18565b801561211a5780601f106120f15761010080835404028352916020019161211a565b820191905f5260205f20905b8154815290600101906020018083116120fd57829003601f168201915b5050505050815260200160028201805461213390614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461215f90614d18565b80156121aa5780601f10612181576101008083540402835291602001916121aa565b820191905f5260205f20905b81548152906001019060200180831161218d57829003601f168201915b505050505081526020016003820180546121c390614d18565b80601f01602080910402602001604051908101604052809291908181526020018280546121ef90614d18565b801561223a5780601f106122115761010080835404028352916020019161223a565b820191905f5260205f20905b81548152906001019060200180831161221d57829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152836122808985614ced565b8151811061229057612290614c4e565b60200260200101819052505080806122a790614d00565b915050612014565b5098975050505050505050565b5f6101005460ff546122ce9190614ced565b905090565b60fb546122f1903390600160501b90046001600160a01b0316613c11565b611922613d56565b5f8183111561231b5760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f90815261010660205260408120549061234b825f908152610107602052604090205490565b905080841161235a578361235c565b805b93505f855b858110156123b9575f8481526101076020526040812080548390811061238957612389614c4e565b905f5260205f200154905061239d81613d93565b156123b057826123ac81614e7b565b9350505b50600101612361565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f03612410576040516334d6e01560e01b815260040160405180910390fd5b5f8261241d600186614ced565b6124279190614cd6565b612432906001614c3b565b90505f61243f8483614c3b565b905060fe5481116124505780612454565b60fe545b90505f846001600160401b0381111561246f5761246f61491d565b6040519080825280602002602001820160405280156124a857816020015b612495614484565b81526020019060019003908161248d5790505b5090505f835b8381101561272d576124bf81613886565b1561271b575f818152610102602052604090819020815161010081019092528054829060ff1660058111156124f6576124f6614823565b600581111561250757612507614823565b815260200160018201805461251b90614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461254790614d18565b80156125925780601f1061256957610100808354040283529160200191612592565b820191905f5260205f20905b81548152906001019060200180831161257557829003601f168201915b505050505081526020016002820180546125ab90614d18565b80601f01602080910402602001604051908101604052809291908181526020018280546125d790614d18565b80156126225780601f106125f957610100808354040283529160200191612622565b820191905f5260205f20905b81548152906001019060200180831161260557829003601f168201915b5050505050815260200160038201805461263b90614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461266790614d18565b80156126b25780601f10612689576101008083540402835291602001916126b2565b820191905f5260205f20905b81548152906001019060200180831161269557829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152835184908490811061270157612701614c4e565b6020026020010181905250818061271790614d00565b9250505b8061272581614d00565b9150506124ae565b50815295945050505050565b5f61274381613b1c565b61274c8261334b565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb546127e0903390600160501b90046001600160a01b0316613801565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b49060200161143c565b60fb5460408051637a87fa0b60e01b8152905161286a923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da99060200161143c565b6101056020525f90815260409020805460018201805460ff80841694610100909404169291906128cf90614d18565b80601f01602080910402602001604051908101604052809291908181526020018280546128fb90614d18565b80156129465780601f1061291d57610100808354040283529160200191612946565b820191905f5260205f20905b81548152906001019060200180831161292957829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f8281526065602052604090206001015461298381613b1c565b6116ef8383613bab565b610107602052815f5260405f2081815481106129a7575f80fd5b905f5260205f20015f91509150505481565b6129c1613500565b6129c9613305565b5f6129d333613ce8565b90505f806129e388878686614019565b915091505f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a39573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614b97565b90505f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad59190614b97565b90505f5b84811015612f3457816001600160a01b0316639f55941b8d8d84818110612b0257612b02614c4e565b9050602002810190612b149190614c62565b8d8d86818110612b2657612b26614c4e565b9050602002810190612b389190614c62565b8d8d88818110612b4a57612b4a614c4e565b9050602002810190612b5c9190614c62565b6040518763ffffffff1660e01b8152600401612b7d96959493929190614ea0565b5f604051808303815f87803b158015612b94575f80fd5b505af1158015612ba6573d5f803e3d5ffd5b505050505f836001600160a01b0316637f70ce0d6001898589612bc99190614c3b565b60fe546040516001600160e01b031960e087901b16815260ff90941660048501526024840192909252604483015260648201526084016020604051808303815f875af1158015612c1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c3f9190614b97565b604080516101008101909152909150805f81526020018e8e85818110612c6757612c67614c4e565b9050602002810190612c799190614c62565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018c8c85818110612cc457612cc4614c4e565b9050602002810190612cd69190614c62565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018a8a85818110612d2157612d21614c4e565b9050602002810190612d339190614c62565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b03841660208084019190915260408084018c905260608401839052608090930182905260fe54825261010290522081518154829060ff19166001836005811115612dbb57612dbb614823565b021790555060208201516001820190612dd49082614ee8565b5060408201516002820190612de99082614ee8565b5060608201516003820190612dfe9082614ee8565b5060808201516004820180546001600160a01b0319166001600160a01b0390921691909117905560a0820151600582015560c0820151600682015560e09091015160079091015560fe546101038e8e85818110612e5d57612e5d614c4e565b9050602002810190612e6f9190614c62565b604051612e7d929190614ca4565b9081526040805160209281900383019020929092555f898152610107825291822060fe5481546001810183559184529190922090910155337fab5128638b64e6216e80dfafa70d3cb6d54913a536dc41e76eb4a04cfbe979cf8e8e85818110612ee857612ee8614c4e565b9050602002810190612efa9190614c62565b60fe54604051612f0c93929190614cb3565b60405180910390a260fe8054905f612f2383614d00565b919050555081600101915050612ad9565b5060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f86573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612faa9190614b97565b6001600160a01b031663eda0ae128560fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561300a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061302e9190614c10565b6130389190614cd6565b8d8d8d8d8b8a6040518863ffffffff1660e01b815260040161305f9695949392919061502f565b5f604051808303818588803b158015613076575f80fd5b505af1158015613088573d5f803e3d5ffd5b5050505050505050505061138f600160c955565b5f806130a733613ce8565b5f818152610105602052604090205490915083151561010090910460ff161515036130e557604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613136573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061315a9190614c10565b5f82815261010860205260409020546131739190614c3b565b4310156131935760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b03169150821561328a576001600160a01b038216311561321257816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156131fb575f80fd5b505af115801561320d573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613263573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132879190614b97565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff16156119225760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016118e5565b6001600160a01b038116611e885760405163d92e233d60e01b815260040160405180910390fd5b6040518060a00160405280600115158152602001851515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b0384166020808401919091523360409384015260fd548252610105815290829020835181549285015161ffff1990931690151561ff00191617610100921515929092029190911781559082015160018201906134289082614ee8565b5060608201516002820180546001600160a01b03199081166001600160a01b039384161790915560809093015160039092018054909316911617905560fd8054335f9081526101066020908152604080832084905592825261010890529081204390558154919061349883614d00565b9190505550336001600160a01b03167f55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd482600160fd546134d89190614ced565b604080516001600160a01b039093168352602083019190915287151590820152606001611a94565b600260c954036135525760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016118e5565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa1580156135a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135c89190614bf5565b6116ef5760405163168dfea160e01b815260040160405180910390fd5b80158061361357505f818152610102602052604081205460ff16600581111561361057613610614823565b14155b15611e88576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff80548452610104909252822083905580549161366a83614d00565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa1580156136ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137139190614b97565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa158015613772573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137969190614c10565b6137a890673782dace9d900000614ced565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b1580156137e5575f80fd5b505af11580156137f7573d5f803e3d5ffd5b5050505050505050565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa158015613845573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138699190614bf5565b6118f85760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff1660058111156138bb576138bb614823565b60058111156138cc576138cc614823565b81526020016001820180546138e090614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461390c90614d18565b80156139575780601f1061392e57610100808354040283529160200191613957565b820191905f5260205f20905b81548152906001019060200180831161393a57829003601f168201915b5050505050815260200160028201805461397090614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461399c90614d18565b80156139e75780601f106139be576101008083540402835291602001916139e7565b820191905f5260205f20905b8154815290600101906020018083116139ca57829003601f168201915b50505050508152602001600382018054613a0090614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054613a2c90614d18565b8015613a775780601f10613a4e57610100808354040283529160200191613a77565b820191905f5260205f20905b815481529060010190602001808311613a5a57829003601f168201915b50505091835250506004828101546001600160a01b03166020830152600583015460408301526006830154606083015260079092015460809091015290915081516005811115613ac957613ac9614823565b149392505050565b806101015f828254613ae39190614ced565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece39060200161143c565b611e888133614234565b613b3082826123c4565b6118f8575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613b673390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b613bb582826123c4565b156118f8575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015613c55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c799190614bf5565b6118f85760405163c4230ae360e01b815260040160405180910390fd5b613c9e61428d565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381165f908152610106602052604081205490819003613d225760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff16613d515760405163c11cb1df60e01b815260040160405180910390fd5b919050565b613d5e613305565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613ccb3390565b5f818152610102602052604080822081516101008101909252805483929190829060ff166005811115613dc857613dc8614823565b6005811115613dd957613dd9614823565b8152602001600182018054613ded90614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054613e1990614d18565b8015613e645780601f10613e3b57610100808354040283529160200191613e64565b820191905f5260205f20905b815481529060010190602001808311613e4757829003601f168201915b50505050508152602001600282018054613e7d90614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054613ea990614d18565b8015613ef45780601f10613ecb57610100808354040283529160200191613ef4565b820191905f5260205f20905b815481529060010190602001808311613ed757829003601f168201915b50505050508152602001600382018054613f0d90614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054613f3990614d18565b8015613f845780601f10613f5b57610100808354040283529160200191613f84565b820191905f5260205f20905b815481529060010190602001808311613f6757829003601f168201915b505050918352505060048201546001600160a01b0316602082015260058083015460408301526006830154606083015260079092015460809091015290915081516005811115613fd657613fd6614823565b1480613ff45750600281516005811115613ff257613ff2614823565b145b80614011575060018151600581111561400f5761400f614823565b145b159392505050565b5f80848614158061402a5750838614155b156140485760405163e5fe884360e01b815260040160405180910390fd5b85915081158061405d575060fb5461ffff1682115b1561407b576040516379b348ff60e11b815260040160405180910390fd5b505f8281526101076020526040812054906140973382846122f9565b60fb546001600160401b039182169250620100009004166140b88483614c3b565b11156140d757604051633e10caad60e21b815260040160405180910390fd5b6140e9673782dace9d90000084614cd6565b341461410857604051635aaa2d1f60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b031663aa9537956040518163ffffffff1660e01b8152600401602060405180830381865afa158015614159573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061417d9190614b97565b6001600160a01b031663b178e38e3360016141988786614c3b565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260ff90911660248301526044820152606401602060405180830381865afa1580156141e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061420d9190614bf5565b61422a57604051633bf053fd60e11b815260040160405180910390fd5b5094509492505050565b61423e82826123c4565b6118f85761424b816142d6565b6142568360206142e8565b60405160200161426792919061506b565b60408051601f198184030181529082905262461bcd60e51b82526118e5916004016150df565b60975460ff166119225760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016118e5565b6060610b2b6001600160a01b03831660145b60605f6142f6836002614cd6565b614301906002614c3b565b6001600160401b038111156143185761431861491d565b6040519080825280601f01601f191660200182016040528015614342576020820181803683370190505b509050600360fc1b815f8151811061435c5761435c614c4e565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061438a5761438a614c4e565b60200101906001600160f81b03191690815f1a9053505f6143ac846002614cd6565b6143b7906001614c3b565b90505b600181111561442e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106143eb576143eb614c4e565b1a60f81b82828151811061440157614401614c4e565b60200101906001600160f81b03191690815f1a90535060049490941c93614427816150f1565b90506143ba565b50831561447d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016118e5565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f602082840312156144de575f80fd5b81356001600160e01b03198116811461447d575f80fd5b8015158114611e88575f80fd5b5f8083601f840112614512575f80fd5b5081356001600160401b03811115614528575f80fd5b60208301915083602082850101111561453f575f80fd5b9250929050565b6001600160a01b0381168114611e88575f80fd5b5f805f806060858703121561456d575f80fd5b8435614578816144f5565b935060208501356001600160401b03811115614592575f80fd5b61459e87828801614502565b90945092505060408501356145b281614546565b939692955090935050565b5f8083601f8401126145cd575f80fd5b5081356001600160401b038111156145e3575f80fd5b6020830191508360208260051b850101111561453f575f80fd5b5f805f805f8060608789031215614612575f80fd5b86356001600160401b0380821115614628575f80fd5b6146348a838b016145bd565b9098509650602089013591508082111561464c575f80fd5b6146588a838b016145bd565b90965094506040890135915080821115614670575f80fd5b5061467d89828a016145bd565b979a9699509497509295939492505050565b5f6020828403121561469f575f80fd5b5035919050565b5f602082840312156146b6575f80fd5b813561ffff8116811461447d575f80fd5b5f80602083850312156146d8575f80fd5b82356001600160401b038111156146ed575f80fd5b6146f9858286016145bd565b90969095509350505050565b5f8060408385031215614716575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b818110156147655783516001600160a01b031683529284019291840191600101614740565b50909695505050505050565b5f8060408385031215614782575f80fd5b82359150602083013561479481614546565b809150509250929050565b5f80602083850312156147b0575f80fd5b82356001600160401b038111156147c5575f80fd5b6146f985828601614502565b5f805f604084860312156147e3575f80fd5b83356001600160401b038111156147f8575f80fd5b61480486828701614502565b909450925050602084013561481881614546565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b6006811061485357634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015614871578181015183820152602001614859565b50505f910152565b5f8151808452614890816020860160208601614857565b601f01601f19169290920160200192915050565b5f6101006148b2838c614837565b8060208401526148c48184018b614879565b905082810360408401526148d8818a614879565b905082810360608401526148ec8189614879565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215614941575f80fd5b81356001600160401b0380821115614957575f80fd5b818401915084601f83011261496a575f80fd5b81358181111561497c5761497c61491d565b604051601f8201601f19908116603f011681019083821181831017156149a4576149a461491d565b816040528281528760208487010111156149bc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f602082840312156149eb575f80fd5b81356001600160401b038116811461447d575f80fd5b5f805f60608486031215614a13575f80fd5b8335614a1e81614546565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b83811015614b0f57603f198984030185528151610100614a79858351614837565b88820151818a870152614a8e82870182614879565b9150508782015185820389870152614aa68282614879565b91505060608083015186830382880152614ac08382614879565b92505050608080830151614ade828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e09182015191909401529386019390860190600101614a58565b509098975050505050505050565b5f60208284031215614b2d575f80fd5b813561447d81614546565b8515158152841515602082015260a060408201525f614b5a60a0830186614879565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f60208284031215614b8c575f80fd5b813561447d816144f5565b5f60208284031215614ba7575f80fd5b815161447d81614546565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f614bed602083018486614bb2565b949350505050565b5f60208284031215614c05575f80fd5b815161447d816144f5565b5f60208284031215614c20575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2b57610b2b614c27565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112614c77575f80fd5b8301803591506001600160401b03821115614c90575f80fd5b60200191503681900382131561453f575f80fd5b818382375f9101908152919050565b604081525f614cc6604083018587614bb2565b9050826020830152949350505050565b8082028115828204841417610b2b57610b2b614c27565b81810381811115610b2b57610b2b614c27565b5f60018201614d1157614d11614c27565b5060010190565b600181811c90821680614d2c57607f821691505b602082108103614d4a57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156116ef575f81815260208120601f850160051c81016020861015614d765750805b601f850160051c820191505b8181101561138f57828155600101614d82565b6001600160401b03831115614dac57614dac61491d565b614dc083614dba8354614d18565b83614d50565b5f601f841160018114614df1575f8515614dda5750838201355b5f19600387901b1c1916600186901b178355614e49565b5f83815260209020601f19861690835b82811015614e215786850135825560209485019460019092019101614e01565b5086821015614e3d575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f614e63604083018587614bb2565b905060018060a01b0383166020830152949350505050565b5f6001600160401b03808316818103614e9657614e96614c27565b6001019392505050565b606081525f614eb360608301888a614bb2565b8281036020840152614ec6818789614bb2565b90508281036040840152614edb818587614bb2565b9998505050505050505050565b81516001600160401b03811115614f0157614f0161491d565b614f1581614f0f8454614d18565b84614d50565b602080601f831160018114614f48575f8415614f315750858301515b5f19600386901b1c1916600185901b17855561138f565b5f85815260208120601f198616915b82811015614f7657888601518255948401946001909101908401614f57565b5085821015614f9357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8183525f6020808501808196508560051b81019150845f5b878110156150225782840389528135601e19883603018112614fdb575f80fd5b870185810190356001600160401b03811115614ff5575f80fd5b803603821315615003575f80fd5b61500e868284614bb2565b9a87019a9550505090840190600101614fbb565b5091979650505050505050565b608081525f61504260808301888a614fa3565b8281036020840152615055818789614fa3565b6040840195909552505060600152949350505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516150a2816017850160208801614857565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516150d3816028840160208801614857565b01602801949350505050565b602081525f61447d6020830184614879565b5f816150ff576150ff614c27565b505f19019056fea264697066735822122038587c5537098698379d47e206c76731944e1671f5e10be7621fd6860ccddd1664736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", +} + +// PermissionlessNodeRegistryABI is the input ABI used to generate the binding from. +// Deprecated: Use PermissionlessNodeRegistryMetaData.ABI instead. +var PermissionlessNodeRegistryABI = PermissionlessNodeRegistryMetaData.ABI + +// PermissionlessNodeRegistryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use PermissionlessNodeRegistryMetaData.Bin instead. +var PermissionlessNodeRegistryBin = PermissionlessNodeRegistryMetaData.Bin + +// DeployPermissionlessNodeRegistry deploys a new Ethereum contract, binding an instance of PermissionlessNodeRegistry to it. +func DeployPermissionlessNodeRegistry(auth *bind.TransactOpts, backend bind.ContractBackend, _admin common.Address, _staderConfig common.Address) (common.Address, *types.Transaction, *PermissionlessNodeRegistry, error) { + parsed, err := PermissionlessNodeRegistryMetaData.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(PermissionlessNodeRegistryBin), backend, _admin, _staderConfig) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &PermissionlessNodeRegistry{PermissionlessNodeRegistryCaller: PermissionlessNodeRegistryCaller{contract: contract}, PermissionlessNodeRegistryTransactor: PermissionlessNodeRegistryTransactor{contract: contract}, PermissionlessNodeRegistryFilterer: PermissionlessNodeRegistryFilterer{contract: contract}}, nil +} + +// PermissionlessNodeRegistry is an auto generated Go binding around an Ethereum contract. +type PermissionlessNodeRegistry struct { + PermissionlessNodeRegistryCaller // Read-only binding to the contract + PermissionlessNodeRegistryTransactor // Write-only binding to the contract + PermissionlessNodeRegistryFilterer // Log filterer for contract events +} + +// PermissionlessNodeRegistryCaller is an auto generated read-only Go binding around an Ethereum contract. +type PermissionlessNodeRegistryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PermissionlessNodeRegistryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type PermissionlessNodeRegistryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PermissionlessNodeRegistryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type PermissionlessNodeRegistryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PermissionlessNodeRegistrySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type PermissionlessNodeRegistrySession struct { + Contract *PermissionlessNodeRegistry // 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 +} + +// PermissionlessNodeRegistryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type PermissionlessNodeRegistryCallerSession struct { + Contract *PermissionlessNodeRegistryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// PermissionlessNodeRegistryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type PermissionlessNodeRegistryTransactorSession struct { + Contract *PermissionlessNodeRegistryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// PermissionlessNodeRegistryRaw is an auto generated low-level Go binding around an Ethereum contract. +type PermissionlessNodeRegistryRaw struct { + Contract *PermissionlessNodeRegistry // Generic contract binding to access the raw methods on +} + +// PermissionlessNodeRegistryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type PermissionlessNodeRegistryCallerRaw struct { + Contract *PermissionlessNodeRegistryCaller // Generic read-only contract binding to access the raw methods on +} + +// PermissionlessNodeRegistryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type PermissionlessNodeRegistryTransactorRaw struct { + Contract *PermissionlessNodeRegistryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewPermissionlessNodeRegistry creates a new instance of PermissionlessNodeRegistry, bound to a specific deployed contract. +func NewPermissionlessNodeRegistry(address common.Address, backend bind.ContractBackend) (*PermissionlessNodeRegistry, error) { + contract, err := bindPermissionlessNodeRegistry(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistry{PermissionlessNodeRegistryCaller: PermissionlessNodeRegistryCaller{contract: contract}, PermissionlessNodeRegistryTransactor: PermissionlessNodeRegistryTransactor{contract: contract}, PermissionlessNodeRegistryFilterer: PermissionlessNodeRegistryFilterer{contract: contract}}, nil +} + +// NewPermissionlessNodeRegistryCaller creates a new read-only instance of PermissionlessNodeRegistry, bound to a specific deployed contract. +func NewPermissionlessNodeRegistryCaller(address common.Address, caller bind.ContractCaller) (*PermissionlessNodeRegistryCaller, error) { + contract, err := bindPermissionlessNodeRegistry(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryCaller{contract: contract}, nil +} + +// NewPermissionlessNodeRegistryTransactor creates a new write-only instance of PermissionlessNodeRegistry, bound to a specific deployed contract. +func NewPermissionlessNodeRegistryTransactor(address common.Address, transactor bind.ContractTransactor) (*PermissionlessNodeRegistryTransactor, error) { + contract, err := bindPermissionlessNodeRegistry(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryTransactor{contract: contract}, nil +} + +// NewPermissionlessNodeRegistryFilterer creates a new log filterer instance of PermissionlessNodeRegistry, bound to a specific deployed contract. +func NewPermissionlessNodeRegistryFilterer(address common.Address, filterer bind.ContractFilterer) (*PermissionlessNodeRegistryFilterer, error) { + contract, err := bindPermissionlessNodeRegistry(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryFilterer{contract: contract}, nil +} + +// bindPermissionlessNodeRegistry binds a generic wrapper to an already deployed contract. +func bindPermissionlessNodeRegistry(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := PermissionlessNodeRegistryMetaData.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 (_PermissionlessNodeRegistry *PermissionlessNodeRegistryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _PermissionlessNodeRegistry.Contract.PermissionlessNodeRegistryCaller.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 (_PermissionlessNodeRegistry *PermissionlessNodeRegistryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.PermissionlessNodeRegistryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.PermissionlessNodeRegistryTransactor.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 (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _PermissionlessNodeRegistry.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 (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.contract.Transact(opts, method, params...) +} + +// COLLATERALETH is a free data retrieval call binding the contract method 0x4f59ed80. +// +// Solidity: function COLLATERAL_ETH() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) COLLATERALETH(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "COLLATERAL_ETH") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// COLLATERALETH is a free data retrieval call binding the contract method 0x4f59ed80. +// +// Solidity: function COLLATERAL_ETH() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) COLLATERALETH() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.COLLATERALETH(&_PermissionlessNodeRegistry.CallOpts) +} + +// COLLATERALETH is a free data retrieval call binding the contract method 0x4f59ed80. +// +// Solidity: function COLLATERAL_ETH() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) COLLATERALETH() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.COLLATERALETH(&_PermissionlessNodeRegistry.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) DEFAULTADMINROLE() ([32]byte, error) { + return _PermissionlessNodeRegistry.Contract.DEFAULTADMINROLE(&_PermissionlessNodeRegistry.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _PermissionlessNodeRegistry.Contract.DEFAULTADMINROLE(&_PermissionlessNodeRegistry.CallOpts) +} + +// FRONTRUNPENALTY is a free data retrieval call binding the contract method 0xbb7306bf. +// +// Solidity: function FRONT_RUN_PENALTY() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) FRONTRUNPENALTY(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "FRONT_RUN_PENALTY") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// FRONTRUNPENALTY is a free data retrieval call binding the contract method 0xbb7306bf. +// +// Solidity: function FRONT_RUN_PENALTY() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) FRONTRUNPENALTY() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.FRONTRUNPENALTY(&_PermissionlessNodeRegistry.CallOpts) +} + +// FRONTRUNPENALTY is a free data retrieval call binding the contract method 0xbb7306bf. +// +// Solidity: function FRONT_RUN_PENALTY() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) FRONTRUNPENALTY() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.FRONTRUNPENALTY(&_PermissionlessNodeRegistry.CallOpts) +} + +// POOLID is a free data retrieval call binding the contract method 0xe0d7d0e9. +// +// Solidity: function POOL_ID() view returns(uint8) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) POOLID(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "POOL_ID") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// POOLID is a free data retrieval call binding the contract method 0xe0d7d0e9. +// +// Solidity: function POOL_ID() view returns(uint8) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) POOLID() (uint8, error) { + return _PermissionlessNodeRegistry.Contract.POOLID(&_PermissionlessNodeRegistry.CallOpts) +} + +// POOLID is a free data retrieval call binding the contract method 0xe0d7d0e9. +// +// Solidity: function POOL_ID() view returns(uint8) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) POOLID() (uint8, error) { + return _PermissionlessNodeRegistry.Contract.POOLID(&_PermissionlessNodeRegistry.CallOpts) +} + +// GetAllActiveValidators is a free data retrieval call binding the contract method 0x99888898. +// +// Solidity: function getAllActiveValidators(uint256 _pageNumber, uint256 _pageSize) view returns((uint8,bytes,bytes,bytes,address,uint256,uint256,uint256)[]) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) GetAllActiveValidators(opts *bind.CallOpts, _pageNumber *big.Int, _pageSize *big.Int) ([]Validator, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "getAllActiveValidators", _pageNumber, _pageSize) + + if err != nil { + return *new([]Validator), err + } + + out0 := *abi.ConvertType(out[0], new([]Validator)).(*[]Validator) + + return out0, err + +} + +// GetAllActiveValidators is a free data retrieval call binding the contract method 0x99888898. +// +// Solidity: function getAllActiveValidators(uint256 _pageNumber, uint256 _pageSize) view returns((uint8,bytes,bytes,bytes,address,uint256,uint256,uint256)[]) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) GetAllActiveValidators(_pageNumber *big.Int, _pageSize *big.Int) ([]Validator, error) { + return _PermissionlessNodeRegistry.Contract.GetAllActiveValidators(&_PermissionlessNodeRegistry.CallOpts, _pageNumber, _pageSize) +} + +// GetAllActiveValidators is a free data retrieval call binding the contract method 0x99888898. +// +// Solidity: function getAllActiveValidators(uint256 _pageNumber, uint256 _pageSize) view returns((uint8,bytes,bytes,bytes,address,uint256,uint256,uint256)[]) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) GetAllActiveValidators(_pageNumber *big.Int, _pageSize *big.Int) ([]Validator, error) { + return _PermissionlessNodeRegistry.Contract.GetAllActiveValidators(&_PermissionlessNodeRegistry.CallOpts, _pageNumber, _pageSize) +} + +// GetAllNodeELVaultAddress is a free data retrieval call binding the contract method 0x2d32924f. +// +// Solidity: function getAllNodeELVaultAddress(uint256 _pageNumber, uint256 _pageSize) view returns(address[]) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) GetAllNodeELVaultAddress(opts *bind.CallOpts, _pageNumber *big.Int, _pageSize *big.Int) ([]common.Address, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "getAllNodeELVaultAddress", _pageNumber, _pageSize) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// GetAllNodeELVaultAddress is a free data retrieval call binding the contract method 0x2d32924f. +// +// Solidity: function getAllNodeELVaultAddress(uint256 _pageNumber, uint256 _pageSize) view returns(address[]) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) GetAllNodeELVaultAddress(_pageNumber *big.Int, _pageSize *big.Int) ([]common.Address, error) { + return _PermissionlessNodeRegistry.Contract.GetAllNodeELVaultAddress(&_PermissionlessNodeRegistry.CallOpts, _pageNumber, _pageSize) +} + +// GetAllNodeELVaultAddress is a free data retrieval call binding the contract method 0x2d32924f. +// +// Solidity: function getAllNodeELVaultAddress(uint256 _pageNumber, uint256 _pageSize) view returns(address[]) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) GetAllNodeELVaultAddress(_pageNumber *big.Int, _pageSize *big.Int) ([]common.Address, error) { + return _PermissionlessNodeRegistry.Contract.GetAllNodeELVaultAddress(&_PermissionlessNodeRegistry.CallOpts, _pageNumber, _pageSize) +} + +// GetCollateralETH is a free data retrieval call binding the contract method 0xb01db078. +// +// Solidity: function getCollateralETH() pure returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) GetCollateralETH(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "getCollateralETH") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetCollateralETH is a free data retrieval call binding the contract method 0xb01db078. +// +// Solidity: function getCollateralETH() pure returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) GetCollateralETH() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.GetCollateralETH(&_PermissionlessNodeRegistry.CallOpts) +} + +// GetCollateralETH is a free data retrieval call binding the contract method 0xb01db078. +// +// Solidity: function getCollateralETH() pure returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) GetCollateralETH() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.GetCollateralETH(&_PermissionlessNodeRegistry.CallOpts) +} + +// GetOperatorRewardAddress is a free data retrieval call binding the contract method 0x83ea2358. +// +// Solidity: function getOperatorRewardAddress(uint256 _operatorId) view returns(address) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) GetOperatorRewardAddress(opts *bind.CallOpts, _operatorId *big.Int) (common.Address, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "getOperatorRewardAddress", _operatorId) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetOperatorRewardAddress is a free data retrieval call binding the contract method 0x83ea2358. +// +// Solidity: function getOperatorRewardAddress(uint256 _operatorId) view returns(address) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) GetOperatorRewardAddress(_operatorId *big.Int) (common.Address, error) { + return _PermissionlessNodeRegistry.Contract.GetOperatorRewardAddress(&_PermissionlessNodeRegistry.CallOpts, _operatorId) +} + +// GetOperatorRewardAddress is a free data retrieval call binding the contract method 0x83ea2358. +// +// Solidity: function getOperatorRewardAddress(uint256 _operatorId) view returns(address) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) GetOperatorRewardAddress(_operatorId *big.Int) (common.Address, error) { + return _PermissionlessNodeRegistry.Contract.GetOperatorRewardAddress(&_PermissionlessNodeRegistry.CallOpts, _operatorId) +} + +// GetOperatorTotalKeys is a free data retrieval call binding the contract method 0xc34ade5c. +// +// Solidity: function getOperatorTotalKeys(uint256 _operatorId) view returns(uint256 _totalKeys) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) GetOperatorTotalKeys(opts *bind.CallOpts, _operatorId *big.Int) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "getOperatorTotalKeys", _operatorId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetOperatorTotalKeys is a free data retrieval call binding the contract method 0xc34ade5c. +// +// Solidity: function getOperatorTotalKeys(uint256 _operatorId) view returns(uint256 _totalKeys) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) GetOperatorTotalKeys(_operatorId *big.Int) (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.GetOperatorTotalKeys(&_PermissionlessNodeRegistry.CallOpts, _operatorId) +} + +// GetOperatorTotalKeys is a free data retrieval call binding the contract method 0xc34ade5c. +// +// Solidity: function getOperatorTotalKeys(uint256 _operatorId) view returns(uint256 _totalKeys) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) GetOperatorTotalKeys(_operatorId *big.Int) (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.GetOperatorTotalKeys(&_PermissionlessNodeRegistry.CallOpts, _operatorId) +} + +// GetOperatorTotalNonTerminalKeys is a free data retrieval call binding the contract method 0x8a25bcec. +// +// Solidity: function getOperatorTotalNonTerminalKeys(address _nodeOperator, uint256 _startIndex, uint256 _endIndex) view returns(uint64) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) GetOperatorTotalNonTerminalKeys(opts *bind.CallOpts, _nodeOperator common.Address, _startIndex *big.Int, _endIndex *big.Int) (uint64, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "getOperatorTotalNonTerminalKeys", _nodeOperator, _startIndex, _endIndex) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GetOperatorTotalNonTerminalKeys is a free data retrieval call binding the contract method 0x8a25bcec. +// +// Solidity: function getOperatorTotalNonTerminalKeys(address _nodeOperator, uint256 _startIndex, uint256 _endIndex) view returns(uint64) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) GetOperatorTotalNonTerminalKeys(_nodeOperator common.Address, _startIndex *big.Int, _endIndex *big.Int) (uint64, error) { + return _PermissionlessNodeRegistry.Contract.GetOperatorTotalNonTerminalKeys(&_PermissionlessNodeRegistry.CallOpts, _nodeOperator, _startIndex, _endIndex) +} + +// GetOperatorTotalNonTerminalKeys is a free data retrieval call binding the contract method 0x8a25bcec. +// +// Solidity: function getOperatorTotalNonTerminalKeys(address _nodeOperator, uint256 _startIndex, uint256 _endIndex) view returns(uint64) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) GetOperatorTotalNonTerminalKeys(_nodeOperator common.Address, _startIndex *big.Int, _endIndex *big.Int) (uint64, error) { + return _PermissionlessNodeRegistry.Contract.GetOperatorTotalNonTerminalKeys(&_PermissionlessNodeRegistry.CallOpts, _nodeOperator, _startIndex, _endIndex) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _PermissionlessNodeRegistry.Contract.GetRoleAdmin(&_PermissionlessNodeRegistry.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _PermissionlessNodeRegistry.Contract.GetRoleAdmin(&_PermissionlessNodeRegistry.CallOpts, role) +} + +// GetSocializingPoolStateChangeBlock is a free data retrieval call binding the contract method 0xebb5c174. +// +// Solidity: function getSocializingPoolStateChangeBlock(uint256 _operatorId) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) GetSocializingPoolStateChangeBlock(opts *bind.CallOpts, _operatorId *big.Int) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "getSocializingPoolStateChangeBlock", _operatorId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetSocializingPoolStateChangeBlock is a free data retrieval call binding the contract method 0xebb5c174. +// +// Solidity: function getSocializingPoolStateChangeBlock(uint256 _operatorId) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) GetSocializingPoolStateChangeBlock(_operatorId *big.Int) (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.GetSocializingPoolStateChangeBlock(&_PermissionlessNodeRegistry.CallOpts, _operatorId) +} + +// GetSocializingPoolStateChangeBlock is a free data retrieval call binding the contract method 0xebb5c174. +// +// Solidity: function getSocializingPoolStateChangeBlock(uint256 _operatorId) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) GetSocializingPoolStateChangeBlock(_operatorId *big.Int) (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.GetSocializingPoolStateChangeBlock(&_PermissionlessNodeRegistry.CallOpts, _operatorId) +} + +// GetTotalActiveValidatorCount is a free data retrieval call binding the contract method 0x77c359e1. +// +// Solidity: function getTotalActiveValidatorCount() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) GetTotalActiveValidatorCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "getTotalActiveValidatorCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetTotalActiveValidatorCount is a free data retrieval call binding the contract method 0x77c359e1. +// +// Solidity: function getTotalActiveValidatorCount() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) GetTotalActiveValidatorCount() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.GetTotalActiveValidatorCount(&_PermissionlessNodeRegistry.CallOpts) +} + +// GetTotalActiveValidatorCount is a free data retrieval call binding the contract method 0x77c359e1. +// +// Solidity: function getTotalActiveValidatorCount() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) GetTotalActiveValidatorCount() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.GetTotalActiveValidatorCount(&_PermissionlessNodeRegistry.CallOpts) +} + +// GetTotalQueuedValidatorCount is a free data retrieval call binding the contract method 0x7bd977d9. +// +// Solidity: function getTotalQueuedValidatorCount() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) GetTotalQueuedValidatorCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "getTotalQueuedValidatorCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetTotalQueuedValidatorCount is a free data retrieval call binding the contract method 0x7bd977d9. +// +// Solidity: function getTotalQueuedValidatorCount() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) GetTotalQueuedValidatorCount() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.GetTotalQueuedValidatorCount(&_PermissionlessNodeRegistry.CallOpts) +} + +// GetTotalQueuedValidatorCount is a free data retrieval call binding the contract method 0x7bd977d9. +// +// Solidity: function getTotalQueuedValidatorCount() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) GetTotalQueuedValidatorCount() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.GetTotalQueuedValidatorCount(&_PermissionlessNodeRegistry.CallOpts) +} + +// GetValidatorsByOperator is a free data retrieval call binding the contract method 0x683547b8. +// +// Solidity: function getValidatorsByOperator(address _operator, uint256 _pageNumber, uint256 _pageSize) view returns((uint8,bytes,bytes,bytes,address,uint256,uint256,uint256)[]) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) GetValidatorsByOperator(opts *bind.CallOpts, _operator common.Address, _pageNumber *big.Int, _pageSize *big.Int) ([]Validator, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "getValidatorsByOperator", _operator, _pageNumber, _pageSize) + + if err != nil { + return *new([]Validator), err + } + + out0 := *abi.ConvertType(out[0], new([]Validator)).(*[]Validator) + + return out0, err + +} + +// GetValidatorsByOperator is a free data retrieval call binding the contract method 0x683547b8. +// +// Solidity: function getValidatorsByOperator(address _operator, uint256 _pageNumber, uint256 _pageSize) view returns((uint8,bytes,bytes,bytes,address,uint256,uint256,uint256)[]) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) GetValidatorsByOperator(_operator common.Address, _pageNumber *big.Int, _pageSize *big.Int) ([]Validator, error) { + return _PermissionlessNodeRegistry.Contract.GetValidatorsByOperator(&_PermissionlessNodeRegistry.CallOpts, _operator, _pageNumber, _pageSize) +} + +// GetValidatorsByOperator is a free data retrieval call binding the contract method 0x683547b8. +// +// Solidity: function getValidatorsByOperator(address _operator, uint256 _pageNumber, uint256 _pageSize) view returns((uint8,bytes,bytes,bytes,address,uint256,uint256,uint256)[]) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) GetValidatorsByOperator(_operator common.Address, _pageNumber *big.Int, _pageSize *big.Int) ([]Validator, error) { + return _PermissionlessNodeRegistry.Contract.GetValidatorsByOperator(&_PermissionlessNodeRegistry.CallOpts, _operator, _pageNumber, _pageSize) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _PermissionlessNodeRegistry.Contract.HasRole(&_PermissionlessNodeRegistry.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _PermissionlessNodeRegistry.Contract.HasRole(&_PermissionlessNodeRegistry.CallOpts, role, account) +} + +// InputKeyCountLimit is a free data retrieval call binding the contract method 0xe0bf8b53. +// +// Solidity: function inputKeyCountLimit() view returns(uint16) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) InputKeyCountLimit(opts *bind.CallOpts) (uint16, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "inputKeyCountLimit") + + if err != nil { + return *new(uint16), err + } + + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + + return out0, err + +} + +// InputKeyCountLimit is a free data retrieval call binding the contract method 0xe0bf8b53. +// +// Solidity: function inputKeyCountLimit() view returns(uint16) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) InputKeyCountLimit() (uint16, error) { + return _PermissionlessNodeRegistry.Contract.InputKeyCountLimit(&_PermissionlessNodeRegistry.CallOpts) +} + +// InputKeyCountLimit is a free data retrieval call binding the contract method 0xe0bf8b53. +// +// Solidity: function inputKeyCountLimit() view returns(uint16) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) InputKeyCountLimit() (uint16, error) { + return _PermissionlessNodeRegistry.Contract.InputKeyCountLimit(&_PermissionlessNodeRegistry.CallOpts) +} + +// IsExistingOperator is a free data retrieval call binding the contract method 0xf9c4dda4. +// +// Solidity: function isExistingOperator(address _operAddr) view returns(bool) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) IsExistingOperator(opts *bind.CallOpts, _operAddr common.Address) (bool, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "isExistingOperator", _operAddr) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsExistingOperator is a free data retrieval call binding the contract method 0xf9c4dda4. +// +// Solidity: function isExistingOperator(address _operAddr) view returns(bool) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) IsExistingOperator(_operAddr common.Address) (bool, error) { + return _PermissionlessNodeRegistry.Contract.IsExistingOperator(&_PermissionlessNodeRegistry.CallOpts, _operAddr) +} + +// IsExistingOperator is a free data retrieval call binding the contract method 0xf9c4dda4. +// +// Solidity: function isExistingOperator(address _operAddr) view returns(bool) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) IsExistingOperator(_operAddr common.Address) (bool, error) { + return _PermissionlessNodeRegistry.Contract.IsExistingOperator(&_PermissionlessNodeRegistry.CallOpts, _operAddr) +} + +// IsExistingPubkey is a free data retrieval call binding the contract method 0x36514d9f. +// +// Solidity: function isExistingPubkey(bytes _pubkey) view returns(bool) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) IsExistingPubkey(opts *bind.CallOpts, _pubkey []byte) (bool, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "isExistingPubkey", _pubkey) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsExistingPubkey is a free data retrieval call binding the contract method 0x36514d9f. +// +// Solidity: function isExistingPubkey(bytes _pubkey) view returns(bool) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) IsExistingPubkey(_pubkey []byte) (bool, error) { + return _PermissionlessNodeRegistry.Contract.IsExistingPubkey(&_PermissionlessNodeRegistry.CallOpts, _pubkey) +} + +// IsExistingPubkey is a free data retrieval call binding the contract method 0x36514d9f. +// +// Solidity: function isExistingPubkey(bytes _pubkey) view returns(bool) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) IsExistingPubkey(_pubkey []byte) (bool, error) { + return _PermissionlessNodeRegistry.Contract.IsExistingPubkey(&_PermissionlessNodeRegistry.CallOpts, _pubkey) +} + +// MaxNonTerminalKeyPerOperator is a free data retrieval call binding the contract method 0x50d5d7ab. +// +// Solidity: function maxNonTerminalKeyPerOperator() view returns(uint64) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) MaxNonTerminalKeyPerOperator(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "maxNonTerminalKeyPerOperator") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MaxNonTerminalKeyPerOperator is a free data retrieval call binding the contract method 0x50d5d7ab. +// +// Solidity: function maxNonTerminalKeyPerOperator() view returns(uint64) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) MaxNonTerminalKeyPerOperator() (uint64, error) { + return _PermissionlessNodeRegistry.Contract.MaxNonTerminalKeyPerOperator(&_PermissionlessNodeRegistry.CallOpts) +} + +// MaxNonTerminalKeyPerOperator is a free data retrieval call binding the contract method 0x50d5d7ab. +// +// Solidity: function maxNonTerminalKeyPerOperator() view returns(uint64) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) MaxNonTerminalKeyPerOperator() (uint64, error) { + return _PermissionlessNodeRegistry.Contract.MaxNonTerminalKeyPerOperator(&_PermissionlessNodeRegistry.CallOpts) +} + +// NextOperatorId is a free data retrieval call binding the contract method 0x2d1dbd74. +// +// Solidity: function nextOperatorId() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) NextOperatorId(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "nextOperatorId") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// NextOperatorId is a free data retrieval call binding the contract method 0x2d1dbd74. +// +// Solidity: function nextOperatorId() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) NextOperatorId() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.NextOperatorId(&_PermissionlessNodeRegistry.CallOpts) +} + +// NextOperatorId is a free data retrieval call binding the contract method 0x2d1dbd74. +// +// Solidity: function nextOperatorId() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) NextOperatorId() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.NextOperatorId(&_PermissionlessNodeRegistry.CallOpts) +} + +// NextQueuedValidatorIndex is a free data retrieval call binding the contract method 0x74338e6d. +// +// Solidity: function nextQueuedValidatorIndex() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) NextQueuedValidatorIndex(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "nextQueuedValidatorIndex") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// NextQueuedValidatorIndex is a free data retrieval call binding the contract method 0x74338e6d. +// +// Solidity: function nextQueuedValidatorIndex() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) NextQueuedValidatorIndex() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.NextQueuedValidatorIndex(&_PermissionlessNodeRegistry.CallOpts) +} + +// NextQueuedValidatorIndex is a free data retrieval call binding the contract method 0x74338e6d. +// +// Solidity: function nextQueuedValidatorIndex() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) NextQueuedValidatorIndex() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.NextQueuedValidatorIndex(&_PermissionlessNodeRegistry.CallOpts) +} + +// NextValidatorId is a free data retrieval call binding the contract method 0xf7c09189. +// +// Solidity: function nextValidatorId() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) NextValidatorId(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "nextValidatorId") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// NextValidatorId is a free data retrieval call binding the contract method 0xf7c09189. +// +// Solidity: function nextValidatorId() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) NextValidatorId() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.NextValidatorId(&_PermissionlessNodeRegistry.CallOpts) +} + +// NextValidatorId is a free data retrieval call binding the contract method 0xf7c09189. +// +// Solidity: function nextValidatorId() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) NextValidatorId() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.NextValidatorId(&_PermissionlessNodeRegistry.CallOpts) +} + +// NodeELRewardVaultByOperatorId is a free data retrieval call binding the contract method 0x9344b242. +// +// Solidity: function nodeELRewardVaultByOperatorId(uint256 ) view returns(address) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) NodeELRewardVaultByOperatorId(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "nodeELRewardVaultByOperatorId", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// NodeELRewardVaultByOperatorId is a free data retrieval call binding the contract method 0x9344b242. +// +// Solidity: function nodeELRewardVaultByOperatorId(uint256 ) view returns(address) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) NodeELRewardVaultByOperatorId(arg0 *big.Int) (common.Address, error) { + return _PermissionlessNodeRegistry.Contract.NodeELRewardVaultByOperatorId(&_PermissionlessNodeRegistry.CallOpts, arg0) +} + +// NodeELRewardVaultByOperatorId is a free data retrieval call binding the contract method 0x9344b242. +// +// Solidity: function nodeELRewardVaultByOperatorId(uint256 ) view returns(address) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) NodeELRewardVaultByOperatorId(arg0 *big.Int) (common.Address, error) { + return _PermissionlessNodeRegistry.Contract.NodeELRewardVaultByOperatorId(&_PermissionlessNodeRegistry.CallOpts, arg0) +} + +// OperatorIDByAddress is a free data retrieval call binding the contract method 0xcac8b306. +// +// Solidity: function operatorIDByAddress(address ) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) OperatorIDByAddress(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "operatorIDByAddress", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// OperatorIDByAddress is a free data retrieval call binding the contract method 0xcac8b306. +// +// Solidity: function operatorIDByAddress(address ) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) OperatorIDByAddress(arg0 common.Address) (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.OperatorIDByAddress(&_PermissionlessNodeRegistry.CallOpts, arg0) +} + +// OperatorIDByAddress is a free data retrieval call binding the contract method 0xcac8b306. +// +// Solidity: function operatorIDByAddress(address ) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) OperatorIDByAddress(arg0 common.Address) (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.OperatorIDByAddress(&_PermissionlessNodeRegistry.CallOpts, arg0) +} + +// OperatorStructById is a free data retrieval call binding the contract method 0xc8a00e7a. +// +// Solidity: function operatorStructById(uint256 ) view returns(bool active, bool optedForSocializingPool, string operatorName, address operatorRewardAddress, address operatorAddress) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) OperatorStructById(opts *bind.CallOpts, arg0 *big.Int) (struct { + Active bool + OptedForSocializingPool bool + OperatorName string + OperatorRewardAddress common.Address + OperatorAddress common.Address +}, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "operatorStructById", arg0) + + outstruct := new(struct { + Active bool + OptedForSocializingPool bool + OperatorName string + OperatorRewardAddress common.Address + OperatorAddress common.Address + }) + if err != nil { + return *outstruct, err + } + + outstruct.Active = *abi.ConvertType(out[0], new(bool)).(*bool) + outstruct.OptedForSocializingPool = *abi.ConvertType(out[1], new(bool)).(*bool) + outstruct.OperatorName = *abi.ConvertType(out[2], new(string)).(*string) + outstruct.OperatorRewardAddress = *abi.ConvertType(out[3], new(common.Address)).(*common.Address) + outstruct.OperatorAddress = *abi.ConvertType(out[4], new(common.Address)).(*common.Address) + + return *outstruct, err + +} + +// OperatorStructById is a free data retrieval call binding the contract method 0xc8a00e7a. +// +// Solidity: function operatorStructById(uint256 ) view returns(bool active, bool optedForSocializingPool, string operatorName, address operatorRewardAddress, address operatorAddress) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) OperatorStructById(arg0 *big.Int) (struct { + Active bool + OptedForSocializingPool bool + OperatorName string + OperatorRewardAddress common.Address + OperatorAddress common.Address +}, error) { + return _PermissionlessNodeRegistry.Contract.OperatorStructById(&_PermissionlessNodeRegistry.CallOpts, arg0) +} + +// OperatorStructById is a free data retrieval call binding the contract method 0xc8a00e7a. +// +// Solidity: function operatorStructById(uint256 ) view returns(bool active, bool optedForSocializingPool, string operatorName, address operatorRewardAddress, address operatorAddress) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) OperatorStructById(arg0 *big.Int) (struct { + Active bool + OptedForSocializingPool bool + OperatorName string + OperatorRewardAddress common.Address + OperatorAddress common.Address +}, error) { + return _PermissionlessNodeRegistry.Contract.OperatorStructById(&_PermissionlessNodeRegistry.CallOpts, arg0) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.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 (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) Paused() (bool, error) { + return _PermissionlessNodeRegistry.Contract.Paused(&_PermissionlessNodeRegistry.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) Paused() (bool, error) { + return _PermissionlessNodeRegistry.Contract.Paused(&_PermissionlessNodeRegistry.CallOpts) +} + +// QueuedValidators is a free data retrieval call binding the contract method 0xbc4a3ad5. +// +// Solidity: function queuedValidators(uint256 ) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) QueuedValidators(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "queuedValidators", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// QueuedValidators is a free data retrieval call binding the contract method 0xbc4a3ad5. +// +// Solidity: function queuedValidators(uint256 ) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) QueuedValidators(arg0 *big.Int) (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.QueuedValidators(&_PermissionlessNodeRegistry.CallOpts, arg0) +} + +// QueuedValidators is a free data retrieval call binding the contract method 0xbc4a3ad5. +// +// Solidity: function queuedValidators(uint256 ) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) QueuedValidators(arg0 *big.Int) (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.QueuedValidators(&_PermissionlessNodeRegistry.CallOpts, arg0) +} + +// SocializingPoolStateChangeBlock is a free data retrieval call binding the contract method 0x84522a6d. +// +// Solidity: function socializingPoolStateChangeBlock(uint256 ) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) SocializingPoolStateChangeBlock(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "socializingPoolStateChangeBlock", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SocializingPoolStateChangeBlock is a free data retrieval call binding the contract method 0x84522a6d. +// +// Solidity: function socializingPoolStateChangeBlock(uint256 ) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) SocializingPoolStateChangeBlock(arg0 *big.Int) (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.SocializingPoolStateChangeBlock(&_PermissionlessNodeRegistry.CallOpts, arg0) +} + +// SocializingPoolStateChangeBlock is a free data retrieval call binding the contract method 0x84522a6d. +// +// Solidity: function socializingPoolStateChangeBlock(uint256 ) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) SocializingPoolStateChangeBlock(arg0 *big.Int) (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.SocializingPoolStateChangeBlock(&_PermissionlessNodeRegistry.CallOpts, arg0) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) StaderConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "staderConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) StaderConfig() (common.Address, error) { + return _PermissionlessNodeRegistry.Contract.StaderConfig(&_PermissionlessNodeRegistry.CallOpts) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) StaderConfig() (common.Address, error) { + return _PermissionlessNodeRegistry.Contract.StaderConfig(&_PermissionlessNodeRegistry.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.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 (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _PermissionlessNodeRegistry.Contract.SupportsInterface(&_PermissionlessNodeRegistry.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _PermissionlessNodeRegistry.Contract.SupportsInterface(&_PermissionlessNodeRegistry.CallOpts, interfaceId) +} + +// TotalActiveValidatorCount is a free data retrieval call binding the contract method 0x84b0fa4c. +// +// Solidity: function totalActiveValidatorCount() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) TotalActiveValidatorCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "totalActiveValidatorCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalActiveValidatorCount is a free data retrieval call binding the contract method 0x84b0fa4c. +// +// Solidity: function totalActiveValidatorCount() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) TotalActiveValidatorCount() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.TotalActiveValidatorCount(&_PermissionlessNodeRegistry.CallOpts) +} + +// TotalActiveValidatorCount is a free data retrieval call binding the contract method 0x84b0fa4c. +// +// Solidity: function totalActiveValidatorCount() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) TotalActiveValidatorCount() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.TotalActiveValidatorCount(&_PermissionlessNodeRegistry.CallOpts) +} + +// ValidatorIdByPubkey is a free data retrieval call binding the contract method 0x5c2c30a5. +// +// Solidity: function validatorIdByPubkey(bytes ) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) ValidatorIdByPubkey(opts *bind.CallOpts, arg0 []byte) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "validatorIdByPubkey", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ValidatorIdByPubkey is a free data retrieval call binding the contract method 0x5c2c30a5. +// +// Solidity: function validatorIdByPubkey(bytes ) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) ValidatorIdByPubkey(arg0 []byte) (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.ValidatorIdByPubkey(&_PermissionlessNodeRegistry.CallOpts, arg0) +} + +// ValidatorIdByPubkey is a free data retrieval call binding the contract method 0x5c2c30a5. +// +// Solidity: function validatorIdByPubkey(bytes ) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) ValidatorIdByPubkey(arg0 []byte) (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.ValidatorIdByPubkey(&_PermissionlessNodeRegistry.CallOpts, arg0) +} + +// ValidatorIdsByOperatorId is a free data retrieval call binding the contract method 0xd5e1e5ce. +// +// Solidity: function validatorIdsByOperatorId(uint256 , uint256 ) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) ValidatorIdsByOperatorId(opts *bind.CallOpts, arg0 *big.Int, arg1 *big.Int) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "validatorIdsByOperatorId", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ValidatorIdsByOperatorId is a free data retrieval call binding the contract method 0xd5e1e5ce. +// +// Solidity: function validatorIdsByOperatorId(uint256 , uint256 ) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) ValidatorIdsByOperatorId(arg0 *big.Int, arg1 *big.Int) (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.ValidatorIdsByOperatorId(&_PermissionlessNodeRegistry.CallOpts, arg0, arg1) +} + +// ValidatorIdsByOperatorId is a free data retrieval call binding the contract method 0xd5e1e5ce. +// +// Solidity: function validatorIdsByOperatorId(uint256 , uint256 ) view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) ValidatorIdsByOperatorId(arg0 *big.Int, arg1 *big.Int) (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.ValidatorIdsByOperatorId(&_PermissionlessNodeRegistry.CallOpts, arg0, arg1) +} + +// ValidatorQueueSize is a free data retrieval call binding the contract method 0x49911bfb. +// +// Solidity: function validatorQueueSize() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) ValidatorQueueSize(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "validatorQueueSize") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ValidatorQueueSize is a free data retrieval call binding the contract method 0x49911bfb. +// +// Solidity: function validatorQueueSize() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) ValidatorQueueSize() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.ValidatorQueueSize(&_PermissionlessNodeRegistry.CallOpts) +} + +// ValidatorQueueSize is a free data retrieval call binding the contract method 0x49911bfb. +// +// Solidity: function validatorQueueSize() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) ValidatorQueueSize() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.ValidatorQueueSize(&_PermissionlessNodeRegistry.CallOpts) +} + +// ValidatorRegistry is a free data retrieval call binding the contract method 0x5a1239c1. +// +// Solidity: function validatorRegistry(uint256 ) view returns(uint8 status, bytes pubkey, bytes preDepositSignature, bytes depositSignature, address withdrawVaultAddress, uint256 operatorId, uint256 depositBlock, uint256 withdrawnBlock) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) ValidatorRegistry(opts *bind.CallOpts, arg0 *big.Int) (struct { + Status uint8 + Pubkey []byte + PreDepositSignature []byte + DepositSignature []byte + WithdrawVaultAddress common.Address + OperatorId *big.Int + DepositBlock *big.Int + WithdrawnBlock *big.Int +}, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "validatorRegistry", arg0) + + outstruct := new(struct { + Status uint8 + Pubkey []byte + PreDepositSignature []byte + DepositSignature []byte + WithdrawVaultAddress common.Address + OperatorId *big.Int + DepositBlock *big.Int + WithdrawnBlock *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.Status = *abi.ConvertType(out[0], new(uint8)).(*uint8) + outstruct.Pubkey = *abi.ConvertType(out[1], new([]byte)).(*[]byte) + outstruct.PreDepositSignature = *abi.ConvertType(out[2], new([]byte)).(*[]byte) + outstruct.DepositSignature = *abi.ConvertType(out[3], new([]byte)).(*[]byte) + outstruct.WithdrawVaultAddress = *abi.ConvertType(out[4], new(common.Address)).(*common.Address) + outstruct.OperatorId = *abi.ConvertType(out[5], new(*big.Int)).(**big.Int) + outstruct.DepositBlock = *abi.ConvertType(out[6], new(*big.Int)).(**big.Int) + outstruct.WithdrawnBlock = *abi.ConvertType(out[7], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// ValidatorRegistry is a free data retrieval call binding the contract method 0x5a1239c1. +// +// Solidity: function validatorRegistry(uint256 ) view returns(uint8 status, bytes pubkey, bytes preDepositSignature, bytes depositSignature, address withdrawVaultAddress, uint256 operatorId, uint256 depositBlock, uint256 withdrawnBlock) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) ValidatorRegistry(arg0 *big.Int) (struct { + Status uint8 + Pubkey []byte + PreDepositSignature []byte + DepositSignature []byte + WithdrawVaultAddress common.Address + OperatorId *big.Int + DepositBlock *big.Int + WithdrawnBlock *big.Int +}, error) { + return _PermissionlessNodeRegistry.Contract.ValidatorRegistry(&_PermissionlessNodeRegistry.CallOpts, arg0) +} + +// ValidatorRegistry is a free data retrieval call binding the contract method 0x5a1239c1. +// +// Solidity: function validatorRegistry(uint256 ) view returns(uint8 status, bytes pubkey, bytes preDepositSignature, bytes depositSignature, address withdrawVaultAddress, uint256 operatorId, uint256 depositBlock, uint256 withdrawnBlock) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) ValidatorRegistry(arg0 *big.Int) (struct { + Status uint8 + Pubkey []byte + PreDepositSignature []byte + DepositSignature []byte + WithdrawVaultAddress common.Address + OperatorId *big.Int + DepositBlock *big.Int + WithdrawnBlock *big.Int +}, error) { + return _PermissionlessNodeRegistry.Contract.ValidatorRegistry(&_PermissionlessNodeRegistry.CallOpts, arg0) +} + +// VerifiedKeyBatchSize is a free data retrieval call binding the contract method 0xab3e71eb. +// +// Solidity: function verifiedKeyBatchSize() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCaller) VerifiedKeyBatchSize(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessNodeRegistry.contract.Call(opts, &out, "verifiedKeyBatchSize") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// VerifiedKeyBatchSize is a free data retrieval call binding the contract method 0xab3e71eb. +// +// Solidity: function verifiedKeyBatchSize() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) VerifiedKeyBatchSize() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.VerifiedKeyBatchSize(&_PermissionlessNodeRegistry.CallOpts) +} + +// VerifiedKeyBatchSize is a free data retrieval call binding the contract method 0xab3e71eb. +// +// Solidity: function verifiedKeyBatchSize() view returns(uint256) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryCallerSession) VerifiedKeyBatchSize() (*big.Int, error) { + return _PermissionlessNodeRegistry.Contract.VerifiedKeyBatchSize(&_PermissionlessNodeRegistry.CallOpts) +} + +// AddValidatorKeys is a paid mutator transaction binding the contract method 0xdeacde2b. +// +// Solidity: function addValidatorKeys(bytes[] _pubkey, bytes[] _preDepositSignature, bytes[] _depositSignature) payable returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) AddValidatorKeys(opts *bind.TransactOpts, _pubkey [][]byte, _preDepositSignature [][]byte, _depositSignature [][]byte) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "addValidatorKeys", _pubkey, _preDepositSignature, _depositSignature) +} + +// AddValidatorKeys is a paid mutator transaction binding the contract method 0xdeacde2b. +// +// Solidity: function addValidatorKeys(bytes[] _pubkey, bytes[] _preDepositSignature, bytes[] _depositSignature) payable returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) AddValidatorKeys(_pubkey [][]byte, _preDepositSignature [][]byte, _depositSignature [][]byte) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.AddValidatorKeys(&_PermissionlessNodeRegistry.TransactOpts, _pubkey, _preDepositSignature, _depositSignature) +} + +// AddValidatorKeys is a paid mutator transaction binding the contract method 0xdeacde2b. +// +// Solidity: function addValidatorKeys(bytes[] _pubkey, bytes[] _preDepositSignature, bytes[] _depositSignature) payable returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) AddValidatorKeys(_pubkey [][]byte, _preDepositSignature [][]byte, _depositSignature [][]byte) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.AddValidatorKeys(&_PermissionlessNodeRegistry.TransactOpts, _pubkey, _preDepositSignature, _depositSignature) +} + +// ChangeSocializingPoolState is a paid mutator transaction binding the contract method 0xf90b0838. +// +// Solidity: function changeSocializingPoolState(bool _optInForSocializingPool) returns(address feeRecipientAddress) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) ChangeSocializingPoolState(opts *bind.TransactOpts, _optInForSocializingPool bool) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "changeSocializingPoolState", _optInForSocializingPool) +} + +// ChangeSocializingPoolState is a paid mutator transaction binding the contract method 0xf90b0838. +// +// Solidity: function changeSocializingPoolState(bool _optInForSocializingPool) returns(address feeRecipientAddress) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) ChangeSocializingPoolState(_optInForSocializingPool bool) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.ChangeSocializingPoolState(&_PermissionlessNodeRegistry.TransactOpts, _optInForSocializingPool) +} + +// ChangeSocializingPoolState is a paid mutator transaction binding the contract method 0xf90b0838. +// +// Solidity: function changeSocializingPoolState(bool _optInForSocializingPool) returns(address feeRecipientAddress) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) ChangeSocializingPoolState(_optInForSocializingPool bool) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.ChangeSocializingPoolState(&_PermissionlessNodeRegistry.TransactOpts, _optInForSocializingPool) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.GrantRole(&_PermissionlessNodeRegistry.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.GrantRole(&_PermissionlessNodeRegistry.TransactOpts, role, account) +} + +// IncreaseTotalActiveValidatorCount is a paid mutator transaction binding the contract method 0x59c3c9b7. +// +// Solidity: function increaseTotalActiveValidatorCount(uint256 _count) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) IncreaseTotalActiveValidatorCount(opts *bind.TransactOpts, _count *big.Int) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "increaseTotalActiveValidatorCount", _count) +} + +// IncreaseTotalActiveValidatorCount is a paid mutator transaction binding the contract method 0x59c3c9b7. +// +// Solidity: function increaseTotalActiveValidatorCount(uint256 _count) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) IncreaseTotalActiveValidatorCount(_count *big.Int) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.IncreaseTotalActiveValidatorCount(&_PermissionlessNodeRegistry.TransactOpts, _count) +} + +// IncreaseTotalActiveValidatorCount is a paid mutator transaction binding the contract method 0x59c3c9b7. +// +// Solidity: function increaseTotalActiveValidatorCount(uint256 _count) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) IncreaseTotalActiveValidatorCount(_count *big.Int) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.IncreaseTotalActiveValidatorCount(&_PermissionlessNodeRegistry.TransactOpts, _count) +} + +// MarkValidatorReadyToDeposit is a paid mutator transaction binding the contract method 0x13797bff. +// +// Solidity: function markValidatorReadyToDeposit(bytes[] _readyToDepositPubkey, bytes[] _frontRunPubkey, bytes[] _invalidSignaturePubkey) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) MarkValidatorReadyToDeposit(opts *bind.TransactOpts, _readyToDepositPubkey [][]byte, _frontRunPubkey [][]byte, _invalidSignaturePubkey [][]byte) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "markValidatorReadyToDeposit", _readyToDepositPubkey, _frontRunPubkey, _invalidSignaturePubkey) +} + +// MarkValidatorReadyToDeposit is a paid mutator transaction binding the contract method 0x13797bff. +// +// Solidity: function markValidatorReadyToDeposit(bytes[] _readyToDepositPubkey, bytes[] _frontRunPubkey, bytes[] _invalidSignaturePubkey) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) MarkValidatorReadyToDeposit(_readyToDepositPubkey [][]byte, _frontRunPubkey [][]byte, _invalidSignaturePubkey [][]byte) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.MarkValidatorReadyToDeposit(&_PermissionlessNodeRegistry.TransactOpts, _readyToDepositPubkey, _frontRunPubkey, _invalidSignaturePubkey) +} + +// MarkValidatorReadyToDeposit is a paid mutator transaction binding the contract method 0x13797bff. +// +// Solidity: function markValidatorReadyToDeposit(bytes[] _readyToDepositPubkey, bytes[] _frontRunPubkey, bytes[] _invalidSignaturePubkey) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) MarkValidatorReadyToDeposit(_readyToDepositPubkey [][]byte, _frontRunPubkey [][]byte, _invalidSignaturePubkey [][]byte) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.MarkValidatorReadyToDeposit(&_PermissionlessNodeRegistry.TransactOpts, _readyToDepositPubkey, _frontRunPubkey, _invalidSignaturePubkey) +} + +// OnboardNodeOperator is a paid mutator transaction binding the contract method 0x044d2fe8. +// +// Solidity: function onboardNodeOperator(bool _optInForSocializingPool, string _operatorName, address _operatorRewardAddress) returns(address feeRecipientAddress) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) OnboardNodeOperator(opts *bind.TransactOpts, _optInForSocializingPool bool, _operatorName string, _operatorRewardAddress common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "onboardNodeOperator", _optInForSocializingPool, _operatorName, _operatorRewardAddress) +} + +// OnboardNodeOperator is a paid mutator transaction binding the contract method 0x044d2fe8. +// +// Solidity: function onboardNodeOperator(bool _optInForSocializingPool, string _operatorName, address _operatorRewardAddress) returns(address feeRecipientAddress) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) OnboardNodeOperator(_optInForSocializingPool bool, _operatorName string, _operatorRewardAddress common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.OnboardNodeOperator(&_PermissionlessNodeRegistry.TransactOpts, _optInForSocializingPool, _operatorName, _operatorRewardAddress) +} + +// OnboardNodeOperator is a paid mutator transaction binding the contract method 0x044d2fe8. +// +// Solidity: function onboardNodeOperator(bool _optInForSocializingPool, string _operatorName, address _operatorRewardAddress) returns(address feeRecipientAddress) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) OnboardNodeOperator(_optInForSocializingPool bool, _operatorName string, _operatorRewardAddress common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.OnboardNodeOperator(&_PermissionlessNodeRegistry.TransactOpts, _optInForSocializingPool, _operatorName, _operatorRewardAddress) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "pause") +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) Pause() (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.Pause(&_PermissionlessNodeRegistry.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) Pause() (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.Pause(&_PermissionlessNodeRegistry.TransactOpts) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "renounceRole", role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.RenounceRole(&_PermissionlessNodeRegistry.TransactOpts, role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.RenounceRole(&_PermissionlessNodeRegistry.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.RevokeRole(&_PermissionlessNodeRegistry.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.RevokeRole(&_PermissionlessNodeRegistry.TransactOpts, role, account) +} + +// TransferCollateralToPool is a paid mutator transaction binding the contract method 0x5ae7f25d. +// +// Solidity: function transferCollateralToPool(uint256 _amount) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) TransferCollateralToPool(opts *bind.TransactOpts, _amount *big.Int) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "transferCollateralToPool", _amount) +} + +// TransferCollateralToPool is a paid mutator transaction binding the contract method 0x5ae7f25d. +// +// Solidity: function transferCollateralToPool(uint256 _amount) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) TransferCollateralToPool(_amount *big.Int) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.TransferCollateralToPool(&_PermissionlessNodeRegistry.TransactOpts, _amount) +} + +// TransferCollateralToPool is a paid mutator transaction binding the contract method 0x5ae7f25d. +// +// Solidity: function transferCollateralToPool(uint256 _amount) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) TransferCollateralToPool(_amount *big.Int) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.TransferCollateralToPool(&_PermissionlessNodeRegistry.TransactOpts, _amount) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "unpause") +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) Unpause() (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.Unpause(&_PermissionlessNodeRegistry.TransactOpts) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) Unpause() (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.Unpause(&_PermissionlessNodeRegistry.TransactOpts) +} + +// UpdateDepositStatusAndBlock is a paid mutator transaction binding the contract method 0x186d9541. +// +// Solidity: function updateDepositStatusAndBlock(uint256 _validatorId) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) UpdateDepositStatusAndBlock(opts *bind.TransactOpts, _validatorId *big.Int) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "updateDepositStatusAndBlock", _validatorId) +} + +// UpdateDepositStatusAndBlock is a paid mutator transaction binding the contract method 0x186d9541. +// +// Solidity: function updateDepositStatusAndBlock(uint256 _validatorId) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) UpdateDepositStatusAndBlock(_validatorId *big.Int) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.UpdateDepositStatusAndBlock(&_PermissionlessNodeRegistry.TransactOpts, _validatorId) +} + +// UpdateDepositStatusAndBlock is a paid mutator transaction binding the contract method 0x186d9541. +// +// Solidity: function updateDepositStatusAndBlock(uint256 _validatorId) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) UpdateDepositStatusAndBlock(_validatorId *big.Int) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.UpdateDepositStatusAndBlock(&_PermissionlessNodeRegistry.TransactOpts, _validatorId) +} + +// UpdateInputKeyCountLimit is a paid mutator transaction binding the contract method 0x2517cfbf. +// +// Solidity: function updateInputKeyCountLimit(uint16 _inputKeyCountLimit) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) UpdateInputKeyCountLimit(opts *bind.TransactOpts, _inputKeyCountLimit uint16) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "updateInputKeyCountLimit", _inputKeyCountLimit) +} + +// UpdateInputKeyCountLimit is a paid mutator transaction binding the contract method 0x2517cfbf. +// +// Solidity: function updateInputKeyCountLimit(uint16 _inputKeyCountLimit) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) UpdateInputKeyCountLimit(_inputKeyCountLimit uint16) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.UpdateInputKeyCountLimit(&_PermissionlessNodeRegistry.TransactOpts, _inputKeyCountLimit) +} + +// UpdateInputKeyCountLimit is a paid mutator transaction binding the contract method 0x2517cfbf. +// +// Solidity: function updateInputKeyCountLimit(uint16 _inputKeyCountLimit) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) UpdateInputKeyCountLimit(_inputKeyCountLimit uint16) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.UpdateInputKeyCountLimit(&_PermissionlessNodeRegistry.TransactOpts, _inputKeyCountLimit) +} + +// UpdateMaxNonTerminalKeyPerOperator is a paid mutator transaction binding the contract method 0x60c3cf3f. +// +// Solidity: function updateMaxNonTerminalKeyPerOperator(uint64 _maxNonTerminalKeyPerOperator) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) UpdateMaxNonTerminalKeyPerOperator(opts *bind.TransactOpts, _maxNonTerminalKeyPerOperator uint64) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "updateMaxNonTerminalKeyPerOperator", _maxNonTerminalKeyPerOperator) +} + +// UpdateMaxNonTerminalKeyPerOperator is a paid mutator transaction binding the contract method 0x60c3cf3f. +// +// Solidity: function updateMaxNonTerminalKeyPerOperator(uint64 _maxNonTerminalKeyPerOperator) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) UpdateMaxNonTerminalKeyPerOperator(_maxNonTerminalKeyPerOperator uint64) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.UpdateMaxNonTerminalKeyPerOperator(&_PermissionlessNodeRegistry.TransactOpts, _maxNonTerminalKeyPerOperator) +} + +// UpdateMaxNonTerminalKeyPerOperator is a paid mutator transaction binding the contract method 0x60c3cf3f. +// +// Solidity: function updateMaxNonTerminalKeyPerOperator(uint64 _maxNonTerminalKeyPerOperator) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) UpdateMaxNonTerminalKeyPerOperator(_maxNonTerminalKeyPerOperator uint64) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.UpdateMaxNonTerminalKeyPerOperator(&_PermissionlessNodeRegistry.TransactOpts, _maxNonTerminalKeyPerOperator) +} + +// UpdateNextQueuedValidatorIndex is a paid mutator transaction binding the contract method 0xb8d2f06c. +// +// Solidity: function updateNextQueuedValidatorIndex(uint256 _nextQueuedValidatorIndex) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) UpdateNextQueuedValidatorIndex(opts *bind.TransactOpts, _nextQueuedValidatorIndex *big.Int) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "updateNextQueuedValidatorIndex", _nextQueuedValidatorIndex) +} + +// UpdateNextQueuedValidatorIndex is a paid mutator transaction binding the contract method 0xb8d2f06c. +// +// Solidity: function updateNextQueuedValidatorIndex(uint256 _nextQueuedValidatorIndex) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) UpdateNextQueuedValidatorIndex(_nextQueuedValidatorIndex *big.Int) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.UpdateNextQueuedValidatorIndex(&_PermissionlessNodeRegistry.TransactOpts, _nextQueuedValidatorIndex) +} + +// UpdateNextQueuedValidatorIndex is a paid mutator transaction binding the contract method 0xb8d2f06c. +// +// Solidity: function updateNextQueuedValidatorIndex(uint256 _nextQueuedValidatorIndex) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) UpdateNextQueuedValidatorIndex(_nextQueuedValidatorIndex *big.Int) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.UpdateNextQueuedValidatorIndex(&_PermissionlessNodeRegistry.TransactOpts, _nextQueuedValidatorIndex) +} + +// UpdateOperatorDetails is a paid mutator transaction binding the contract method 0x58a994ea. +// +// Solidity: function updateOperatorDetails(string _operatorName, address _rewardAddress) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) UpdateOperatorDetails(opts *bind.TransactOpts, _operatorName string, _rewardAddress common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "updateOperatorDetails", _operatorName, _rewardAddress) +} + +// UpdateOperatorDetails is a paid mutator transaction binding the contract method 0x58a994ea. +// +// Solidity: function updateOperatorDetails(string _operatorName, address _rewardAddress) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) UpdateOperatorDetails(_operatorName string, _rewardAddress common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.UpdateOperatorDetails(&_PermissionlessNodeRegistry.TransactOpts, _operatorName, _rewardAddress) +} + +// UpdateOperatorDetails is a paid mutator transaction binding the contract method 0x58a994ea. +// +// Solidity: function updateOperatorDetails(string _operatorName, address _rewardAddress) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) UpdateOperatorDetails(_operatorName string, _rewardAddress common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.UpdateOperatorDetails(&_PermissionlessNodeRegistry.TransactOpts, _operatorName, _rewardAddress) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) UpdateStaderConfig(opts *bind.TransactOpts, _staderConfig common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "updateStaderConfig", _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.UpdateStaderConfig(&_PermissionlessNodeRegistry.TransactOpts, _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.UpdateStaderConfig(&_PermissionlessNodeRegistry.TransactOpts, _staderConfig) +} + +// UpdateVerifiedKeysBatchSize is a paid mutator transaction binding the contract method 0xaf533aa8. +// +// Solidity: function updateVerifiedKeysBatchSize(uint256 _verifiedKeysBatchSize) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) UpdateVerifiedKeysBatchSize(opts *bind.TransactOpts, _verifiedKeysBatchSize *big.Int) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "updateVerifiedKeysBatchSize", _verifiedKeysBatchSize) +} + +// UpdateVerifiedKeysBatchSize is a paid mutator transaction binding the contract method 0xaf533aa8. +// +// Solidity: function updateVerifiedKeysBatchSize(uint256 _verifiedKeysBatchSize) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) UpdateVerifiedKeysBatchSize(_verifiedKeysBatchSize *big.Int) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.UpdateVerifiedKeysBatchSize(&_PermissionlessNodeRegistry.TransactOpts, _verifiedKeysBatchSize) +} + +// UpdateVerifiedKeysBatchSize is a paid mutator transaction binding the contract method 0xaf533aa8. +// +// Solidity: function updateVerifiedKeysBatchSize(uint256 _verifiedKeysBatchSize) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) UpdateVerifiedKeysBatchSize(_verifiedKeysBatchSize *big.Int) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.UpdateVerifiedKeysBatchSize(&_PermissionlessNodeRegistry.TransactOpts, _verifiedKeysBatchSize) +} + +// WithdrawnValidators is a paid mutator transaction binding the contract method 0x264f27f3. +// +// Solidity: function withdrawnValidators(bytes[] _pubkeys) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) WithdrawnValidators(opts *bind.TransactOpts, _pubkeys [][]byte) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "withdrawnValidators", _pubkeys) +} + +// WithdrawnValidators is a paid mutator transaction binding the contract method 0x264f27f3. +// +// Solidity: function withdrawnValidators(bytes[] _pubkeys) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) WithdrawnValidators(_pubkeys [][]byte) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.WithdrawnValidators(&_PermissionlessNodeRegistry.TransactOpts, _pubkeys) +} + +// WithdrawnValidators is a paid mutator transaction binding the contract method 0x264f27f3. +// +// Solidity: function withdrawnValidators(bytes[] _pubkeys) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) WithdrawnValidators(_pubkeys [][]byte) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.WithdrawnValidators(&_PermissionlessNodeRegistry.TransactOpts, _pubkeys) +} + +// PermissionlessNodeRegistryAddedValidatorKeyIterator is returned from FilterAddedValidatorKey and is used to iterate over the raw logs and unpacked data for AddedValidatorKey events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryAddedValidatorKeyIterator struct { + Event *PermissionlessNodeRegistryAddedValidatorKey // 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 *PermissionlessNodeRegistryAddedValidatorKeyIterator) 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(PermissionlessNodeRegistryAddedValidatorKey) + if err := 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(PermissionlessNodeRegistryAddedValidatorKey) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryAddedValidatorKeyIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryAddedValidatorKeyIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryAddedValidatorKey represents a AddedValidatorKey event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryAddedValidatorKey struct { + NodeOperator common.Address + Pubkey []byte + ValidatorId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAddedValidatorKey is a free log retrieval operation binding the contract event 0xab5128638b64e6216e80dfafa70d3cb6d54913a536dc41e76eb4a04cfbe979cf. +// +// Solidity: event AddedValidatorKey(address indexed nodeOperator, bytes pubkey, uint256 validatorId) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterAddedValidatorKey(opts *bind.FilterOpts, nodeOperator []common.Address) (*PermissionlessNodeRegistryAddedValidatorKeyIterator, error) { + + var nodeOperatorRule []interface{} + for _, nodeOperatorItem := range nodeOperator { + nodeOperatorRule = append(nodeOperatorRule, nodeOperatorItem) + } + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "AddedValidatorKey", nodeOperatorRule) + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryAddedValidatorKeyIterator{contract: _PermissionlessNodeRegistry.contract, event: "AddedValidatorKey", logs: logs, sub: sub}, nil +} + +// WatchAddedValidatorKey is a free log subscription operation binding the contract event 0xab5128638b64e6216e80dfafa70d3cb6d54913a536dc41e76eb4a04cfbe979cf. +// +// Solidity: event AddedValidatorKey(address indexed nodeOperator, bytes pubkey, uint256 validatorId) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchAddedValidatorKey(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryAddedValidatorKey, nodeOperator []common.Address) (event.Subscription, error) { + + var nodeOperatorRule []interface{} + for _, nodeOperatorItem := range nodeOperator { + nodeOperatorRule = append(nodeOperatorRule, nodeOperatorItem) + } + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "AddedValidatorKey", nodeOperatorRule) + 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(PermissionlessNodeRegistryAddedValidatorKey) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "AddedValidatorKey", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseAddedValidatorKey is a log parse operation binding the contract event 0xab5128638b64e6216e80dfafa70d3cb6d54913a536dc41e76eb4a04cfbe979cf. +// +// Solidity: event AddedValidatorKey(address indexed nodeOperator, bytes pubkey, uint256 validatorId) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseAddedValidatorKey(log types.Log) (*PermissionlessNodeRegistryAddedValidatorKey, error) { + event := new(PermissionlessNodeRegistryAddedValidatorKey) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "AddedValidatorKey", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryDecreasedTotalActiveValidatorCountIterator is returned from FilterDecreasedTotalActiveValidatorCount and is used to iterate over the raw logs and unpacked data for DecreasedTotalActiveValidatorCount events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryDecreasedTotalActiveValidatorCountIterator struct { + Event *PermissionlessNodeRegistryDecreasedTotalActiveValidatorCount // 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 *PermissionlessNodeRegistryDecreasedTotalActiveValidatorCountIterator) 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(PermissionlessNodeRegistryDecreasedTotalActiveValidatorCount) + if err := 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(PermissionlessNodeRegistryDecreasedTotalActiveValidatorCount) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryDecreasedTotalActiveValidatorCountIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryDecreasedTotalActiveValidatorCountIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryDecreasedTotalActiveValidatorCount represents a DecreasedTotalActiveValidatorCount event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryDecreasedTotalActiveValidatorCount struct { + TotalActiveValidatorCount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDecreasedTotalActiveValidatorCount is a free log retrieval operation binding the contract event 0x5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece3. +// +// Solidity: event DecreasedTotalActiveValidatorCount(uint256 totalActiveValidatorCount) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterDecreasedTotalActiveValidatorCount(opts *bind.FilterOpts) (*PermissionlessNodeRegistryDecreasedTotalActiveValidatorCountIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "DecreasedTotalActiveValidatorCount") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryDecreasedTotalActiveValidatorCountIterator{contract: _PermissionlessNodeRegistry.contract, event: "DecreasedTotalActiveValidatorCount", logs: logs, sub: sub}, nil +} + +// WatchDecreasedTotalActiveValidatorCount is a free log subscription operation binding the contract event 0x5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece3. +// +// Solidity: event DecreasedTotalActiveValidatorCount(uint256 totalActiveValidatorCount) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchDecreasedTotalActiveValidatorCount(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryDecreasedTotalActiveValidatorCount) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "DecreasedTotalActiveValidatorCount") + 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(PermissionlessNodeRegistryDecreasedTotalActiveValidatorCount) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "DecreasedTotalActiveValidatorCount", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseDecreasedTotalActiveValidatorCount is a log parse operation binding the contract event 0x5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece3. +// +// Solidity: event DecreasedTotalActiveValidatorCount(uint256 totalActiveValidatorCount) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseDecreasedTotalActiveValidatorCount(log types.Log) (*PermissionlessNodeRegistryDecreasedTotalActiveValidatorCount, error) { + event := new(PermissionlessNodeRegistryDecreasedTotalActiveValidatorCount) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "DecreasedTotalActiveValidatorCount", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryIncreasedTotalActiveValidatorCountIterator is returned from FilterIncreasedTotalActiveValidatorCount and is used to iterate over the raw logs and unpacked data for IncreasedTotalActiveValidatorCount events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryIncreasedTotalActiveValidatorCountIterator struct { + Event *PermissionlessNodeRegistryIncreasedTotalActiveValidatorCount // 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 *PermissionlessNodeRegistryIncreasedTotalActiveValidatorCountIterator) 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(PermissionlessNodeRegistryIncreasedTotalActiveValidatorCount) + if err := 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(PermissionlessNodeRegistryIncreasedTotalActiveValidatorCount) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryIncreasedTotalActiveValidatorCountIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryIncreasedTotalActiveValidatorCountIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryIncreasedTotalActiveValidatorCount represents a IncreasedTotalActiveValidatorCount event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryIncreasedTotalActiveValidatorCount struct { + TotalActiveValidatorCount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterIncreasedTotalActiveValidatorCount is a free log retrieval operation binding the contract event 0x5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f2. +// +// Solidity: event IncreasedTotalActiveValidatorCount(uint256 totalActiveValidatorCount) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterIncreasedTotalActiveValidatorCount(opts *bind.FilterOpts) (*PermissionlessNodeRegistryIncreasedTotalActiveValidatorCountIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "IncreasedTotalActiveValidatorCount") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryIncreasedTotalActiveValidatorCountIterator{contract: _PermissionlessNodeRegistry.contract, event: "IncreasedTotalActiveValidatorCount", logs: logs, sub: sub}, nil +} + +// WatchIncreasedTotalActiveValidatorCount is a free log subscription operation binding the contract event 0x5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f2. +// +// Solidity: event IncreasedTotalActiveValidatorCount(uint256 totalActiveValidatorCount) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchIncreasedTotalActiveValidatorCount(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryIncreasedTotalActiveValidatorCount) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "IncreasedTotalActiveValidatorCount") + 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(PermissionlessNodeRegistryIncreasedTotalActiveValidatorCount) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "IncreasedTotalActiveValidatorCount", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseIncreasedTotalActiveValidatorCount is a log parse operation binding the contract event 0x5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f2. +// +// Solidity: event IncreasedTotalActiveValidatorCount(uint256 totalActiveValidatorCount) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseIncreasedTotalActiveValidatorCount(log types.Log) (*PermissionlessNodeRegistryIncreasedTotalActiveValidatorCount, error) { + event := new(PermissionlessNodeRegistryIncreasedTotalActiveValidatorCount) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "IncreasedTotalActiveValidatorCount", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryInitializedIterator struct { + Event *PermissionlessNodeRegistryInitialized // 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 *PermissionlessNodeRegistryInitializedIterator) 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(PermissionlessNodeRegistryInitialized) + if err := 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(PermissionlessNodeRegistryInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryInitialized represents a Initialized event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryInitialized 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 (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterInitialized(opts *bind.FilterOpts) (*PermissionlessNodeRegistryInitializedIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryInitializedIterator{contract: _PermissionlessNodeRegistry.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 (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryInitialized) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.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(PermissionlessNodeRegistryInitialized) + if err := _PermissionlessNodeRegistry.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 (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseInitialized(log types.Log) (*PermissionlessNodeRegistryInitialized, error) { + event := new(PermissionlessNodeRegistryInitialized) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryOnboardedOperatorIterator is returned from FilterOnboardedOperator and is used to iterate over the raw logs and unpacked data for OnboardedOperator events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryOnboardedOperatorIterator struct { + Event *PermissionlessNodeRegistryOnboardedOperator // 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 *PermissionlessNodeRegistryOnboardedOperatorIterator) 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(PermissionlessNodeRegistryOnboardedOperator) + if err := 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(PermissionlessNodeRegistryOnboardedOperator) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryOnboardedOperatorIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryOnboardedOperatorIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryOnboardedOperator represents a OnboardedOperator event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryOnboardedOperator struct { + NodeOperator common.Address + NodeRewardAddress common.Address + OperatorId *big.Int + OptInForSocializingPool bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOnboardedOperator is a free log retrieval operation binding the contract event 0x55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd4. +// +// Solidity: event OnboardedOperator(address indexed nodeOperator, address nodeRewardAddress, uint256 operatorId, bool optInForSocializingPool) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterOnboardedOperator(opts *bind.FilterOpts, nodeOperator []common.Address) (*PermissionlessNodeRegistryOnboardedOperatorIterator, error) { + + var nodeOperatorRule []interface{} + for _, nodeOperatorItem := range nodeOperator { + nodeOperatorRule = append(nodeOperatorRule, nodeOperatorItem) + } + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "OnboardedOperator", nodeOperatorRule) + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryOnboardedOperatorIterator{contract: _PermissionlessNodeRegistry.contract, event: "OnboardedOperator", logs: logs, sub: sub}, nil +} + +// WatchOnboardedOperator is a free log subscription operation binding the contract event 0x55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd4. +// +// Solidity: event OnboardedOperator(address indexed nodeOperator, address nodeRewardAddress, uint256 operatorId, bool optInForSocializingPool) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchOnboardedOperator(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryOnboardedOperator, nodeOperator []common.Address) (event.Subscription, error) { + + var nodeOperatorRule []interface{} + for _, nodeOperatorItem := range nodeOperator { + nodeOperatorRule = append(nodeOperatorRule, nodeOperatorItem) + } + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "OnboardedOperator", nodeOperatorRule) + 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(PermissionlessNodeRegistryOnboardedOperator) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "OnboardedOperator", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOnboardedOperator is a log parse operation binding the contract event 0x55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd4. +// +// Solidity: event OnboardedOperator(address indexed nodeOperator, address nodeRewardAddress, uint256 operatorId, bool optInForSocializingPool) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseOnboardedOperator(log types.Log) (*PermissionlessNodeRegistryOnboardedOperator, error) { + event := new(PermissionlessNodeRegistryOnboardedOperator) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "OnboardedOperator", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryPausedIterator struct { + Event *PermissionlessNodeRegistryPaused // 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 *PermissionlessNodeRegistryPausedIterator) 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(PermissionlessNodeRegistryPaused) + if err := 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(PermissionlessNodeRegistryPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryPaused represents a Paused event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryPaused 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 (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterPaused(opts *bind.FilterOpts) (*PermissionlessNodeRegistryPausedIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryPausedIterator{contract: _PermissionlessNodeRegistry.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 (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryPaused) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.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(PermissionlessNodeRegistryPaused) + if err := _PermissionlessNodeRegistry.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 (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParsePaused(log types.Log) (*PermissionlessNodeRegistryPaused, error) { + event := new(PermissionlessNodeRegistryPaused) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryRoleAdminChangedIterator struct { + Event *PermissionlessNodeRegistryRoleAdminChanged // 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 *PermissionlessNodeRegistryRoleAdminChangedIterator) 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(PermissionlessNodeRegistryRoleAdminChanged) + if err := 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(PermissionlessNodeRegistryRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryRoleAdminChanged represents a RoleAdminChanged event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*PermissionlessNodeRegistryRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryRoleAdminChangedIterator{contract: _PermissionlessNodeRegistry.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(PermissionlessNodeRegistryRoleAdminChanged) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseRoleAdminChanged(log types.Log) (*PermissionlessNodeRegistryRoleAdminChanged, error) { + event := new(PermissionlessNodeRegistryRoleAdminChanged) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryRoleGrantedIterator struct { + Event *PermissionlessNodeRegistryRoleGranted // 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 *PermissionlessNodeRegistryRoleGrantedIterator) 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(PermissionlessNodeRegistryRoleGranted) + if err := 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(PermissionlessNodeRegistryRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryRoleGranted represents a RoleGranted event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*PermissionlessNodeRegistryRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryRoleGrantedIterator{contract: _PermissionlessNodeRegistry.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, 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(PermissionlessNodeRegistryRoleGranted) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseRoleGranted(log types.Log) (*PermissionlessNodeRegistryRoleGranted, error) { + event := new(PermissionlessNodeRegistryRoleGranted) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryRoleRevokedIterator struct { + Event *PermissionlessNodeRegistryRoleRevoked // 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 *PermissionlessNodeRegistryRoleRevokedIterator) 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(PermissionlessNodeRegistryRoleRevoked) + if err := 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(PermissionlessNodeRegistryRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryRoleRevoked represents a RoleRevoked event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*PermissionlessNodeRegistryRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryRoleRevokedIterator{contract: _PermissionlessNodeRegistry.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, 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(PermissionlessNodeRegistryRoleRevoked) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseRoleRevoked(log types.Log) (*PermissionlessNodeRegistryRoleRevoked, error) { + event := new(PermissionlessNodeRegistryRoleRevoked) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryTransferredCollateralToPoolIterator is returned from FilterTransferredCollateralToPool and is used to iterate over the raw logs and unpacked data for TransferredCollateralToPool events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryTransferredCollateralToPoolIterator struct { + Event *PermissionlessNodeRegistryTransferredCollateralToPool // 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 *PermissionlessNodeRegistryTransferredCollateralToPoolIterator) 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(PermissionlessNodeRegistryTransferredCollateralToPool) + if err := 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(PermissionlessNodeRegistryTransferredCollateralToPool) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryTransferredCollateralToPoolIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryTransferredCollateralToPoolIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryTransferredCollateralToPool represents a TransferredCollateralToPool event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryTransferredCollateralToPool struct { + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransferredCollateralToPool is a free log retrieval operation binding the contract event 0x9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a. +// +// Solidity: event TransferredCollateralToPool(uint256 amount) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterTransferredCollateralToPool(opts *bind.FilterOpts) (*PermissionlessNodeRegistryTransferredCollateralToPoolIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "TransferredCollateralToPool") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryTransferredCollateralToPoolIterator{contract: _PermissionlessNodeRegistry.contract, event: "TransferredCollateralToPool", logs: logs, sub: sub}, nil +} + +// WatchTransferredCollateralToPool is a free log subscription operation binding the contract event 0x9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a. +// +// Solidity: event TransferredCollateralToPool(uint256 amount) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchTransferredCollateralToPool(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryTransferredCollateralToPool) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "TransferredCollateralToPool") + 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(PermissionlessNodeRegistryTransferredCollateralToPool) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "TransferredCollateralToPool", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTransferredCollateralToPool is a log parse operation binding the contract event 0x9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a. +// +// Solidity: event TransferredCollateralToPool(uint256 amount) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseTransferredCollateralToPool(log types.Log) (*PermissionlessNodeRegistryTransferredCollateralToPool, error) { + event := new(PermissionlessNodeRegistryTransferredCollateralToPool) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "TransferredCollateralToPool", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUnpausedIterator struct { + Event *PermissionlessNodeRegistryUnpaused // 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 *PermissionlessNodeRegistryUnpausedIterator) 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(PermissionlessNodeRegistryUnpaused) + if err := 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(PermissionlessNodeRegistryUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryUnpaused represents a Unpaused event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUnpaused 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 (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterUnpaused(opts *bind.FilterOpts) (*PermissionlessNodeRegistryUnpausedIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryUnpausedIterator{contract: _PermissionlessNodeRegistry.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 (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryUnpaused) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.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(PermissionlessNodeRegistryUnpaused) + if err := _PermissionlessNodeRegistry.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 (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseUnpaused(log types.Log) (*PermissionlessNodeRegistryUnpaused, error) { + event := new(PermissionlessNodeRegistryUnpaused) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryUpdatedInputKeyCountLimitIterator is returned from FilterUpdatedInputKeyCountLimit and is used to iterate over the raw logs and unpacked data for UpdatedInputKeyCountLimit events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedInputKeyCountLimitIterator struct { + Event *PermissionlessNodeRegistryUpdatedInputKeyCountLimit // 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 *PermissionlessNodeRegistryUpdatedInputKeyCountLimitIterator) 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(PermissionlessNodeRegistryUpdatedInputKeyCountLimit) + if err := 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(PermissionlessNodeRegistryUpdatedInputKeyCountLimit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryUpdatedInputKeyCountLimitIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryUpdatedInputKeyCountLimitIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryUpdatedInputKeyCountLimit represents a UpdatedInputKeyCountLimit event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedInputKeyCountLimit struct { + BatchKeyDepositLimit *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedInputKeyCountLimit is a free log retrieval operation binding the contract event 0x5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c36. +// +// Solidity: event UpdatedInputKeyCountLimit(uint256 batchKeyDepositLimit) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterUpdatedInputKeyCountLimit(opts *bind.FilterOpts) (*PermissionlessNodeRegistryUpdatedInputKeyCountLimitIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "UpdatedInputKeyCountLimit") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryUpdatedInputKeyCountLimitIterator{contract: _PermissionlessNodeRegistry.contract, event: "UpdatedInputKeyCountLimit", logs: logs, sub: sub}, nil +} + +// WatchUpdatedInputKeyCountLimit is a free log subscription operation binding the contract event 0x5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c36. +// +// Solidity: event UpdatedInputKeyCountLimit(uint256 batchKeyDepositLimit) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchUpdatedInputKeyCountLimit(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryUpdatedInputKeyCountLimit) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "UpdatedInputKeyCountLimit") + 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(PermissionlessNodeRegistryUpdatedInputKeyCountLimit) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedInputKeyCountLimit", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedInputKeyCountLimit is a log parse operation binding the contract event 0x5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c36. +// +// Solidity: event UpdatedInputKeyCountLimit(uint256 batchKeyDepositLimit) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseUpdatedInputKeyCountLimit(log types.Log) (*PermissionlessNodeRegistryUpdatedInputKeyCountLimit, error) { + event := new(PermissionlessNodeRegistryUpdatedInputKeyCountLimit) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedInputKeyCountLimit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryUpdatedMaxNonTerminalKeyPerOperatorIterator is returned from FilterUpdatedMaxNonTerminalKeyPerOperator and is used to iterate over the raw logs and unpacked data for UpdatedMaxNonTerminalKeyPerOperator events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedMaxNonTerminalKeyPerOperatorIterator struct { + Event *PermissionlessNodeRegistryUpdatedMaxNonTerminalKeyPerOperator // 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 *PermissionlessNodeRegistryUpdatedMaxNonTerminalKeyPerOperatorIterator) 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(PermissionlessNodeRegistryUpdatedMaxNonTerminalKeyPerOperator) + if err := 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(PermissionlessNodeRegistryUpdatedMaxNonTerminalKeyPerOperator) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryUpdatedMaxNonTerminalKeyPerOperatorIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryUpdatedMaxNonTerminalKeyPerOperatorIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryUpdatedMaxNonTerminalKeyPerOperator represents a UpdatedMaxNonTerminalKeyPerOperator event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedMaxNonTerminalKeyPerOperator struct { + MaxNonTerminalKeyPerOperator uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedMaxNonTerminalKeyPerOperator is a free log retrieval operation binding the contract event 0xacda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a2. +// +// Solidity: event UpdatedMaxNonTerminalKeyPerOperator(uint64 maxNonTerminalKeyPerOperator) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterUpdatedMaxNonTerminalKeyPerOperator(opts *bind.FilterOpts) (*PermissionlessNodeRegistryUpdatedMaxNonTerminalKeyPerOperatorIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "UpdatedMaxNonTerminalKeyPerOperator") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryUpdatedMaxNonTerminalKeyPerOperatorIterator{contract: _PermissionlessNodeRegistry.contract, event: "UpdatedMaxNonTerminalKeyPerOperator", logs: logs, sub: sub}, nil +} + +// WatchUpdatedMaxNonTerminalKeyPerOperator is a free log subscription operation binding the contract event 0xacda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a2. +// +// Solidity: event UpdatedMaxNonTerminalKeyPerOperator(uint64 maxNonTerminalKeyPerOperator) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchUpdatedMaxNonTerminalKeyPerOperator(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryUpdatedMaxNonTerminalKeyPerOperator) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "UpdatedMaxNonTerminalKeyPerOperator") + 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(PermissionlessNodeRegistryUpdatedMaxNonTerminalKeyPerOperator) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedMaxNonTerminalKeyPerOperator", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedMaxNonTerminalKeyPerOperator is a log parse operation binding the contract event 0xacda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a2. +// +// Solidity: event UpdatedMaxNonTerminalKeyPerOperator(uint64 maxNonTerminalKeyPerOperator) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseUpdatedMaxNonTerminalKeyPerOperator(log types.Log) (*PermissionlessNodeRegistryUpdatedMaxNonTerminalKeyPerOperator, error) { + event := new(PermissionlessNodeRegistryUpdatedMaxNonTerminalKeyPerOperator) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedMaxNonTerminalKeyPerOperator", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryUpdatedNextQueuedValidatorIndexIterator is returned from FilterUpdatedNextQueuedValidatorIndex and is used to iterate over the raw logs and unpacked data for UpdatedNextQueuedValidatorIndex events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedNextQueuedValidatorIndexIterator struct { + Event *PermissionlessNodeRegistryUpdatedNextQueuedValidatorIndex // 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 *PermissionlessNodeRegistryUpdatedNextQueuedValidatorIndexIterator) 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(PermissionlessNodeRegistryUpdatedNextQueuedValidatorIndex) + if err := 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(PermissionlessNodeRegistryUpdatedNextQueuedValidatorIndex) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryUpdatedNextQueuedValidatorIndexIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryUpdatedNextQueuedValidatorIndexIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryUpdatedNextQueuedValidatorIndex represents a UpdatedNextQueuedValidatorIndex event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedNextQueuedValidatorIndex struct { + NextQueuedValidatorIndex *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedNextQueuedValidatorIndex is a free log retrieval operation binding the contract event 0x711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da9. +// +// Solidity: event UpdatedNextQueuedValidatorIndex(uint256 nextQueuedValidatorIndex) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterUpdatedNextQueuedValidatorIndex(opts *bind.FilterOpts) (*PermissionlessNodeRegistryUpdatedNextQueuedValidatorIndexIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "UpdatedNextQueuedValidatorIndex") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryUpdatedNextQueuedValidatorIndexIterator{contract: _PermissionlessNodeRegistry.contract, event: "UpdatedNextQueuedValidatorIndex", logs: logs, sub: sub}, nil +} + +// WatchUpdatedNextQueuedValidatorIndex is a free log subscription operation binding the contract event 0x711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da9. +// +// Solidity: event UpdatedNextQueuedValidatorIndex(uint256 nextQueuedValidatorIndex) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchUpdatedNextQueuedValidatorIndex(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryUpdatedNextQueuedValidatorIndex) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "UpdatedNextQueuedValidatorIndex") + 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(PermissionlessNodeRegistryUpdatedNextQueuedValidatorIndex) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedNextQueuedValidatorIndex", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedNextQueuedValidatorIndex is a log parse operation binding the contract event 0x711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da9. +// +// Solidity: event UpdatedNextQueuedValidatorIndex(uint256 nextQueuedValidatorIndex) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseUpdatedNextQueuedValidatorIndex(log types.Log) (*PermissionlessNodeRegistryUpdatedNextQueuedValidatorIndex, error) { + event := new(PermissionlessNodeRegistryUpdatedNextQueuedValidatorIndex) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedNextQueuedValidatorIndex", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryUpdatedOperatorDetailsIterator is returned from FilterUpdatedOperatorDetails and is used to iterate over the raw logs and unpacked data for UpdatedOperatorDetails events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedOperatorDetailsIterator struct { + Event *PermissionlessNodeRegistryUpdatedOperatorDetails // 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 *PermissionlessNodeRegistryUpdatedOperatorDetailsIterator) 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(PermissionlessNodeRegistryUpdatedOperatorDetails) + if err := 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(PermissionlessNodeRegistryUpdatedOperatorDetails) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryUpdatedOperatorDetailsIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryUpdatedOperatorDetailsIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryUpdatedOperatorDetails represents a UpdatedOperatorDetails event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedOperatorDetails struct { + NodeOperator common.Address + OperatorName string + RewardAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedOperatorDetails is a free log retrieval operation binding the contract event 0xadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d87269777. +// +// Solidity: event UpdatedOperatorDetails(address indexed nodeOperator, string operatorName, address rewardAddress) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterUpdatedOperatorDetails(opts *bind.FilterOpts, nodeOperator []common.Address) (*PermissionlessNodeRegistryUpdatedOperatorDetailsIterator, error) { + + var nodeOperatorRule []interface{} + for _, nodeOperatorItem := range nodeOperator { + nodeOperatorRule = append(nodeOperatorRule, nodeOperatorItem) + } + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "UpdatedOperatorDetails", nodeOperatorRule) + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryUpdatedOperatorDetailsIterator{contract: _PermissionlessNodeRegistry.contract, event: "UpdatedOperatorDetails", logs: logs, sub: sub}, nil +} + +// WatchUpdatedOperatorDetails is a free log subscription operation binding the contract event 0xadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d87269777. +// +// Solidity: event UpdatedOperatorDetails(address indexed nodeOperator, string operatorName, address rewardAddress) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchUpdatedOperatorDetails(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryUpdatedOperatorDetails, nodeOperator []common.Address) (event.Subscription, error) { + + var nodeOperatorRule []interface{} + for _, nodeOperatorItem := range nodeOperator { + nodeOperatorRule = append(nodeOperatorRule, nodeOperatorItem) + } + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "UpdatedOperatorDetails", nodeOperatorRule) + 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(PermissionlessNodeRegistryUpdatedOperatorDetails) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedOperatorDetails", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedOperatorDetails is a log parse operation binding the contract event 0xadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d87269777. +// +// Solidity: event UpdatedOperatorDetails(address indexed nodeOperator, string operatorName, address rewardAddress) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseUpdatedOperatorDetails(log types.Log) (*PermissionlessNodeRegistryUpdatedOperatorDetails, error) { + event := new(PermissionlessNodeRegistryUpdatedOperatorDetails) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedOperatorDetails", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryUpdatedSocializingPoolStateIterator is returned from FilterUpdatedSocializingPoolState and is used to iterate over the raw logs and unpacked data for UpdatedSocializingPoolState events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedSocializingPoolStateIterator struct { + Event *PermissionlessNodeRegistryUpdatedSocializingPoolState // 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 *PermissionlessNodeRegistryUpdatedSocializingPoolStateIterator) 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(PermissionlessNodeRegistryUpdatedSocializingPoolState) + if err := 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(PermissionlessNodeRegistryUpdatedSocializingPoolState) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryUpdatedSocializingPoolStateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryUpdatedSocializingPoolStateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryUpdatedSocializingPoolState represents a UpdatedSocializingPoolState event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedSocializingPoolState struct { + OperatorId *big.Int + OptedForSocializingPool bool + Block *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedSocializingPoolState is a free log retrieval operation binding the contract event 0xc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b. +// +// Solidity: event UpdatedSocializingPoolState(uint256 operatorId, bool optedForSocializingPool, uint256 block) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterUpdatedSocializingPoolState(opts *bind.FilterOpts) (*PermissionlessNodeRegistryUpdatedSocializingPoolStateIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "UpdatedSocializingPoolState") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryUpdatedSocializingPoolStateIterator{contract: _PermissionlessNodeRegistry.contract, event: "UpdatedSocializingPoolState", logs: logs, sub: sub}, nil +} + +// WatchUpdatedSocializingPoolState is a free log subscription operation binding the contract event 0xc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b. +// +// Solidity: event UpdatedSocializingPoolState(uint256 operatorId, bool optedForSocializingPool, uint256 block) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchUpdatedSocializingPoolState(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryUpdatedSocializingPoolState) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "UpdatedSocializingPoolState") + 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(PermissionlessNodeRegistryUpdatedSocializingPoolState) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedSocializingPoolState", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedSocializingPoolState is a log parse operation binding the contract event 0xc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b. +// +// Solidity: event UpdatedSocializingPoolState(uint256 operatorId, bool optedForSocializingPool, uint256 block) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseUpdatedSocializingPoolState(log types.Log) (*PermissionlessNodeRegistryUpdatedSocializingPoolState, error) { + event := new(PermissionlessNodeRegistryUpdatedSocializingPoolState) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedSocializingPoolState", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryUpdatedStaderConfigIterator is returned from FilterUpdatedStaderConfig and is used to iterate over the raw logs and unpacked data for UpdatedStaderConfig events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedStaderConfigIterator struct { + Event *PermissionlessNodeRegistryUpdatedStaderConfig // 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 *PermissionlessNodeRegistryUpdatedStaderConfigIterator) 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(PermissionlessNodeRegistryUpdatedStaderConfig) + if err := 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(PermissionlessNodeRegistryUpdatedStaderConfig) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryUpdatedStaderConfigIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryUpdatedStaderConfigIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryUpdatedStaderConfig represents a UpdatedStaderConfig event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedStaderConfig struct { + StaderConfig common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedStaderConfig is a free log retrieval operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterUpdatedStaderConfig(opts *bind.FilterOpts) (*PermissionlessNodeRegistryUpdatedStaderConfigIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "UpdatedStaderConfig") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryUpdatedStaderConfigIterator{contract: _PermissionlessNodeRegistry.contract, event: "UpdatedStaderConfig", logs: logs, sub: sub}, nil +} + +// WatchUpdatedStaderConfig is a free log subscription operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchUpdatedStaderConfig(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryUpdatedStaderConfig) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "UpdatedStaderConfig") + 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(PermissionlessNodeRegistryUpdatedStaderConfig) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedStaderConfig is a log parse operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseUpdatedStaderConfig(log types.Log) (*PermissionlessNodeRegistryUpdatedStaderConfig, error) { + event := new(PermissionlessNodeRegistryUpdatedStaderConfig) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryUpdatedValidatorDepositBlockIterator is returned from FilterUpdatedValidatorDepositBlock and is used to iterate over the raw logs and unpacked data for UpdatedValidatorDepositBlock events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedValidatorDepositBlockIterator struct { + Event *PermissionlessNodeRegistryUpdatedValidatorDepositBlock // 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 *PermissionlessNodeRegistryUpdatedValidatorDepositBlockIterator) 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(PermissionlessNodeRegistryUpdatedValidatorDepositBlock) + if err := 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(PermissionlessNodeRegistryUpdatedValidatorDepositBlock) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryUpdatedValidatorDepositBlockIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryUpdatedValidatorDepositBlockIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryUpdatedValidatorDepositBlock represents a UpdatedValidatorDepositBlock event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedValidatorDepositBlock struct { + ValidatorId *big.Int + DepositBlock *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedValidatorDepositBlock is a free log retrieval operation binding the contract event 0xce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c01. +// +// Solidity: event UpdatedValidatorDepositBlock(uint256 validatorId, uint256 depositBlock) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterUpdatedValidatorDepositBlock(opts *bind.FilterOpts) (*PermissionlessNodeRegistryUpdatedValidatorDepositBlockIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "UpdatedValidatorDepositBlock") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryUpdatedValidatorDepositBlockIterator{contract: _PermissionlessNodeRegistry.contract, event: "UpdatedValidatorDepositBlock", logs: logs, sub: sub}, nil +} + +// WatchUpdatedValidatorDepositBlock is a free log subscription operation binding the contract event 0xce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c01. +// +// Solidity: event UpdatedValidatorDepositBlock(uint256 validatorId, uint256 depositBlock) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchUpdatedValidatorDepositBlock(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryUpdatedValidatorDepositBlock) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "UpdatedValidatorDepositBlock") + 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(PermissionlessNodeRegistryUpdatedValidatorDepositBlock) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedValidatorDepositBlock", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedValidatorDepositBlock is a log parse operation binding the contract event 0xce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c01. +// +// Solidity: event UpdatedValidatorDepositBlock(uint256 validatorId, uint256 depositBlock) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseUpdatedValidatorDepositBlock(log types.Log) (*PermissionlessNodeRegistryUpdatedValidatorDepositBlock, error) { + event := new(PermissionlessNodeRegistryUpdatedValidatorDepositBlock) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedValidatorDepositBlock", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryUpdatedVerifiedKeyBatchSizeIterator is returned from FilterUpdatedVerifiedKeyBatchSize and is used to iterate over the raw logs and unpacked data for UpdatedVerifiedKeyBatchSize events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedVerifiedKeyBatchSizeIterator struct { + Event *PermissionlessNodeRegistryUpdatedVerifiedKeyBatchSize // 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 *PermissionlessNodeRegistryUpdatedVerifiedKeyBatchSizeIterator) 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(PermissionlessNodeRegistryUpdatedVerifiedKeyBatchSize) + if err := 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(PermissionlessNodeRegistryUpdatedVerifiedKeyBatchSize) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryUpdatedVerifiedKeyBatchSizeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryUpdatedVerifiedKeyBatchSizeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryUpdatedVerifiedKeyBatchSize represents a UpdatedVerifiedKeyBatchSize event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedVerifiedKeyBatchSize struct { + VerifiedKeysBatchSize *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedVerifiedKeyBatchSize is a free log retrieval operation binding the contract event 0x5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b4. +// +// Solidity: event UpdatedVerifiedKeyBatchSize(uint256 verifiedKeysBatchSize) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterUpdatedVerifiedKeyBatchSize(opts *bind.FilterOpts) (*PermissionlessNodeRegistryUpdatedVerifiedKeyBatchSizeIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "UpdatedVerifiedKeyBatchSize") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryUpdatedVerifiedKeyBatchSizeIterator{contract: _PermissionlessNodeRegistry.contract, event: "UpdatedVerifiedKeyBatchSize", logs: logs, sub: sub}, nil +} + +// WatchUpdatedVerifiedKeyBatchSize is a free log subscription operation binding the contract event 0x5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b4. +// +// Solidity: event UpdatedVerifiedKeyBatchSize(uint256 verifiedKeysBatchSize) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchUpdatedVerifiedKeyBatchSize(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryUpdatedVerifiedKeyBatchSize) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "UpdatedVerifiedKeyBatchSize") + 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(PermissionlessNodeRegistryUpdatedVerifiedKeyBatchSize) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedVerifiedKeyBatchSize", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedVerifiedKeyBatchSize is a log parse operation binding the contract event 0x5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b4. +// +// Solidity: event UpdatedVerifiedKeyBatchSize(uint256 verifiedKeysBatchSize) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseUpdatedVerifiedKeyBatchSize(log types.Log) (*PermissionlessNodeRegistryUpdatedVerifiedKeyBatchSize, error) { + event := new(PermissionlessNodeRegistryUpdatedVerifiedKeyBatchSize) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedVerifiedKeyBatchSize", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryUpdatedWithdrawnKeyBatchSizeIterator is returned from FilterUpdatedWithdrawnKeyBatchSize and is used to iterate over the raw logs and unpacked data for UpdatedWithdrawnKeyBatchSize events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedWithdrawnKeyBatchSizeIterator struct { + Event *PermissionlessNodeRegistryUpdatedWithdrawnKeyBatchSize // 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 *PermissionlessNodeRegistryUpdatedWithdrawnKeyBatchSizeIterator) 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(PermissionlessNodeRegistryUpdatedWithdrawnKeyBatchSize) + if err := 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(PermissionlessNodeRegistryUpdatedWithdrawnKeyBatchSize) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryUpdatedWithdrawnKeyBatchSizeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryUpdatedWithdrawnKeyBatchSizeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryUpdatedWithdrawnKeyBatchSize represents a UpdatedWithdrawnKeyBatchSize event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryUpdatedWithdrawnKeyBatchSize struct { + WithdrawnKeysBatchSize *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedWithdrawnKeyBatchSize is a free log retrieval operation binding the contract event 0x5aa519ec64f29fb81c513568f7c6839ee0265b5799bb434dfa467be612125950. +// +// Solidity: event UpdatedWithdrawnKeyBatchSize(uint256 withdrawnKeysBatchSize) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterUpdatedWithdrawnKeyBatchSize(opts *bind.FilterOpts) (*PermissionlessNodeRegistryUpdatedWithdrawnKeyBatchSizeIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "UpdatedWithdrawnKeyBatchSize") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryUpdatedWithdrawnKeyBatchSizeIterator{contract: _PermissionlessNodeRegistry.contract, event: "UpdatedWithdrawnKeyBatchSize", logs: logs, sub: sub}, nil +} + +// WatchUpdatedWithdrawnKeyBatchSize is a free log subscription operation binding the contract event 0x5aa519ec64f29fb81c513568f7c6839ee0265b5799bb434dfa467be612125950. +// +// Solidity: event UpdatedWithdrawnKeyBatchSize(uint256 withdrawnKeysBatchSize) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchUpdatedWithdrawnKeyBatchSize(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryUpdatedWithdrawnKeyBatchSize) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "UpdatedWithdrawnKeyBatchSize") + 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(PermissionlessNodeRegistryUpdatedWithdrawnKeyBatchSize) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedWithdrawnKeyBatchSize", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedWithdrawnKeyBatchSize is a log parse operation binding the contract event 0x5aa519ec64f29fb81c513568f7c6839ee0265b5799bb434dfa467be612125950. +// +// Solidity: event UpdatedWithdrawnKeyBatchSize(uint256 withdrawnKeysBatchSize) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseUpdatedWithdrawnKeyBatchSize(log types.Log) (*PermissionlessNodeRegistryUpdatedWithdrawnKeyBatchSize, error) { + event := new(PermissionlessNodeRegistryUpdatedWithdrawnKeyBatchSize) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "UpdatedWithdrawnKeyBatchSize", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryValidatorMarkedAsFrontRunnedIterator is returned from FilterValidatorMarkedAsFrontRunned and is used to iterate over the raw logs and unpacked data for ValidatorMarkedAsFrontRunned events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryValidatorMarkedAsFrontRunnedIterator struct { + Event *PermissionlessNodeRegistryValidatorMarkedAsFrontRunned // 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 *PermissionlessNodeRegistryValidatorMarkedAsFrontRunnedIterator) 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(PermissionlessNodeRegistryValidatorMarkedAsFrontRunned) + if err := 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(PermissionlessNodeRegistryValidatorMarkedAsFrontRunned) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryValidatorMarkedAsFrontRunnedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryValidatorMarkedAsFrontRunnedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryValidatorMarkedAsFrontRunned represents a ValidatorMarkedAsFrontRunned event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryValidatorMarkedAsFrontRunned struct { + Pubkey []byte + ValidatorId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorMarkedAsFrontRunned is a free log retrieval operation binding the contract event 0x4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b83466. +// +// Solidity: event ValidatorMarkedAsFrontRunned(bytes pubkey, uint256 validatorId) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterValidatorMarkedAsFrontRunned(opts *bind.FilterOpts) (*PermissionlessNodeRegistryValidatorMarkedAsFrontRunnedIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "ValidatorMarkedAsFrontRunned") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryValidatorMarkedAsFrontRunnedIterator{contract: _PermissionlessNodeRegistry.contract, event: "ValidatorMarkedAsFrontRunned", logs: logs, sub: sub}, nil +} + +// WatchValidatorMarkedAsFrontRunned is a free log subscription operation binding the contract event 0x4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b83466. +// +// Solidity: event ValidatorMarkedAsFrontRunned(bytes pubkey, uint256 validatorId) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchValidatorMarkedAsFrontRunned(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryValidatorMarkedAsFrontRunned) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "ValidatorMarkedAsFrontRunned") + 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(PermissionlessNodeRegistryValidatorMarkedAsFrontRunned) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "ValidatorMarkedAsFrontRunned", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseValidatorMarkedAsFrontRunned is a log parse operation binding the contract event 0x4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b83466. +// +// Solidity: event ValidatorMarkedAsFrontRunned(bytes pubkey, uint256 validatorId) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseValidatorMarkedAsFrontRunned(log types.Log) (*PermissionlessNodeRegistryValidatorMarkedAsFrontRunned, error) { + event := new(PermissionlessNodeRegistryValidatorMarkedAsFrontRunned) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "ValidatorMarkedAsFrontRunned", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryValidatorMarkedReadyToDepositIterator is returned from FilterValidatorMarkedReadyToDeposit and is used to iterate over the raw logs and unpacked data for ValidatorMarkedReadyToDeposit events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryValidatorMarkedReadyToDepositIterator struct { + Event *PermissionlessNodeRegistryValidatorMarkedReadyToDeposit // 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 *PermissionlessNodeRegistryValidatorMarkedReadyToDepositIterator) 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(PermissionlessNodeRegistryValidatorMarkedReadyToDeposit) + if err := 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(PermissionlessNodeRegistryValidatorMarkedReadyToDeposit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryValidatorMarkedReadyToDepositIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryValidatorMarkedReadyToDepositIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryValidatorMarkedReadyToDeposit represents a ValidatorMarkedReadyToDeposit event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryValidatorMarkedReadyToDeposit struct { + Pubkey []byte + ValidatorId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorMarkedReadyToDeposit is a free log retrieval operation binding the contract event 0x21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf5693. +// +// Solidity: event ValidatorMarkedReadyToDeposit(bytes pubkey, uint256 validatorId) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterValidatorMarkedReadyToDeposit(opts *bind.FilterOpts) (*PermissionlessNodeRegistryValidatorMarkedReadyToDepositIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "ValidatorMarkedReadyToDeposit") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryValidatorMarkedReadyToDepositIterator{contract: _PermissionlessNodeRegistry.contract, event: "ValidatorMarkedReadyToDeposit", logs: logs, sub: sub}, nil +} + +// WatchValidatorMarkedReadyToDeposit is a free log subscription operation binding the contract event 0x21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf5693. +// +// Solidity: event ValidatorMarkedReadyToDeposit(bytes pubkey, uint256 validatorId) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchValidatorMarkedReadyToDeposit(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryValidatorMarkedReadyToDeposit) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "ValidatorMarkedReadyToDeposit") + 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(PermissionlessNodeRegistryValidatorMarkedReadyToDeposit) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "ValidatorMarkedReadyToDeposit", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseValidatorMarkedReadyToDeposit is a log parse operation binding the contract event 0x21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf5693. +// +// Solidity: event ValidatorMarkedReadyToDeposit(bytes pubkey, uint256 validatorId) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseValidatorMarkedReadyToDeposit(log types.Log) (*PermissionlessNodeRegistryValidatorMarkedReadyToDeposit, error) { + event := new(PermissionlessNodeRegistryValidatorMarkedReadyToDeposit) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "ValidatorMarkedReadyToDeposit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryValidatorStatusMarkedAsInvalidSignatureIterator is returned from FilterValidatorStatusMarkedAsInvalidSignature and is used to iterate over the raw logs and unpacked data for ValidatorStatusMarkedAsInvalidSignature events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryValidatorStatusMarkedAsInvalidSignatureIterator struct { + Event *PermissionlessNodeRegistryValidatorStatusMarkedAsInvalidSignature // 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 *PermissionlessNodeRegistryValidatorStatusMarkedAsInvalidSignatureIterator) 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(PermissionlessNodeRegistryValidatorStatusMarkedAsInvalidSignature) + if err := 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(PermissionlessNodeRegistryValidatorStatusMarkedAsInvalidSignature) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryValidatorStatusMarkedAsInvalidSignatureIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryValidatorStatusMarkedAsInvalidSignatureIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryValidatorStatusMarkedAsInvalidSignature represents a ValidatorStatusMarkedAsInvalidSignature event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryValidatorStatusMarkedAsInvalidSignature struct { + Pubkey []byte + ValidatorId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorStatusMarkedAsInvalidSignature is a free log retrieval operation binding the contract event 0x596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f. +// +// Solidity: event ValidatorStatusMarkedAsInvalidSignature(bytes pubkey, uint256 validatorId) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterValidatorStatusMarkedAsInvalidSignature(opts *bind.FilterOpts) (*PermissionlessNodeRegistryValidatorStatusMarkedAsInvalidSignatureIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "ValidatorStatusMarkedAsInvalidSignature") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryValidatorStatusMarkedAsInvalidSignatureIterator{contract: _PermissionlessNodeRegistry.contract, event: "ValidatorStatusMarkedAsInvalidSignature", logs: logs, sub: sub}, nil +} + +// WatchValidatorStatusMarkedAsInvalidSignature is a free log subscription operation binding the contract event 0x596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f. +// +// Solidity: event ValidatorStatusMarkedAsInvalidSignature(bytes pubkey, uint256 validatorId) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchValidatorStatusMarkedAsInvalidSignature(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryValidatorStatusMarkedAsInvalidSignature) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "ValidatorStatusMarkedAsInvalidSignature") + 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(PermissionlessNodeRegistryValidatorStatusMarkedAsInvalidSignature) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "ValidatorStatusMarkedAsInvalidSignature", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseValidatorStatusMarkedAsInvalidSignature is a log parse operation binding the contract event 0x596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f. +// +// Solidity: event ValidatorStatusMarkedAsInvalidSignature(bytes pubkey, uint256 validatorId) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseValidatorStatusMarkedAsInvalidSignature(log types.Log) (*PermissionlessNodeRegistryValidatorStatusMarkedAsInvalidSignature, error) { + event := new(PermissionlessNodeRegistryValidatorStatusMarkedAsInvalidSignature) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "ValidatorStatusMarkedAsInvalidSignature", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessNodeRegistryValidatorWithdrawnIterator is returned from FilterValidatorWithdrawn and is used to iterate over the raw logs and unpacked data for ValidatorWithdrawn events raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryValidatorWithdrawnIterator struct { + Event *PermissionlessNodeRegistryValidatorWithdrawn // 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 *PermissionlessNodeRegistryValidatorWithdrawnIterator) 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(PermissionlessNodeRegistryValidatorWithdrawn) + if err := 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(PermissionlessNodeRegistryValidatorWithdrawn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessNodeRegistryValidatorWithdrawnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessNodeRegistryValidatorWithdrawnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessNodeRegistryValidatorWithdrawn represents a ValidatorWithdrawn event raised by the PermissionlessNodeRegistry contract. +type PermissionlessNodeRegistryValidatorWithdrawn struct { + Pubkey []byte + ValidatorId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorWithdrawn is a free log retrieval operation binding the contract event 0x450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf79. +// +// Solidity: event ValidatorWithdrawn(bytes pubkey, uint256 validatorId) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) FilterValidatorWithdrawn(opts *bind.FilterOpts) (*PermissionlessNodeRegistryValidatorWithdrawnIterator, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.FilterLogs(opts, "ValidatorWithdrawn") + if err != nil { + return nil, err + } + return &PermissionlessNodeRegistryValidatorWithdrawnIterator{contract: _PermissionlessNodeRegistry.contract, event: "ValidatorWithdrawn", logs: logs, sub: sub}, nil +} + +// WatchValidatorWithdrawn is a free log subscription operation binding the contract event 0x450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf79. +// +// Solidity: event ValidatorWithdrawn(bytes pubkey, uint256 validatorId) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) WatchValidatorWithdrawn(opts *bind.WatchOpts, sink chan<- *PermissionlessNodeRegistryValidatorWithdrawn) (event.Subscription, error) { + + logs, sub, err := _PermissionlessNodeRegistry.contract.WatchLogs(opts, "ValidatorWithdrawn") + 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(PermissionlessNodeRegistryValidatorWithdrawn) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "ValidatorWithdrawn", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseValidatorWithdrawn is a log parse operation binding the contract event 0x450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf79. +// +// Solidity: event ValidatorWithdrawn(bytes pubkey, uint256 validatorId) +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryFilterer) ParseValidatorWithdrawn(log types.Log) (*PermissionlessNodeRegistryValidatorWithdrawn, error) { + event := new(PermissionlessNodeRegistryValidatorWithdrawn) + if err := _PermissionlessNodeRegistry.contract.UnpackLog(event, "ValidatorWithdrawn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/testing/contracts/PermissionlessPool.go b/testing/contracts/PermissionlessPool.go new file mode 100644 index 000000000..6a5c888d7 --- /dev/null +++ b/testing/contracts/PermissionlessPool.go @@ -0,0 +1,2541 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contracts + +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 +) + +// PermissionlessPoolMetaData contains all meta data concerning the PermissionlessPool contract. +var PermissionlessPoolMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CouldNotDetermineExcessETH\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCommission\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ReceivedCollateralETH\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ReceivedInsuranceFund\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredETHToSSPMForDefectiveKeys\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorFee\",\"type\":\"uint256\"}],\"name\":\"UpdatedCommissionFees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorDepositedOnBeaconChain\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorPreDepositedOnBeaconChain\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEPOSIT_NODE_BOND\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_COMMISSION_LIMIT_BIPS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_withdrawCredential\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_depositAmount\",\"type\":\"uint256\"}],\"name\":\"computeDepositDataRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"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\":[],\"name\":\"getSocializingPoolAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"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\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_operatorTotalKeys\",\"type\":\"uint256\"}],\"name\":\"preDepositOnBeaconChain\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"receiveRemainingCollateralETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"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\":\"uint256\",\"name\":\"_protocolFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_operatorFee\",\"type\":\"uint256\"}],\"name\":\"setCommissionFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeUserETHToBeaconChain\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x608060405234801562000010575f80fd5b5060405162003044380380620030448339810160408190526200003391620003ae565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001a3565b6200010e82620001a3565b62000118620001ce565b620001226200022a565b6101f460ca81905560cb5560c980546001600160a01b0319166001600160a01b038416179055620001545f846200028e565b80156200019a575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620003e4565b6001600160a01b038116620001cb5760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002285760405162461bcd60e51b815260206004820152602b60248201525f805160206200302483398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002845760405162461bcd60e51b815260206004820152602b60248201525f805160206200302483398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200022862000331565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff166200032d575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620002ec3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff166200038b5760405162461bcd60e51b815260206004820152602b60248201525f805160206200302483398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6001609755565b80516001600160a01b0381168114620003a9575f80fd5b919050565b5f8060408385031215620003c0575f80fd5b620003cb8362000392565b9150620003db6020840162000392565b90509250929050565b612c3280620003f25f395ff3fe608060405260043610610184575f3560e01c80638a25bcec116100d0578063b01db07811610089578063d547741f11610063578063d547741f14610429578063eda0ae1214610448578063f74b4cd11461045b578063f9c4dda41461046f576101a2565b8063b01db078146103ec578063b0e21e8a14610400578063b6fb3fac14610415576101a2565b80638a25bcec1461035f57806391d148541461037e5780639b26728e1461039d5780639cd6dd56146103a55780639ee804cb146103ba578063a217fddf146103d9576101a2565b806336514d9f1161013d5780635c164e53116101175780635c164e531461030357806377c359e1146103225780637bd977d91461033657806389afc0f11461034a576101a2565b806336514d9f1461028e57806336568abe146102ad578063490ffa35146102cc576101a2565b806301ffc9a7146101bb5780631f033ef0146101ef57806321066d18146101f9578063248a9ca31461021857806324f69706146102545780632f2ff15d1461026f576101a2565b366101a257604051639ba6061b60e01b815260040160405180910390fd5b604051639ba6061b60e01b815260040160405180910390fd5b3480156101c6575f80fd5b506101da6101d5366004612359565b61048e565b60405190151581526020015b60405180910390f35b6101f76104c4565b005b348015610204575f80fd5b506101f7610213366004612380565b610571565b348015610223575f80fd5b506102466102323660046123a0565b5f9081526065602052604090206001015490565b6040519081526020016101e6565b34801561025f575f80fd5b506102466729a2241af62c000081565b34801561027a575f80fd5b506101f76102893660046123cb565b6105fc565b348015610299575f80fd5b506101da6102a836600461243e565b610625565b3480156102b8575f80fd5b506101f76102c73660046123cb565b610703565b3480156102d7575f80fd5b5060c9546102eb906001600160a01b031681565b6040516001600160a01b0390911681526020016101e6565b34801561030e575f80fd5b5061024661031d36600461247d565b610786565b34801561032d575f80fd5b50610246610ac1565b348015610341575f80fd5b50610246610b90565b348015610355575f80fd5b5061024660cb5481565b34801561036a575f80fd5b50610246610379366004612518565b610c36565b348015610389575f80fd5b506101da6103983660046123cb565b610d2b565b6101f7610d55565b3480156103b0575f80fd5b506102466105dc81565b3480156103c5575f80fd5b506101f76103d436600461254a565b611246565b3480156103e4575f80fd5b506102465f81565b3480156103f7575f80fd5b506102466112a7565b34801561040b575f80fd5b5061024660ca5481565b348015610420575f80fd5b506102eb61134d565b348015610434575f80fd5b506101f76104433660046123cb565b6113b8565b6101f76104563660046125a6565b6113dc565b348015610466575f80fd5b506102eb6119a0565b34801561047a575f80fd5b506101da61048936600461254a565b6119e7565b5f6001600160e01b03198216637965db0b60e01b14806104be57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60c95460408051630a9548ed60e11b8152905161053c9233926001600160a01b0390911691829163152a91da9160048083019260209291908290030181865afa158015610513573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610537919061261e565b611abc565b6040513481527f3726a70cbf9252aacb06774b2f9f7108d837fc60afd7143f86eec77d7e3da94b9060200160405180910390a1565b60c9546105889033906001600160a01b0316611b48565b6105dc6105958284612649565b11156105b45760405163dc81db8560e01b815260040160405180910390fd5b60ca82905560cb81905560408051838152602081018390527fe8525a7862504bbe091b0440fe96979769664cae1625591ff0a9816512a5287b91015b60405180910390a15050565b5f8281526065602052604090206001015461061681611bcd565b6106208383611bda565b505050565b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa15801561066c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610690919061266c565b6001600160a01b03166336514d9f84846040518363ffffffff1660e01b81526004016106bd9291906126af565b602060405180830381865afa1580156106d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106fc91906126ca565b9392505050565b6001600160a01b03811633146107785760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107828282611c5f565b5050565b5f8061079183611cc5565b90505f60028a8a5f60801b6040516020016107ae939291906126e9565b60408051601f19818403018152908290526107c891612732565b602060405180830381855afa1580156107e3573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610806919061261e565b90505f6002806108196040848c8e61274d565b60405160200161082a929190612774565b60408051601f198184030181529082905261084491612732565b602060405180830381855afa15801561085f573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610882919061261e565b60026108918b6040818f61274d565b6040516108a49291905f90602001612783565b60408051601f19818403018152908290526108be91612732565b602060405180830381855afa1580156108d9573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108fc919061261e565b60408051602081019390935282015260600160408051601f198184030181529082905261092891612732565b602060405180830381855afa158015610943573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610966919061261e565b905060028083898960405160200161098093929190612795565b60408051601f198184030181529082905261099a91612732565b602060405180830381855afa1580156109b5573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906109d8919061261e565b6040516002906109f09087905f9087906020016127ae565b60408051601f1981840301815290829052610a0a91612732565b602060405180830381855afa158015610a25573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a48919061261e565b60408051602081019390935282015260600160408051601f1981840301815290829052610a7491612732565b602060405180830381855afa158015610a8f573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ab2919061261e565b9b9a5050505050505050505050565b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa158015610b08573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2c919061266c565b6001600160a01b03166377c359e16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b8b919061261e565b905090565b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa158015610bd7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bfb919061266c565b6001600160a01b0316637bd977d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b67573d5f803e3d5ffd5b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa158015610c7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca1919061266c565b6040516322896f3b60e21b81526001600160a01b03868116600483015260248201869052604482018590529190911690638a25bcec90606401602060405180830381865afa158015610cf5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1991906127e5565b67ffffffffffffffff16949350505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610d5d611e81565b60c9546040805163529deeeb60e11b81529051610dac9233926001600160a01b0390911691829163a53bddd69160048083019260209291908290030181865afa158015610513573d5f803e3d5ffd5b5f6729a2241af62c000060c95f9054906101000a90046001600160a01b03166001600160a01b031663fa71fcbb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e06573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e2a919061261e565b610e34919061280c565b610e3e903461281f565b90505f60c95f9054906101000a90046001600160a01b03166001600160a01b031663360374a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb5919061266c565b90506001600160a01b038116635ae7f25d610ed86729a2241af62c00008561283e565b6040518263ffffffff1660e01b8152600401610ef691815260200190565b5f604051808303815f87803b158015610f0d575f80fd5b505af1158015610f1f573d5f803e3d5ffd5b505050505f60c95f9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f74573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f98919061266c565b90505f60c95f9054906101000a90046001600160a01b03166001600160a01b0316638f8b38676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610feb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100f919061266c565b90505f836001600160a01b03166374338e6d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561104e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611072919061261e565b9050805b6110808287612649565b81101561117b5760405163bc4a3ad560e01b8152600481018290525f906001600160a01b0387169063bc4a3ad590602401602060405180830381865afa1580156110cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f0919061261e565b90506111728686868460c95f9054906101000a90046001600160a01b03166001600160a01b031663fa71fcbb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611149573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116d919061261e565b611eda565b50600101611076565b506001600160a01b03841663b8d2f06c6111958784612649565b6040518263ffffffff1660e01b81526004016111b391815260200190565b5f604051808303815f87803b1580156111ca575f80fd5b505af11580156111dc573d5f803e3d5ffd5b50506040516359c3c9b760e01b8152600481018890526001600160a01b03871692506359c3c9b791506024015f604051808303815f87803b15801561121f575f80fd5b505af1158015611231573d5f803e3d5ffd5b5050505050505050506112446001609755565b565b5f61125081611bcd565b61125982612131565b60c980546001600160a01b0319166001600160a01b0384169081179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485906020016105f0565b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa1580156112ee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611312919061266c565b6001600160a01b031663b01db0786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b67573d5f803e3d5ffd5b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa158015611394573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b8b919061266c565b5f828152606560205260409020600101546113d281611bcd565b6106208383611c5f565b6113e4611e81565b60c95460408051630a9548ed60e11b815290516114339233926001600160a01b0390911691829163152a91da9160048083019260209291908290030181865afa158015610513573d5f803e3d5ffd5b60c9546040805163062f2ca160e21b815290515f926001600160a01b0316916318bcb2849160048083019260209291908290030181865afa15801561147a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061149e919061266c565b9050855f5b8181101561198b575f836001600160a01b03166374903b0260c95f9054906101000a90046001600160a01b03166001600160a01b031663360374a46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561150b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152f919061266c565b6001600160a01b031663e0d7d0e96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061158e9190612855565b88611599868a612649565b6040516001600160e01b031960e086901b16815260ff909316600484015260248301919091526044820152606401602060405180830381865afa1580156115e2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611606919061266c565b60405163ae4e4e4560e01b81526001600160a01b0380831660048301529192505f9186169063ae4e4e45906024015f60405180830381865afa15801561164e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611675919081019061290e565b90505f30635c164e538d8d8781811061169057611690612940565b90506020028101906116a29190612954565b8d8d898181106116b4576116b4612940565b90506020028101906116c69190612954565b60c95460408051630829764560e01b815290518a926001600160a01b03169163082976459160048083019260209291908290030181865afa15801561170d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611731919061261e565b6040518763ffffffff1660e01b8152600401611752969594939291906129c2565b602060405180830381865afa15801561176d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611791919061261e565b905060c95f9054906101000a90046001600160a01b03166001600160a01b0316638f8b38676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611807919061266c565b6001600160a01b0316632289511860c95f9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa158015611865573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611889919061261e565b8e8e8881811061189b5761189b612940565b90506020028101906118ad9190612954565b868f8f8b8181106118c0576118c0612940565b90506020028101906118d29190612954565b886040518863ffffffff1660e01b81526004016118f496959493929190612a10565b5f604051808303818588803b15801561190b575f80fd5b505af115801561191d573d5f803e3d5ffd5b50505050507fa35366ad083efbaee7949ff15c68508b95e2c0441248e80d73da97ac82bc1f108c8c8681811061195557611955612940565b90506020028101906119679190612954565b6040516119759291906126af565b60405180910390a18360010193505050506114a3565b5050506119986001609755565b505050505050565b60c9546040805163051fdecd60e11b815290515f926001600160a01b031691630a3fbd9a9160048083019260209291908290030181865afa158015611394573d5f803e3d5ffd5b60c95460408051630d80dd2960e21b815290515f926001600160a01b03169163360374a49160048083019260209291908290030181865afa158015611a2e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a52919061266c565b604051633e71376960e21b81526001600160a01b038481166004830152919091169063f9c4dda490602401602060405180830381865afa158015611a98573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104be91906126ca565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa158015611b07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b2b91906126ca565b6106205760405163168dfea160e01b815260040160405180910390fd5b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015611b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bb091906126ca565b6107825760405163c4230ae360e01b815260040160405180910390fd5b611bd78133612158565b50565b611be48282610d2b565b610782575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611c1b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611c698282610d2b565b15610782575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60605f611cd6633b9aca008461281f565b60408051600880825281830190925291925060208201818036833701905050915060c081901b8060071a60f81b835f81518110611d1557611d15612940565b60200101906001600160f81b03191690815f1a9053508060061a60f81b83600181518110611d4557611d45612940565b60200101906001600160f81b03191690815f1a9053508060051a60f81b83600281518110611d7557611d75612940565b60200101906001600160f81b03191690815f1a9053508060041a60f81b83600381518110611da557611da5612940565b60200101906001600160f81b03191690815f1a9053508060031a60f81b83600481518110611dd557611dd5612940565b60200101906001600160f81b03191690815f1a9053508060021a60f81b83600581518110611e0557611e05612940565b60200101906001600160f81b03191690815f1a9053508060011a60f81b83600681518110611e3557611e35612940565b60200101906001600160f81b03191690815f1a905350805f1a60f81b83600781518110611e6457611e64612940565b60200101906001600160f81b03191690815f1a9053505050919050565b600260975403611ed35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161076f565b6002609755565b5f805f876001600160a01b0316635a1239c1866040518263ffffffff1660e01b8152600401611f0b91815260200190565b5f60405180830381865afa158015611f25573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f4c9190810190612a58565b505060405163ae4e4e4560e01b81526001600160a01b0380841660048301529599509297509095505f945050918a169163ae4e4e4591506024015f60405180830381865afa158015611fa0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611fc7919081019061290e565b604051635c164e5360e01b81529091505f903090635c164e5390611ff5908890889087908c90600401612b17565b602060405180830381865afa158015612010573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612034919061261e565b9050876001600160a01b0316632289511887878588866040518663ffffffff1660e01b81526004016120699493929190612b17565b5f604051808303818588803b158015612080575f80fd5b505af1158015612092573d5f803e3d5ffd5b505060405163186d954160e01b8152600481018b90526001600160a01b038e16935063186d9541925060240190505f604051808303815f87803b1580156120d7575f80fd5b505af11580156120e9573d5f803e3d5ffd5b50505050867fbef89de94658b7ef396ba7f9316542858c893c9011602906b1a2ad18d0a99c358660405161211d9190612b61565b60405180910390a250505050505050505050565b6001600160a01b038116611bd75760405163d92e233d60e01b815260040160405180910390fd5b6121628282610d2b565b6107825761216f816121b1565b61217a8360206121c3565b60405160200161218b929190612b73565b60408051601f198184030181529082905262461bcd60e51b825261076f91600401612b61565b60606104be6001600160a01b03831660145b60605f6121d183600261283e565b6121dc906002612649565b67ffffffffffffffff8111156121f4576121f4612875565b6040519080825280601f01601f19166020018201604052801561221e576020820181803683370190505b509050600360fc1b815f8151811061223857612238612940565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061226657612266612940565b60200101906001600160f81b03191690815f1a9053505f61228884600261283e565b612293906001612649565b90505b600181111561230a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106122c7576122c7612940565b1a60f81b8282815181106122dd576122dd612940565b60200101906001600160f81b03191690815f1a90535060049490941c9361230381612be7565b9050612296565b5083156106fc5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161076f565b5f60208284031215612369575f80fd5b81356001600160e01b0319811681146106fc575f80fd5b5f8060408385031215612391575f80fd5b50508035926020909101359150565b5f602082840312156123b0575f80fd5b5035919050565b6001600160a01b0381168114611bd7575f80fd5b5f80604083850312156123dc575f80fd5b8235915060208301356123ee816123b7565b809150509250929050565b5f8083601f840112612409575f80fd5b50813567ffffffffffffffff811115612420575f80fd5b602083019150836020828501011115612437575f80fd5b9250929050565b5f806020838503121561244f575f80fd5b823567ffffffffffffffff811115612465575f80fd5b612471858286016123f9565b90969095509350505050565b5f805f805f805f6080888a031215612493575f80fd5b873567ffffffffffffffff808211156124aa575f80fd5b6124b68b838c016123f9565b909950975060208a01359150808211156124ce575f80fd5b6124da8b838c016123f9565b909750955060408a01359150808211156124f2575f80fd5b506124ff8a828b016123f9565b989b979a50959894979596606090950135949350505050565b5f805f6060848603121561252a575f80fd5b8335612535816123b7565b95602085013595506040909401359392505050565b5f6020828403121561255a575f80fd5b81356106fc816123b7565b5f8083601f840112612575575f80fd5b50813567ffffffffffffffff81111561258c575f80fd5b6020830191508360208260051b8501011115612437575f80fd5b5f805f805f80608087890312156125bb575f80fd5b863567ffffffffffffffff808211156125d2575f80fd5b6125de8a838b01612565565b909850965060208901359150808211156125f6575f80fd5b5061260389828a01612565565b979a9699509760408101359660609091013595509350505050565b5f6020828403121561262e575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156104be576104be612635565b8051612667816123b7565b919050565b5f6020828403121561267c575f80fd5b81516106fc816123b7565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6126c2602083018486612687565b949350505050565b5f602082840312156126da575f80fd5b815180151581146106fc575f80fd5b828482376fffffffffffffffffffffffffffffffff19919091169101908152601001919050565b5f5b8381101561272a578181015183820152602001612712565b50505f910152565b5f8251612743818460208701612710565b9190910192915050565b5f808585111561275b575f80fd5b83861115612767575f80fd5b5050820193919092039150565b818382375f9101908152919050565b82848237909101908152602001919050565b838152818360208301375f910160200190815292915050565b5f84516127bf818460208901612710565b67ffffffffffffffff199490941691909301908152601881019190915260380192915050565b5f602082840312156127f5575f80fd5b815167ffffffffffffffff811681146106fc575f80fd5b818103818111156104be576104be612635565b5f8261283957634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176104be576104be612635565b5f60208284031215612865575f80fd5b815160ff811681146106fc575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112612898575f80fd5b815167ffffffffffffffff808211156128b3576128b3612875565b604051601f8301601f19908116603f011681019082821181831017156128db576128db612875565b816040528381528660208588010111156128f3575f80fd5b612904846020830160208901612710565b9695505050505050565b5f6020828403121561291e575f80fd5b815167ffffffffffffffff811115612934575f80fd5b6126c284828501612889565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112612969575f80fd5b83018035915067ffffffffffffffff821115612983575f80fd5b602001915036819003821315612437575f80fd5b5f81518084526129ae816020860160208601612710565b601f01601f19169290920160200192915050565b608081525f6129d560808301888a612687565b82810360208401526129e8818789612687565b905082810360408401526129fc8186612997565b915050826060830152979650505050505050565b608081525f612a2360808301888a612687565b8281036020840152612a358188612997565b905082810360408401526129fc818688612687565b805160068110612667575f80fd5b5f805f805f805f80610100898b031215612a70575f80fd5b612a7989612a4a565b9750602089015167ffffffffffffffff80821115612a95575f80fd5b612aa18c838d01612889565b985060408b0151915080821115612ab6575f80fd5b612ac28c838d01612889565b975060608b0151915080821115612ad7575f80fd5b50612ae48b828c01612889565b955050612af360808a0161265c565b935060a0890151925060c0890151915060e089015190509295985092959890939650565b608081525f612b296080830187612997565b8281036020840152612b3b8187612997565b90508281036040840152612b4f8186612997565b91505082606083015295945050505050565b602081525f6106fc6020830184612997565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351612baa816017850160208801612710565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612bdb816028840160208801612710565b01602801949350505050565b5f81612bf557612bf5612635565b505f19019056fea2646970667358221220e90c1fcc9ac3b284311f94d29d16ebeab160375e26ca6944d57f96761b70fa5364736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", +} + +// PermissionlessPoolABI is the input ABI used to generate the binding from. +// Deprecated: Use PermissionlessPoolMetaData.ABI instead. +var PermissionlessPoolABI = PermissionlessPoolMetaData.ABI + +// PermissionlessPoolBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use PermissionlessPoolMetaData.Bin instead. +var PermissionlessPoolBin = PermissionlessPoolMetaData.Bin + +// DeployPermissionlessPool deploys a new Ethereum contract, binding an instance of PermissionlessPool to it. +func DeployPermissionlessPool(auth *bind.TransactOpts, backend bind.ContractBackend, _admin common.Address, _staderConfig common.Address) (common.Address, *types.Transaction, *PermissionlessPool, error) { + parsed, err := PermissionlessPoolMetaData.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(PermissionlessPoolBin), backend, _admin, _staderConfig) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &PermissionlessPool{PermissionlessPoolCaller: PermissionlessPoolCaller{contract: contract}, PermissionlessPoolTransactor: PermissionlessPoolTransactor{contract: contract}, PermissionlessPoolFilterer: PermissionlessPoolFilterer{contract: contract}}, nil +} + +// PermissionlessPool is an auto generated Go binding around an Ethereum contract. +type PermissionlessPool struct { + PermissionlessPoolCaller // Read-only binding to the contract + PermissionlessPoolTransactor // Write-only binding to the contract + PermissionlessPoolFilterer // Log filterer for contract events +} + +// PermissionlessPoolCaller is an auto generated read-only Go binding around an Ethereum contract. +type PermissionlessPoolCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PermissionlessPoolTransactor is an auto generated write-only Go binding around an Ethereum contract. +type PermissionlessPoolTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PermissionlessPoolFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type PermissionlessPoolFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PermissionlessPoolSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type PermissionlessPoolSession struct { + Contract *PermissionlessPool // 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 +} + +// PermissionlessPoolCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type PermissionlessPoolCallerSession struct { + Contract *PermissionlessPoolCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// PermissionlessPoolTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type PermissionlessPoolTransactorSession struct { + Contract *PermissionlessPoolTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// PermissionlessPoolRaw is an auto generated low-level Go binding around an Ethereum contract. +type PermissionlessPoolRaw struct { + Contract *PermissionlessPool // Generic contract binding to access the raw methods on +} + +// PermissionlessPoolCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type PermissionlessPoolCallerRaw struct { + Contract *PermissionlessPoolCaller // Generic read-only contract binding to access the raw methods on +} + +// PermissionlessPoolTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type PermissionlessPoolTransactorRaw struct { + Contract *PermissionlessPoolTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewPermissionlessPool creates a new instance of PermissionlessPool, bound to a specific deployed contract. +func NewPermissionlessPool(address common.Address, backend bind.ContractBackend) (*PermissionlessPool, error) { + contract, err := bindPermissionlessPool(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &PermissionlessPool{PermissionlessPoolCaller: PermissionlessPoolCaller{contract: contract}, PermissionlessPoolTransactor: PermissionlessPoolTransactor{contract: contract}, PermissionlessPoolFilterer: PermissionlessPoolFilterer{contract: contract}}, nil +} + +// NewPermissionlessPoolCaller creates a new read-only instance of PermissionlessPool, bound to a specific deployed contract. +func NewPermissionlessPoolCaller(address common.Address, caller bind.ContractCaller) (*PermissionlessPoolCaller, error) { + contract, err := bindPermissionlessPool(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &PermissionlessPoolCaller{contract: contract}, nil +} + +// NewPermissionlessPoolTransactor creates a new write-only instance of PermissionlessPool, bound to a specific deployed contract. +func NewPermissionlessPoolTransactor(address common.Address, transactor bind.ContractTransactor) (*PermissionlessPoolTransactor, error) { + contract, err := bindPermissionlessPool(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &PermissionlessPoolTransactor{contract: contract}, nil +} + +// NewPermissionlessPoolFilterer creates a new log filterer instance of PermissionlessPool, bound to a specific deployed contract. +func NewPermissionlessPoolFilterer(address common.Address, filterer bind.ContractFilterer) (*PermissionlessPoolFilterer, error) { + contract, err := bindPermissionlessPool(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &PermissionlessPoolFilterer{contract: contract}, nil +} + +// bindPermissionlessPool binds a generic wrapper to an already deployed contract. +func bindPermissionlessPool(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := PermissionlessPoolMetaData.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 (_PermissionlessPool *PermissionlessPoolRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _PermissionlessPool.Contract.PermissionlessPoolCaller.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 (_PermissionlessPool *PermissionlessPoolRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PermissionlessPool.Contract.PermissionlessPoolTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_PermissionlessPool *PermissionlessPoolRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PermissionlessPool.Contract.PermissionlessPoolTransactor.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 (_PermissionlessPool *PermissionlessPoolCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _PermissionlessPool.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 (_PermissionlessPool *PermissionlessPoolTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PermissionlessPool.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_PermissionlessPool *PermissionlessPoolTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PermissionlessPool.Contract.contract.Transact(opts, method, params...) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_PermissionlessPool *PermissionlessPoolCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_PermissionlessPool *PermissionlessPoolSession) DEFAULTADMINROLE() ([32]byte, error) { + return _PermissionlessPool.Contract.DEFAULTADMINROLE(&_PermissionlessPool.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_PermissionlessPool *PermissionlessPoolCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _PermissionlessPool.Contract.DEFAULTADMINROLE(&_PermissionlessPool.CallOpts) +} + +// DEPOSITNODEBOND is a free data retrieval call binding the contract method 0x24f69706. +// +// Solidity: function DEPOSIT_NODE_BOND() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolCaller) DEPOSITNODEBOND(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "DEPOSIT_NODE_BOND") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// DEPOSITNODEBOND is a free data retrieval call binding the contract method 0x24f69706. +// +// Solidity: function DEPOSIT_NODE_BOND() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolSession) DEPOSITNODEBOND() (*big.Int, error) { + return _PermissionlessPool.Contract.DEPOSITNODEBOND(&_PermissionlessPool.CallOpts) +} + +// DEPOSITNODEBOND is a free data retrieval call binding the contract method 0x24f69706. +// +// Solidity: function DEPOSIT_NODE_BOND() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolCallerSession) DEPOSITNODEBOND() (*big.Int, error) { + return _PermissionlessPool.Contract.DEPOSITNODEBOND(&_PermissionlessPool.CallOpts) +} + +// MAXCOMMISSIONLIMITBIPS is a free data retrieval call binding the contract method 0x9cd6dd56. +// +// Solidity: function MAX_COMMISSION_LIMIT_BIPS() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolCaller) MAXCOMMISSIONLIMITBIPS(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "MAX_COMMISSION_LIMIT_BIPS") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MAXCOMMISSIONLIMITBIPS is a free data retrieval call binding the contract method 0x9cd6dd56. +// +// Solidity: function MAX_COMMISSION_LIMIT_BIPS() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolSession) MAXCOMMISSIONLIMITBIPS() (*big.Int, error) { + return _PermissionlessPool.Contract.MAXCOMMISSIONLIMITBIPS(&_PermissionlessPool.CallOpts) +} + +// MAXCOMMISSIONLIMITBIPS is a free data retrieval call binding the contract method 0x9cd6dd56. +// +// Solidity: function MAX_COMMISSION_LIMIT_BIPS() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolCallerSession) MAXCOMMISSIONLIMITBIPS() (*big.Int, error) { + return _PermissionlessPool.Contract.MAXCOMMISSIONLIMITBIPS(&_PermissionlessPool.CallOpts) +} + +// ComputeDepositDataRoot is a free data retrieval call binding the contract method 0x5c164e53. +// +// Solidity: function computeDepositDataRoot(bytes _pubkey, bytes _signature, bytes _withdrawCredential, uint256 _depositAmount) pure returns(bytes32) +func (_PermissionlessPool *PermissionlessPoolCaller) ComputeDepositDataRoot(opts *bind.CallOpts, _pubkey []byte, _signature []byte, _withdrawCredential []byte, _depositAmount *big.Int) ([32]byte, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "computeDepositDataRoot", _pubkey, _signature, _withdrawCredential, _depositAmount) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ComputeDepositDataRoot is a free data retrieval call binding the contract method 0x5c164e53. +// +// Solidity: function computeDepositDataRoot(bytes _pubkey, bytes _signature, bytes _withdrawCredential, uint256 _depositAmount) pure returns(bytes32) +func (_PermissionlessPool *PermissionlessPoolSession) ComputeDepositDataRoot(_pubkey []byte, _signature []byte, _withdrawCredential []byte, _depositAmount *big.Int) ([32]byte, error) { + return _PermissionlessPool.Contract.ComputeDepositDataRoot(&_PermissionlessPool.CallOpts, _pubkey, _signature, _withdrawCredential, _depositAmount) +} + +// ComputeDepositDataRoot is a free data retrieval call binding the contract method 0x5c164e53. +// +// Solidity: function computeDepositDataRoot(bytes _pubkey, bytes _signature, bytes _withdrawCredential, uint256 _depositAmount) pure returns(bytes32) +func (_PermissionlessPool *PermissionlessPoolCallerSession) ComputeDepositDataRoot(_pubkey []byte, _signature []byte, _withdrawCredential []byte, _depositAmount *big.Int) ([32]byte, error) { + return _PermissionlessPool.Contract.ComputeDepositDataRoot(&_PermissionlessPool.CallOpts, _pubkey, _signature, _withdrawCredential, _depositAmount) +} + +// GetCollateralETH is a free data retrieval call binding the contract method 0xb01db078. +// +// Solidity: function getCollateralETH() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolCaller) GetCollateralETH(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "getCollateralETH") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetCollateralETH is a free data retrieval call binding the contract method 0xb01db078. +// +// Solidity: function getCollateralETH() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolSession) GetCollateralETH() (*big.Int, error) { + return _PermissionlessPool.Contract.GetCollateralETH(&_PermissionlessPool.CallOpts) +} + +// GetCollateralETH is a free data retrieval call binding the contract method 0xb01db078. +// +// Solidity: function getCollateralETH() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolCallerSession) GetCollateralETH() (*big.Int, error) { + return _PermissionlessPool.Contract.GetCollateralETH(&_PermissionlessPool.CallOpts) +} + +// GetNodeRegistry is a free data retrieval call binding the contract method 0xb6fb3fac. +// +// Solidity: function getNodeRegistry() view returns(address) +func (_PermissionlessPool *PermissionlessPoolCaller) GetNodeRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "getNodeRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetNodeRegistry is a free data retrieval call binding the contract method 0xb6fb3fac. +// +// Solidity: function getNodeRegistry() view returns(address) +func (_PermissionlessPool *PermissionlessPoolSession) GetNodeRegistry() (common.Address, error) { + return _PermissionlessPool.Contract.GetNodeRegistry(&_PermissionlessPool.CallOpts) +} + +// GetNodeRegistry is a free data retrieval call binding the contract method 0xb6fb3fac. +// +// Solidity: function getNodeRegistry() view returns(address) +func (_PermissionlessPool *PermissionlessPoolCallerSession) GetNodeRegistry() (common.Address, error) { + return _PermissionlessPool.Contract.GetNodeRegistry(&_PermissionlessPool.CallOpts) +} + +// GetOperatorTotalNonTerminalKeys is a free data retrieval call binding the contract method 0x8a25bcec. +// +// Solidity: function getOperatorTotalNonTerminalKeys(address _nodeOperator, uint256 _startIndex, uint256 _endIndex) view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolCaller) GetOperatorTotalNonTerminalKeys(opts *bind.CallOpts, _nodeOperator common.Address, _startIndex *big.Int, _endIndex *big.Int) (*big.Int, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "getOperatorTotalNonTerminalKeys", _nodeOperator, _startIndex, _endIndex) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetOperatorTotalNonTerminalKeys is a free data retrieval call binding the contract method 0x8a25bcec. +// +// Solidity: function getOperatorTotalNonTerminalKeys(address _nodeOperator, uint256 _startIndex, uint256 _endIndex) view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolSession) GetOperatorTotalNonTerminalKeys(_nodeOperator common.Address, _startIndex *big.Int, _endIndex *big.Int) (*big.Int, error) { + return _PermissionlessPool.Contract.GetOperatorTotalNonTerminalKeys(&_PermissionlessPool.CallOpts, _nodeOperator, _startIndex, _endIndex) +} + +// GetOperatorTotalNonTerminalKeys is a free data retrieval call binding the contract method 0x8a25bcec. +// +// Solidity: function getOperatorTotalNonTerminalKeys(address _nodeOperator, uint256 _startIndex, uint256 _endIndex) view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolCallerSession) GetOperatorTotalNonTerminalKeys(_nodeOperator common.Address, _startIndex *big.Int, _endIndex *big.Int) (*big.Int, error) { + return _PermissionlessPool.Contract.GetOperatorTotalNonTerminalKeys(&_PermissionlessPool.CallOpts, _nodeOperator, _startIndex, _endIndex) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_PermissionlessPool *PermissionlessPoolCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_PermissionlessPool *PermissionlessPoolSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _PermissionlessPool.Contract.GetRoleAdmin(&_PermissionlessPool.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_PermissionlessPool *PermissionlessPoolCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _PermissionlessPool.Contract.GetRoleAdmin(&_PermissionlessPool.CallOpts, role) +} + +// GetSocializingPoolAddress is a free data retrieval call binding the contract method 0xf74b4cd1. +// +// Solidity: function getSocializingPoolAddress() view returns(address) +func (_PermissionlessPool *PermissionlessPoolCaller) GetSocializingPoolAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "getSocializingPoolAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetSocializingPoolAddress is a free data retrieval call binding the contract method 0xf74b4cd1. +// +// Solidity: function getSocializingPoolAddress() view returns(address) +func (_PermissionlessPool *PermissionlessPoolSession) GetSocializingPoolAddress() (common.Address, error) { + return _PermissionlessPool.Contract.GetSocializingPoolAddress(&_PermissionlessPool.CallOpts) +} + +// GetSocializingPoolAddress is a free data retrieval call binding the contract method 0xf74b4cd1. +// +// Solidity: function getSocializingPoolAddress() view returns(address) +func (_PermissionlessPool *PermissionlessPoolCallerSession) GetSocializingPoolAddress() (common.Address, error) { + return _PermissionlessPool.Contract.GetSocializingPoolAddress(&_PermissionlessPool.CallOpts) +} + +// GetTotalActiveValidatorCount is a free data retrieval call binding the contract method 0x77c359e1. +// +// Solidity: function getTotalActiveValidatorCount() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolCaller) GetTotalActiveValidatorCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "getTotalActiveValidatorCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetTotalActiveValidatorCount is a free data retrieval call binding the contract method 0x77c359e1. +// +// Solidity: function getTotalActiveValidatorCount() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolSession) GetTotalActiveValidatorCount() (*big.Int, error) { + return _PermissionlessPool.Contract.GetTotalActiveValidatorCount(&_PermissionlessPool.CallOpts) +} + +// GetTotalActiveValidatorCount is a free data retrieval call binding the contract method 0x77c359e1. +// +// Solidity: function getTotalActiveValidatorCount() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolCallerSession) GetTotalActiveValidatorCount() (*big.Int, error) { + return _PermissionlessPool.Contract.GetTotalActiveValidatorCount(&_PermissionlessPool.CallOpts) +} + +// GetTotalQueuedValidatorCount is a free data retrieval call binding the contract method 0x7bd977d9. +// +// Solidity: function getTotalQueuedValidatorCount() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolCaller) GetTotalQueuedValidatorCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "getTotalQueuedValidatorCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetTotalQueuedValidatorCount is a free data retrieval call binding the contract method 0x7bd977d9. +// +// Solidity: function getTotalQueuedValidatorCount() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolSession) GetTotalQueuedValidatorCount() (*big.Int, error) { + return _PermissionlessPool.Contract.GetTotalQueuedValidatorCount(&_PermissionlessPool.CallOpts) +} + +// GetTotalQueuedValidatorCount is a free data retrieval call binding the contract method 0x7bd977d9. +// +// Solidity: function getTotalQueuedValidatorCount() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolCallerSession) GetTotalQueuedValidatorCount() (*big.Int, error) { + return _PermissionlessPool.Contract.GetTotalQueuedValidatorCount(&_PermissionlessPool.CallOpts) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_PermissionlessPool *PermissionlessPoolCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_PermissionlessPool *PermissionlessPoolSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _PermissionlessPool.Contract.HasRole(&_PermissionlessPool.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_PermissionlessPool *PermissionlessPoolCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _PermissionlessPool.Contract.HasRole(&_PermissionlessPool.CallOpts, role, account) +} + +// IsExistingOperator is a free data retrieval call binding the contract method 0xf9c4dda4. +// +// Solidity: function isExistingOperator(address _operAddr) view returns(bool) +func (_PermissionlessPool *PermissionlessPoolCaller) IsExistingOperator(opts *bind.CallOpts, _operAddr common.Address) (bool, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "isExistingOperator", _operAddr) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsExistingOperator is a free data retrieval call binding the contract method 0xf9c4dda4. +// +// Solidity: function isExistingOperator(address _operAddr) view returns(bool) +func (_PermissionlessPool *PermissionlessPoolSession) IsExistingOperator(_operAddr common.Address) (bool, error) { + return _PermissionlessPool.Contract.IsExistingOperator(&_PermissionlessPool.CallOpts, _operAddr) +} + +// IsExistingOperator is a free data retrieval call binding the contract method 0xf9c4dda4. +// +// Solidity: function isExistingOperator(address _operAddr) view returns(bool) +func (_PermissionlessPool *PermissionlessPoolCallerSession) IsExistingOperator(_operAddr common.Address) (bool, error) { + return _PermissionlessPool.Contract.IsExistingOperator(&_PermissionlessPool.CallOpts, _operAddr) +} + +// IsExistingPubkey is a free data retrieval call binding the contract method 0x36514d9f. +// +// Solidity: function isExistingPubkey(bytes _pubkey) view returns(bool) +func (_PermissionlessPool *PermissionlessPoolCaller) IsExistingPubkey(opts *bind.CallOpts, _pubkey []byte) (bool, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "isExistingPubkey", _pubkey) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsExistingPubkey is a free data retrieval call binding the contract method 0x36514d9f. +// +// Solidity: function isExistingPubkey(bytes _pubkey) view returns(bool) +func (_PermissionlessPool *PermissionlessPoolSession) IsExistingPubkey(_pubkey []byte) (bool, error) { + return _PermissionlessPool.Contract.IsExistingPubkey(&_PermissionlessPool.CallOpts, _pubkey) +} + +// IsExistingPubkey is a free data retrieval call binding the contract method 0x36514d9f. +// +// Solidity: function isExistingPubkey(bytes _pubkey) view returns(bool) +func (_PermissionlessPool *PermissionlessPoolCallerSession) IsExistingPubkey(_pubkey []byte) (bool, error) { + return _PermissionlessPool.Contract.IsExistingPubkey(&_PermissionlessPool.CallOpts, _pubkey) +} + +// OperatorFee is a free data retrieval call binding the contract method 0x89afc0f1. +// +// Solidity: function operatorFee() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolCaller) OperatorFee(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "operatorFee") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// OperatorFee is a free data retrieval call binding the contract method 0x89afc0f1. +// +// Solidity: function operatorFee() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolSession) OperatorFee() (*big.Int, error) { + return _PermissionlessPool.Contract.OperatorFee(&_PermissionlessPool.CallOpts) +} + +// OperatorFee is a free data retrieval call binding the contract method 0x89afc0f1. +// +// Solidity: function operatorFee() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolCallerSession) OperatorFee() (*big.Int, error) { + return _PermissionlessPool.Contract.OperatorFee(&_PermissionlessPool.CallOpts) +} + +// ProtocolFee is a free data retrieval call binding the contract method 0xb0e21e8a. +// +// Solidity: function protocolFee() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolCaller) ProtocolFee(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "protocolFee") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ProtocolFee is a free data retrieval call binding the contract method 0xb0e21e8a. +// +// Solidity: function protocolFee() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolSession) ProtocolFee() (*big.Int, error) { + return _PermissionlessPool.Contract.ProtocolFee(&_PermissionlessPool.CallOpts) +} + +// ProtocolFee is a free data retrieval call binding the contract method 0xb0e21e8a. +// +// Solidity: function protocolFee() view returns(uint256) +func (_PermissionlessPool *PermissionlessPoolCallerSession) ProtocolFee() (*big.Int, error) { + return _PermissionlessPool.Contract.ProtocolFee(&_PermissionlessPool.CallOpts) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_PermissionlessPool *PermissionlessPoolCaller) StaderConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _PermissionlessPool.contract.Call(opts, &out, "staderConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_PermissionlessPool *PermissionlessPoolSession) StaderConfig() (common.Address, error) { + return _PermissionlessPool.Contract.StaderConfig(&_PermissionlessPool.CallOpts) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_PermissionlessPool *PermissionlessPoolCallerSession) StaderConfig() (common.Address, error) { + return _PermissionlessPool.Contract.StaderConfig(&_PermissionlessPool.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_PermissionlessPool *PermissionlessPoolCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _PermissionlessPool.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 (_PermissionlessPool *PermissionlessPoolSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _PermissionlessPool.Contract.SupportsInterface(&_PermissionlessPool.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_PermissionlessPool *PermissionlessPoolCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _PermissionlessPool.Contract.SupportsInterface(&_PermissionlessPool.CallOpts, interfaceId) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_PermissionlessPool *PermissionlessPoolTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessPool.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_PermissionlessPool *PermissionlessPoolSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessPool.Contract.GrantRole(&_PermissionlessPool.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_PermissionlessPool *PermissionlessPoolTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessPool.Contract.GrantRole(&_PermissionlessPool.TransactOpts, role, account) +} + +// PreDepositOnBeaconChain is a paid mutator transaction binding the contract method 0xeda0ae12. +// +// Solidity: function preDepositOnBeaconChain(bytes[] _pubkey, bytes[] _preDepositSignature, uint256 _operatorId, uint256 _operatorTotalKeys) payable returns() +func (_PermissionlessPool *PermissionlessPoolTransactor) PreDepositOnBeaconChain(opts *bind.TransactOpts, _pubkey [][]byte, _preDepositSignature [][]byte, _operatorId *big.Int, _operatorTotalKeys *big.Int) (*types.Transaction, error) { + return _PermissionlessPool.contract.Transact(opts, "preDepositOnBeaconChain", _pubkey, _preDepositSignature, _operatorId, _operatorTotalKeys) +} + +// PreDepositOnBeaconChain is a paid mutator transaction binding the contract method 0xeda0ae12. +// +// Solidity: function preDepositOnBeaconChain(bytes[] _pubkey, bytes[] _preDepositSignature, uint256 _operatorId, uint256 _operatorTotalKeys) payable returns() +func (_PermissionlessPool *PermissionlessPoolSession) PreDepositOnBeaconChain(_pubkey [][]byte, _preDepositSignature [][]byte, _operatorId *big.Int, _operatorTotalKeys *big.Int) (*types.Transaction, error) { + return _PermissionlessPool.Contract.PreDepositOnBeaconChain(&_PermissionlessPool.TransactOpts, _pubkey, _preDepositSignature, _operatorId, _operatorTotalKeys) +} + +// PreDepositOnBeaconChain is a paid mutator transaction binding the contract method 0xeda0ae12. +// +// Solidity: function preDepositOnBeaconChain(bytes[] _pubkey, bytes[] _preDepositSignature, uint256 _operatorId, uint256 _operatorTotalKeys) payable returns() +func (_PermissionlessPool *PermissionlessPoolTransactorSession) PreDepositOnBeaconChain(_pubkey [][]byte, _preDepositSignature [][]byte, _operatorId *big.Int, _operatorTotalKeys *big.Int) (*types.Transaction, error) { + return _PermissionlessPool.Contract.PreDepositOnBeaconChain(&_PermissionlessPool.TransactOpts, _pubkey, _preDepositSignature, _operatorId, _operatorTotalKeys) +} + +// ReceiveRemainingCollateralETH is a paid mutator transaction binding the contract method 0x1f033ef0. +// +// Solidity: function receiveRemainingCollateralETH() payable returns() +func (_PermissionlessPool *PermissionlessPoolTransactor) ReceiveRemainingCollateralETH(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PermissionlessPool.contract.Transact(opts, "receiveRemainingCollateralETH") +} + +// ReceiveRemainingCollateralETH is a paid mutator transaction binding the contract method 0x1f033ef0. +// +// Solidity: function receiveRemainingCollateralETH() payable returns() +func (_PermissionlessPool *PermissionlessPoolSession) ReceiveRemainingCollateralETH() (*types.Transaction, error) { + return _PermissionlessPool.Contract.ReceiveRemainingCollateralETH(&_PermissionlessPool.TransactOpts) +} + +// ReceiveRemainingCollateralETH is a paid mutator transaction binding the contract method 0x1f033ef0. +// +// Solidity: function receiveRemainingCollateralETH() payable returns() +func (_PermissionlessPool *PermissionlessPoolTransactorSession) ReceiveRemainingCollateralETH() (*types.Transaction, error) { + return _PermissionlessPool.Contract.ReceiveRemainingCollateralETH(&_PermissionlessPool.TransactOpts) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_PermissionlessPool *PermissionlessPoolTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessPool.contract.Transact(opts, "renounceRole", role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_PermissionlessPool *PermissionlessPoolSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessPool.Contract.RenounceRole(&_PermissionlessPool.TransactOpts, role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_PermissionlessPool *PermissionlessPoolTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessPool.Contract.RenounceRole(&_PermissionlessPool.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_PermissionlessPool *PermissionlessPoolTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessPool.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_PermissionlessPool *PermissionlessPoolSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessPool.Contract.RevokeRole(&_PermissionlessPool.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_PermissionlessPool *PermissionlessPoolTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PermissionlessPool.Contract.RevokeRole(&_PermissionlessPool.TransactOpts, role, account) +} + +// SetCommissionFees is a paid mutator transaction binding the contract method 0x21066d18. +// +// Solidity: function setCommissionFees(uint256 _protocolFee, uint256 _operatorFee) returns() +func (_PermissionlessPool *PermissionlessPoolTransactor) SetCommissionFees(opts *bind.TransactOpts, _protocolFee *big.Int, _operatorFee *big.Int) (*types.Transaction, error) { + return _PermissionlessPool.contract.Transact(opts, "setCommissionFees", _protocolFee, _operatorFee) +} + +// SetCommissionFees is a paid mutator transaction binding the contract method 0x21066d18. +// +// Solidity: function setCommissionFees(uint256 _protocolFee, uint256 _operatorFee) returns() +func (_PermissionlessPool *PermissionlessPoolSession) SetCommissionFees(_protocolFee *big.Int, _operatorFee *big.Int) (*types.Transaction, error) { + return _PermissionlessPool.Contract.SetCommissionFees(&_PermissionlessPool.TransactOpts, _protocolFee, _operatorFee) +} + +// SetCommissionFees is a paid mutator transaction binding the contract method 0x21066d18. +// +// Solidity: function setCommissionFees(uint256 _protocolFee, uint256 _operatorFee) returns() +func (_PermissionlessPool *PermissionlessPoolTransactorSession) SetCommissionFees(_protocolFee *big.Int, _operatorFee *big.Int) (*types.Transaction, error) { + return _PermissionlessPool.Contract.SetCommissionFees(&_PermissionlessPool.TransactOpts, _protocolFee, _operatorFee) +} + +// StakeUserETHToBeaconChain is a paid mutator transaction binding the contract method 0x9b26728e. +// +// Solidity: function stakeUserETHToBeaconChain() payable returns() +func (_PermissionlessPool *PermissionlessPoolTransactor) StakeUserETHToBeaconChain(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PermissionlessPool.contract.Transact(opts, "stakeUserETHToBeaconChain") +} + +// StakeUserETHToBeaconChain is a paid mutator transaction binding the contract method 0x9b26728e. +// +// Solidity: function stakeUserETHToBeaconChain() payable returns() +func (_PermissionlessPool *PermissionlessPoolSession) StakeUserETHToBeaconChain() (*types.Transaction, error) { + return _PermissionlessPool.Contract.StakeUserETHToBeaconChain(&_PermissionlessPool.TransactOpts) +} + +// StakeUserETHToBeaconChain is a paid mutator transaction binding the contract method 0x9b26728e. +// +// Solidity: function stakeUserETHToBeaconChain() payable returns() +func (_PermissionlessPool *PermissionlessPoolTransactorSession) StakeUserETHToBeaconChain() (*types.Transaction, error) { + return _PermissionlessPool.Contract.StakeUserETHToBeaconChain(&_PermissionlessPool.TransactOpts) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_PermissionlessPool *PermissionlessPoolTransactor) UpdateStaderConfig(opts *bind.TransactOpts, _staderConfig common.Address) (*types.Transaction, error) { + return _PermissionlessPool.contract.Transact(opts, "updateStaderConfig", _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_PermissionlessPool *PermissionlessPoolSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _PermissionlessPool.Contract.UpdateStaderConfig(&_PermissionlessPool.TransactOpts, _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_PermissionlessPool *PermissionlessPoolTransactorSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _PermissionlessPool.Contract.UpdateStaderConfig(&_PermissionlessPool.TransactOpts, _staderConfig) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_PermissionlessPool *PermissionlessPoolTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _PermissionlessPool.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_PermissionlessPool *PermissionlessPoolSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _PermissionlessPool.Contract.Fallback(&_PermissionlessPool.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_PermissionlessPool *PermissionlessPoolTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _PermissionlessPool.Contract.Fallback(&_PermissionlessPool.TransactOpts, calldata) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_PermissionlessPool *PermissionlessPoolTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PermissionlessPool.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 (_PermissionlessPool *PermissionlessPoolSession) Receive() (*types.Transaction, error) { + return _PermissionlessPool.Contract.Receive(&_PermissionlessPool.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_PermissionlessPool *PermissionlessPoolTransactorSession) Receive() (*types.Transaction, error) { + return _PermissionlessPool.Contract.Receive(&_PermissionlessPool.TransactOpts) +} + +// PermissionlessPoolInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the PermissionlessPool contract. +type PermissionlessPoolInitializedIterator struct { + Event *PermissionlessPoolInitialized // 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 *PermissionlessPoolInitializedIterator) 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(PermissionlessPoolInitialized) + if err := 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(PermissionlessPoolInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessPoolInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessPoolInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessPoolInitialized represents a Initialized event raised by the PermissionlessPool contract. +type PermissionlessPoolInitialized 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 (_PermissionlessPool *PermissionlessPoolFilterer) FilterInitialized(opts *bind.FilterOpts) (*PermissionlessPoolInitializedIterator, error) { + + logs, sub, err := _PermissionlessPool.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &PermissionlessPoolInitializedIterator{contract: _PermissionlessPool.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 (_PermissionlessPool *PermissionlessPoolFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *PermissionlessPoolInitialized) (event.Subscription, error) { + + logs, sub, err := _PermissionlessPool.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(PermissionlessPoolInitialized) + if err := _PermissionlessPool.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 (_PermissionlessPool *PermissionlessPoolFilterer) ParseInitialized(log types.Log) (*PermissionlessPoolInitialized, error) { + event := new(PermissionlessPoolInitialized) + if err := _PermissionlessPool.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessPoolReceivedCollateralETHIterator is returned from FilterReceivedCollateralETH and is used to iterate over the raw logs and unpacked data for ReceivedCollateralETH events raised by the PermissionlessPool contract. +type PermissionlessPoolReceivedCollateralETHIterator struct { + Event *PermissionlessPoolReceivedCollateralETH // 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 *PermissionlessPoolReceivedCollateralETHIterator) 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(PermissionlessPoolReceivedCollateralETH) + if err := 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(PermissionlessPoolReceivedCollateralETH) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessPoolReceivedCollateralETHIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessPoolReceivedCollateralETHIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessPoolReceivedCollateralETH represents a ReceivedCollateralETH event raised by the PermissionlessPool contract. +type PermissionlessPoolReceivedCollateralETH struct { + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterReceivedCollateralETH is a free log retrieval operation binding the contract event 0x3726a70cbf9252aacb06774b2f9f7108d837fc60afd7143f86eec77d7e3da94b. +// +// Solidity: event ReceivedCollateralETH(uint256 amount) +func (_PermissionlessPool *PermissionlessPoolFilterer) FilterReceivedCollateralETH(opts *bind.FilterOpts) (*PermissionlessPoolReceivedCollateralETHIterator, error) { + + logs, sub, err := _PermissionlessPool.contract.FilterLogs(opts, "ReceivedCollateralETH") + if err != nil { + return nil, err + } + return &PermissionlessPoolReceivedCollateralETHIterator{contract: _PermissionlessPool.contract, event: "ReceivedCollateralETH", logs: logs, sub: sub}, nil +} + +// WatchReceivedCollateralETH is a free log subscription operation binding the contract event 0x3726a70cbf9252aacb06774b2f9f7108d837fc60afd7143f86eec77d7e3da94b. +// +// Solidity: event ReceivedCollateralETH(uint256 amount) +func (_PermissionlessPool *PermissionlessPoolFilterer) WatchReceivedCollateralETH(opts *bind.WatchOpts, sink chan<- *PermissionlessPoolReceivedCollateralETH) (event.Subscription, error) { + + logs, sub, err := _PermissionlessPool.contract.WatchLogs(opts, "ReceivedCollateralETH") + 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(PermissionlessPoolReceivedCollateralETH) + if err := _PermissionlessPool.contract.UnpackLog(event, "ReceivedCollateralETH", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseReceivedCollateralETH is a log parse operation binding the contract event 0x3726a70cbf9252aacb06774b2f9f7108d837fc60afd7143f86eec77d7e3da94b. +// +// Solidity: event ReceivedCollateralETH(uint256 amount) +func (_PermissionlessPool *PermissionlessPoolFilterer) ParseReceivedCollateralETH(log types.Log) (*PermissionlessPoolReceivedCollateralETH, error) { + event := new(PermissionlessPoolReceivedCollateralETH) + if err := _PermissionlessPool.contract.UnpackLog(event, "ReceivedCollateralETH", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessPoolReceivedInsuranceFundIterator is returned from FilterReceivedInsuranceFund and is used to iterate over the raw logs and unpacked data for ReceivedInsuranceFund events raised by the PermissionlessPool contract. +type PermissionlessPoolReceivedInsuranceFundIterator struct { + Event *PermissionlessPoolReceivedInsuranceFund // 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 *PermissionlessPoolReceivedInsuranceFundIterator) 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(PermissionlessPoolReceivedInsuranceFund) + if err := 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(PermissionlessPoolReceivedInsuranceFund) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessPoolReceivedInsuranceFundIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessPoolReceivedInsuranceFundIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessPoolReceivedInsuranceFund represents a ReceivedInsuranceFund event raised by the PermissionlessPool contract. +type PermissionlessPoolReceivedInsuranceFund struct { + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterReceivedInsuranceFund is a free log retrieval operation binding the contract event 0xf43316e35306192a57665c134c0731f8e965fd6b625c620983cc68c2dd183726. +// +// Solidity: event ReceivedInsuranceFund(uint256 amount) +func (_PermissionlessPool *PermissionlessPoolFilterer) FilterReceivedInsuranceFund(opts *bind.FilterOpts) (*PermissionlessPoolReceivedInsuranceFundIterator, error) { + + logs, sub, err := _PermissionlessPool.contract.FilterLogs(opts, "ReceivedInsuranceFund") + if err != nil { + return nil, err + } + return &PermissionlessPoolReceivedInsuranceFundIterator{contract: _PermissionlessPool.contract, event: "ReceivedInsuranceFund", logs: logs, sub: sub}, nil +} + +// WatchReceivedInsuranceFund is a free log subscription operation binding the contract event 0xf43316e35306192a57665c134c0731f8e965fd6b625c620983cc68c2dd183726. +// +// Solidity: event ReceivedInsuranceFund(uint256 amount) +func (_PermissionlessPool *PermissionlessPoolFilterer) WatchReceivedInsuranceFund(opts *bind.WatchOpts, sink chan<- *PermissionlessPoolReceivedInsuranceFund) (event.Subscription, error) { + + logs, sub, err := _PermissionlessPool.contract.WatchLogs(opts, "ReceivedInsuranceFund") + 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(PermissionlessPoolReceivedInsuranceFund) + if err := _PermissionlessPool.contract.UnpackLog(event, "ReceivedInsuranceFund", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseReceivedInsuranceFund is a log parse operation binding the contract event 0xf43316e35306192a57665c134c0731f8e965fd6b625c620983cc68c2dd183726. +// +// Solidity: event ReceivedInsuranceFund(uint256 amount) +func (_PermissionlessPool *PermissionlessPoolFilterer) ParseReceivedInsuranceFund(log types.Log) (*PermissionlessPoolReceivedInsuranceFund, error) { + event := new(PermissionlessPoolReceivedInsuranceFund) + if err := _PermissionlessPool.contract.UnpackLog(event, "ReceivedInsuranceFund", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessPoolRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the PermissionlessPool contract. +type PermissionlessPoolRoleAdminChangedIterator struct { + Event *PermissionlessPoolRoleAdminChanged // 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 *PermissionlessPoolRoleAdminChangedIterator) 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(PermissionlessPoolRoleAdminChanged) + if err := 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(PermissionlessPoolRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessPoolRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessPoolRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessPoolRoleAdminChanged represents a RoleAdminChanged event raised by the PermissionlessPool contract. +type PermissionlessPoolRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_PermissionlessPool *PermissionlessPoolFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*PermissionlessPoolRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _PermissionlessPool.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &PermissionlessPoolRoleAdminChangedIterator{contract: _PermissionlessPool.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_PermissionlessPool *PermissionlessPoolFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *PermissionlessPoolRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _PermissionlessPool.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(PermissionlessPoolRoleAdminChanged) + if err := _PermissionlessPool.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_PermissionlessPool *PermissionlessPoolFilterer) ParseRoleAdminChanged(log types.Log) (*PermissionlessPoolRoleAdminChanged, error) { + event := new(PermissionlessPoolRoleAdminChanged) + if err := _PermissionlessPool.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessPoolRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the PermissionlessPool contract. +type PermissionlessPoolRoleGrantedIterator struct { + Event *PermissionlessPoolRoleGranted // 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 *PermissionlessPoolRoleGrantedIterator) 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(PermissionlessPoolRoleGranted) + if err := 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(PermissionlessPoolRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessPoolRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessPoolRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessPoolRoleGranted represents a RoleGranted event raised by the PermissionlessPool contract. +type PermissionlessPoolRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_PermissionlessPool *PermissionlessPoolFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*PermissionlessPoolRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _PermissionlessPool.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &PermissionlessPoolRoleGrantedIterator{contract: _PermissionlessPool.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_PermissionlessPool *PermissionlessPoolFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *PermissionlessPoolRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _PermissionlessPool.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, 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(PermissionlessPoolRoleGranted) + if err := _PermissionlessPool.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_PermissionlessPool *PermissionlessPoolFilterer) ParseRoleGranted(log types.Log) (*PermissionlessPoolRoleGranted, error) { + event := new(PermissionlessPoolRoleGranted) + if err := _PermissionlessPool.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessPoolRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the PermissionlessPool contract. +type PermissionlessPoolRoleRevokedIterator struct { + Event *PermissionlessPoolRoleRevoked // 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 *PermissionlessPoolRoleRevokedIterator) 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(PermissionlessPoolRoleRevoked) + if err := 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(PermissionlessPoolRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessPoolRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessPoolRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessPoolRoleRevoked represents a RoleRevoked event raised by the PermissionlessPool contract. +type PermissionlessPoolRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_PermissionlessPool *PermissionlessPoolFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*PermissionlessPoolRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _PermissionlessPool.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &PermissionlessPoolRoleRevokedIterator{contract: _PermissionlessPool.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_PermissionlessPool *PermissionlessPoolFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *PermissionlessPoolRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _PermissionlessPool.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, 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(PermissionlessPoolRoleRevoked) + if err := _PermissionlessPool.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_PermissionlessPool *PermissionlessPoolFilterer) ParseRoleRevoked(log types.Log) (*PermissionlessPoolRoleRevoked, error) { + event := new(PermissionlessPoolRoleRevoked) + if err := _PermissionlessPool.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessPoolTransferredETHToSSPMForDefectiveKeysIterator is returned from FilterTransferredETHToSSPMForDefectiveKeys and is used to iterate over the raw logs and unpacked data for TransferredETHToSSPMForDefectiveKeys events raised by the PermissionlessPool contract. +type PermissionlessPoolTransferredETHToSSPMForDefectiveKeysIterator struct { + Event *PermissionlessPoolTransferredETHToSSPMForDefectiveKeys // 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 *PermissionlessPoolTransferredETHToSSPMForDefectiveKeysIterator) 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(PermissionlessPoolTransferredETHToSSPMForDefectiveKeys) + if err := 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(PermissionlessPoolTransferredETHToSSPMForDefectiveKeys) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessPoolTransferredETHToSSPMForDefectiveKeysIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessPoolTransferredETHToSSPMForDefectiveKeysIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessPoolTransferredETHToSSPMForDefectiveKeys represents a TransferredETHToSSPMForDefectiveKeys event raised by the PermissionlessPool contract. +type PermissionlessPoolTransferredETHToSSPMForDefectiveKeys struct { + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransferredETHToSSPMForDefectiveKeys is a free log retrieval operation binding the contract event 0x1149ac7366ffa1a2dee383a534b6742d013df82e7c15fd5720fd1ce82592a36f. +// +// Solidity: event TransferredETHToSSPMForDefectiveKeys(uint256 amount) +func (_PermissionlessPool *PermissionlessPoolFilterer) FilterTransferredETHToSSPMForDefectiveKeys(opts *bind.FilterOpts) (*PermissionlessPoolTransferredETHToSSPMForDefectiveKeysIterator, error) { + + logs, sub, err := _PermissionlessPool.contract.FilterLogs(opts, "TransferredETHToSSPMForDefectiveKeys") + if err != nil { + return nil, err + } + return &PermissionlessPoolTransferredETHToSSPMForDefectiveKeysIterator{contract: _PermissionlessPool.contract, event: "TransferredETHToSSPMForDefectiveKeys", logs: logs, sub: sub}, nil +} + +// WatchTransferredETHToSSPMForDefectiveKeys is a free log subscription operation binding the contract event 0x1149ac7366ffa1a2dee383a534b6742d013df82e7c15fd5720fd1ce82592a36f. +// +// Solidity: event TransferredETHToSSPMForDefectiveKeys(uint256 amount) +func (_PermissionlessPool *PermissionlessPoolFilterer) WatchTransferredETHToSSPMForDefectiveKeys(opts *bind.WatchOpts, sink chan<- *PermissionlessPoolTransferredETHToSSPMForDefectiveKeys) (event.Subscription, error) { + + logs, sub, err := _PermissionlessPool.contract.WatchLogs(opts, "TransferredETHToSSPMForDefectiveKeys") + 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(PermissionlessPoolTransferredETHToSSPMForDefectiveKeys) + if err := _PermissionlessPool.contract.UnpackLog(event, "TransferredETHToSSPMForDefectiveKeys", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTransferredETHToSSPMForDefectiveKeys is a log parse operation binding the contract event 0x1149ac7366ffa1a2dee383a534b6742d013df82e7c15fd5720fd1ce82592a36f. +// +// Solidity: event TransferredETHToSSPMForDefectiveKeys(uint256 amount) +func (_PermissionlessPool *PermissionlessPoolFilterer) ParseTransferredETHToSSPMForDefectiveKeys(log types.Log) (*PermissionlessPoolTransferredETHToSSPMForDefectiveKeys, error) { + event := new(PermissionlessPoolTransferredETHToSSPMForDefectiveKeys) + if err := _PermissionlessPool.contract.UnpackLog(event, "TransferredETHToSSPMForDefectiveKeys", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessPoolUpdatedCommissionFeesIterator is returned from FilterUpdatedCommissionFees and is used to iterate over the raw logs and unpacked data for UpdatedCommissionFees events raised by the PermissionlessPool contract. +type PermissionlessPoolUpdatedCommissionFeesIterator struct { + Event *PermissionlessPoolUpdatedCommissionFees // 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 *PermissionlessPoolUpdatedCommissionFeesIterator) 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(PermissionlessPoolUpdatedCommissionFees) + if err := 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(PermissionlessPoolUpdatedCommissionFees) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessPoolUpdatedCommissionFeesIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessPoolUpdatedCommissionFeesIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessPoolUpdatedCommissionFees represents a UpdatedCommissionFees event raised by the PermissionlessPool contract. +type PermissionlessPoolUpdatedCommissionFees struct { + ProtocolFee *big.Int + OperatorFee *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedCommissionFees is a free log retrieval operation binding the contract event 0xe8525a7862504bbe091b0440fe96979769664cae1625591ff0a9816512a5287b. +// +// Solidity: event UpdatedCommissionFees(uint256 protocolFee, uint256 operatorFee) +func (_PermissionlessPool *PermissionlessPoolFilterer) FilterUpdatedCommissionFees(opts *bind.FilterOpts) (*PermissionlessPoolUpdatedCommissionFeesIterator, error) { + + logs, sub, err := _PermissionlessPool.contract.FilterLogs(opts, "UpdatedCommissionFees") + if err != nil { + return nil, err + } + return &PermissionlessPoolUpdatedCommissionFeesIterator{contract: _PermissionlessPool.contract, event: "UpdatedCommissionFees", logs: logs, sub: sub}, nil +} + +// WatchUpdatedCommissionFees is a free log subscription operation binding the contract event 0xe8525a7862504bbe091b0440fe96979769664cae1625591ff0a9816512a5287b. +// +// Solidity: event UpdatedCommissionFees(uint256 protocolFee, uint256 operatorFee) +func (_PermissionlessPool *PermissionlessPoolFilterer) WatchUpdatedCommissionFees(opts *bind.WatchOpts, sink chan<- *PermissionlessPoolUpdatedCommissionFees) (event.Subscription, error) { + + logs, sub, err := _PermissionlessPool.contract.WatchLogs(opts, "UpdatedCommissionFees") + 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(PermissionlessPoolUpdatedCommissionFees) + if err := _PermissionlessPool.contract.UnpackLog(event, "UpdatedCommissionFees", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedCommissionFees is a log parse operation binding the contract event 0xe8525a7862504bbe091b0440fe96979769664cae1625591ff0a9816512a5287b. +// +// Solidity: event UpdatedCommissionFees(uint256 protocolFee, uint256 operatorFee) +func (_PermissionlessPool *PermissionlessPoolFilterer) ParseUpdatedCommissionFees(log types.Log) (*PermissionlessPoolUpdatedCommissionFees, error) { + event := new(PermissionlessPoolUpdatedCommissionFees) + if err := _PermissionlessPool.contract.UnpackLog(event, "UpdatedCommissionFees", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessPoolUpdatedStaderConfigIterator is returned from FilterUpdatedStaderConfig and is used to iterate over the raw logs and unpacked data for UpdatedStaderConfig events raised by the PermissionlessPool contract. +type PermissionlessPoolUpdatedStaderConfigIterator struct { + Event *PermissionlessPoolUpdatedStaderConfig // 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 *PermissionlessPoolUpdatedStaderConfigIterator) 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(PermissionlessPoolUpdatedStaderConfig) + if err := 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(PermissionlessPoolUpdatedStaderConfig) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessPoolUpdatedStaderConfigIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessPoolUpdatedStaderConfigIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessPoolUpdatedStaderConfig represents a UpdatedStaderConfig event raised by the PermissionlessPool contract. +type PermissionlessPoolUpdatedStaderConfig struct { + StaderConfig common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedStaderConfig is a free log retrieval operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_PermissionlessPool *PermissionlessPoolFilterer) FilterUpdatedStaderConfig(opts *bind.FilterOpts) (*PermissionlessPoolUpdatedStaderConfigIterator, error) { + + logs, sub, err := _PermissionlessPool.contract.FilterLogs(opts, "UpdatedStaderConfig") + if err != nil { + return nil, err + } + return &PermissionlessPoolUpdatedStaderConfigIterator{contract: _PermissionlessPool.contract, event: "UpdatedStaderConfig", logs: logs, sub: sub}, nil +} + +// WatchUpdatedStaderConfig is a free log subscription operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_PermissionlessPool *PermissionlessPoolFilterer) WatchUpdatedStaderConfig(opts *bind.WatchOpts, sink chan<- *PermissionlessPoolUpdatedStaderConfig) (event.Subscription, error) { + + logs, sub, err := _PermissionlessPool.contract.WatchLogs(opts, "UpdatedStaderConfig") + 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(PermissionlessPoolUpdatedStaderConfig) + if err := _PermissionlessPool.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedStaderConfig is a log parse operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_PermissionlessPool *PermissionlessPoolFilterer) ParseUpdatedStaderConfig(log types.Log) (*PermissionlessPoolUpdatedStaderConfig, error) { + event := new(PermissionlessPoolUpdatedStaderConfig) + if err := _PermissionlessPool.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessPoolValidatorDepositedOnBeaconChainIterator is returned from FilterValidatorDepositedOnBeaconChain and is used to iterate over the raw logs and unpacked data for ValidatorDepositedOnBeaconChain events raised by the PermissionlessPool contract. +type PermissionlessPoolValidatorDepositedOnBeaconChainIterator struct { + Event *PermissionlessPoolValidatorDepositedOnBeaconChain // 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 *PermissionlessPoolValidatorDepositedOnBeaconChainIterator) 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(PermissionlessPoolValidatorDepositedOnBeaconChain) + if err := 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(PermissionlessPoolValidatorDepositedOnBeaconChain) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessPoolValidatorDepositedOnBeaconChainIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessPoolValidatorDepositedOnBeaconChainIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessPoolValidatorDepositedOnBeaconChain represents a ValidatorDepositedOnBeaconChain event raised by the PermissionlessPool contract. +type PermissionlessPoolValidatorDepositedOnBeaconChain struct { + ValidatorId *big.Int + PubKey []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorDepositedOnBeaconChain is a free log retrieval operation binding the contract event 0xbef89de94658b7ef396ba7f9316542858c893c9011602906b1a2ad18d0a99c35. +// +// Solidity: event ValidatorDepositedOnBeaconChain(uint256 indexed validatorId, bytes pubKey) +func (_PermissionlessPool *PermissionlessPoolFilterer) FilterValidatorDepositedOnBeaconChain(opts *bind.FilterOpts, validatorId []*big.Int) (*PermissionlessPoolValidatorDepositedOnBeaconChainIterator, error) { + + var validatorIdRule []interface{} + for _, validatorIdItem := range validatorId { + validatorIdRule = append(validatorIdRule, validatorIdItem) + } + + logs, sub, err := _PermissionlessPool.contract.FilterLogs(opts, "ValidatorDepositedOnBeaconChain", validatorIdRule) + if err != nil { + return nil, err + } + return &PermissionlessPoolValidatorDepositedOnBeaconChainIterator{contract: _PermissionlessPool.contract, event: "ValidatorDepositedOnBeaconChain", logs: logs, sub: sub}, nil +} + +// WatchValidatorDepositedOnBeaconChain is a free log subscription operation binding the contract event 0xbef89de94658b7ef396ba7f9316542858c893c9011602906b1a2ad18d0a99c35. +// +// Solidity: event ValidatorDepositedOnBeaconChain(uint256 indexed validatorId, bytes pubKey) +func (_PermissionlessPool *PermissionlessPoolFilterer) WatchValidatorDepositedOnBeaconChain(opts *bind.WatchOpts, sink chan<- *PermissionlessPoolValidatorDepositedOnBeaconChain, validatorId []*big.Int) (event.Subscription, error) { + + var validatorIdRule []interface{} + for _, validatorIdItem := range validatorId { + validatorIdRule = append(validatorIdRule, validatorIdItem) + } + + logs, sub, err := _PermissionlessPool.contract.WatchLogs(opts, "ValidatorDepositedOnBeaconChain", validatorIdRule) + 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(PermissionlessPoolValidatorDepositedOnBeaconChain) + if err := _PermissionlessPool.contract.UnpackLog(event, "ValidatorDepositedOnBeaconChain", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseValidatorDepositedOnBeaconChain is a log parse operation binding the contract event 0xbef89de94658b7ef396ba7f9316542858c893c9011602906b1a2ad18d0a99c35. +// +// Solidity: event ValidatorDepositedOnBeaconChain(uint256 indexed validatorId, bytes pubKey) +func (_PermissionlessPool *PermissionlessPoolFilterer) ParseValidatorDepositedOnBeaconChain(log types.Log) (*PermissionlessPoolValidatorDepositedOnBeaconChain, error) { + event := new(PermissionlessPoolValidatorDepositedOnBeaconChain) + if err := _PermissionlessPool.contract.UnpackLog(event, "ValidatorDepositedOnBeaconChain", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PermissionlessPoolValidatorPreDepositedOnBeaconChainIterator is returned from FilterValidatorPreDepositedOnBeaconChain and is used to iterate over the raw logs and unpacked data for ValidatorPreDepositedOnBeaconChain events raised by the PermissionlessPool contract. +type PermissionlessPoolValidatorPreDepositedOnBeaconChainIterator struct { + Event *PermissionlessPoolValidatorPreDepositedOnBeaconChain // 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 *PermissionlessPoolValidatorPreDepositedOnBeaconChainIterator) 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(PermissionlessPoolValidatorPreDepositedOnBeaconChain) + if err := 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(PermissionlessPoolValidatorPreDepositedOnBeaconChain) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PermissionlessPoolValidatorPreDepositedOnBeaconChainIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PermissionlessPoolValidatorPreDepositedOnBeaconChainIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PermissionlessPoolValidatorPreDepositedOnBeaconChain represents a ValidatorPreDepositedOnBeaconChain event raised by the PermissionlessPool contract. +type PermissionlessPoolValidatorPreDepositedOnBeaconChain struct { + PubKey []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorPreDepositedOnBeaconChain is a free log retrieval operation binding the contract event 0xa35366ad083efbaee7949ff15c68508b95e2c0441248e80d73da97ac82bc1f10. +// +// Solidity: event ValidatorPreDepositedOnBeaconChain(bytes pubKey) +func (_PermissionlessPool *PermissionlessPoolFilterer) FilterValidatorPreDepositedOnBeaconChain(opts *bind.FilterOpts) (*PermissionlessPoolValidatorPreDepositedOnBeaconChainIterator, error) { + + logs, sub, err := _PermissionlessPool.contract.FilterLogs(opts, "ValidatorPreDepositedOnBeaconChain") + if err != nil { + return nil, err + } + return &PermissionlessPoolValidatorPreDepositedOnBeaconChainIterator{contract: _PermissionlessPool.contract, event: "ValidatorPreDepositedOnBeaconChain", logs: logs, sub: sub}, nil +} + +// WatchValidatorPreDepositedOnBeaconChain is a free log subscription operation binding the contract event 0xa35366ad083efbaee7949ff15c68508b95e2c0441248e80d73da97ac82bc1f10. +// +// Solidity: event ValidatorPreDepositedOnBeaconChain(bytes pubKey) +func (_PermissionlessPool *PermissionlessPoolFilterer) WatchValidatorPreDepositedOnBeaconChain(opts *bind.WatchOpts, sink chan<- *PermissionlessPoolValidatorPreDepositedOnBeaconChain) (event.Subscription, error) { + + logs, sub, err := _PermissionlessPool.contract.WatchLogs(opts, "ValidatorPreDepositedOnBeaconChain") + 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(PermissionlessPoolValidatorPreDepositedOnBeaconChain) + if err := _PermissionlessPool.contract.UnpackLog(event, "ValidatorPreDepositedOnBeaconChain", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseValidatorPreDepositedOnBeaconChain is a log parse operation binding the contract event 0xa35366ad083efbaee7949ff15c68508b95e2c0441248e80d73da97ac82bc1f10. +// +// Solidity: event ValidatorPreDepositedOnBeaconChain(bytes pubKey) +func (_PermissionlessPool *PermissionlessPoolFilterer) ParseValidatorPreDepositedOnBeaconChain(log types.Log) (*PermissionlessPoolValidatorPreDepositedOnBeaconChain, error) { + event := new(PermissionlessPoolValidatorPreDepositedOnBeaconChain) + if err := _PermissionlessPool.contract.UnpackLog(event, "ValidatorPreDepositedOnBeaconChain", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/testing/contracts/StaderConfig.go b/testing/contracts/StaderConfig.go new file mode 100644 index 000000000..2a19ab8a8 --- /dev/null +++ b/testing/contracts/StaderConfig.go @@ -0,0 +1,5096 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contracts + +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 +) + +// StaderConfigMetaData contains all meta data concerning the StaderConfig contract. +var StaderConfigMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ethDepositContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidLimits\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMaxDepositValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMaxWithdrawValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMinDepositValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMinWithdrawValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SetConstant\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"SetVariable\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUCTION_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DECIMALS\",\"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\":\"ETHX_SUPPLY_POR_FEED\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_BALANCE_POR_FEED\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_DEPOSIT_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_PER_NODE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETHx\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FULL_DEPOSIT_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_DEPOSIT_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_WITHDRAW_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_DEPOSIT_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_WITHDRAW_AMOUNT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_EL_REWARD_VAULT_IMPLEMENTATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_MAX_NAME_LENGTH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_REWARD_COLLECTOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PENALTY_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_NODE_REGISTRY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONED_SOCIALIZING_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_NODE_REGISTRY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMISSIONLESS_SOCIALIZING_POOL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_SELECTOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_UTILS\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRE_DEPOSIT_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REWARD_THRESHOLD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SD_COLLATERAL\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOCIALIZING_POOL_CYCLE_DURATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_INSURANCE_FUND\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_ORACLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STADER_TREASURY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAKE_POOL_MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOTAL_FEE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"USER_WITHDRAW_MANAGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_FACTORY\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WITHDRAWN_KEYS_BATCH_SIZE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuctionContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDecimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHBalancePORFeedProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHDepositContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHXSupplyPORFeedProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getETHxToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFullDepositSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxDepositAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxWithdrawAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinBlockDelayToFinalizeWithdrawRequest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinDepositAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinWithdrawAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeELRewardVaultImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperatorMaxNameLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOperatorRewardsCollector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPenaltyContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionedSocializingPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermissionlessSocializingPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolSelector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolUtils\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPreDepositSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsThreshold\",\"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\":[],\"name\":\"getSDCollateral\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSocializingPoolCycleDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSocializingPoolOptInCoolingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderInsuranceFund\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaderTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakePoolManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakedEthPerNode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUserWithdrawManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidatorWithdrawalVaultImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawnKeyBatchSize\",\"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\":\"account\",\"type\":\"address\"}],\"name\":\"onlyManagerRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"onlyOperatorRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_contractName\",\"type\":\"bytes32\"}],\"name\":\"onlyStaderContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"updateAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_auctionContract\",\"type\":\"address\"}],\"name\":\"updateAuctionContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethBalanceProxy\",\"type\":\"address\"}],\"name\":\"updateETHBalancePORFeedProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethXSupplyProxy\",\"type\":\"address\"}],\"name\":\"updateETHXSupplyPORFeedProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_ethX\",\"type\":\"address\"}],\"name\":\"updateETHxToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDepositAmount\",\"type\":\"uint256\"}],\"name\":\"updateMaxDepositAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxWithdrawAmount\",\"type\":\"uint256\"}],\"name\":\"updateMaxWithdrawAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minBlockDelay\",\"type\":\"uint256\"}],\"name\":\"updateMinBlockDelayToFinalizeWithdrawRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minDepositAmount\",\"type\":\"uint256\"}],\"name\":\"updateMinDepositAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minWithdrawAmount\",\"type\":\"uint256\"}],\"name\":\"updateMinWithdrawAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeELRewardVaultImpl\",\"type\":\"address\"}],\"name\":\"updateNodeELRewardImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operatorRewardsCollector\",\"type\":\"address\"}],\"name\":\"updateOperatorRewardsCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_penaltyContract\",\"type\":\"address\"}],\"name\":\"updatePenaltyContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedNodeRegistry\",\"type\":\"address\"}],\"name\":\"updatePermissionedNodeRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedPool\",\"type\":\"address\"}],\"name\":\"updatePermissionedPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionedSocializePool\",\"type\":\"address\"}],\"name\":\"updatePermissionedSocializingPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessNodeRegistry\",\"type\":\"address\"}],\"name\":\"updatePermissionlessNodeRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessPool\",\"type\":\"address\"}],\"name\":\"updatePermissionlessPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_permissionlessSocializePool\",\"type\":\"address\"}],\"name\":\"updatePermissionlessSocializingPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolSelector\",\"type\":\"address\"}],\"name\":\"updatePoolSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_poolUtils\",\"type\":\"address\"}],\"name\":\"updatePoolUtils\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardsThreshold\",\"type\":\"uint256\"}],\"name\":\"updateRewardsThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sdCollateral\",\"type\":\"address\"}],\"name\":\"updateSDCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_socializingPoolCycleDuration\",\"type\":\"uint256\"}],\"name\":\"updateSocializingPoolCycleDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_SocializePoolOptInCoolingPeriod\",\"type\":\"uint256\"}],\"name\":\"updateSocializingPoolOptInCoolingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderInsuranceFund\",\"type\":\"address\"}],\"name\":\"updateStaderInsuranceFund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderOracle\",\"type\":\"address\"}],\"name\":\"updateStaderOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderToken\",\"type\":\"address\"}],\"name\":\"updateStaderToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderTreasury\",\"type\":\"address\"}],\"name\":\"updateStaderTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_stakePoolManager\",\"type\":\"address\"}],\"name\":\"updateStakePoolManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userWithdrawManager\",\"type\":\"address\"}],\"name\":\"updateUserWithdrawManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_validatorWithdrawalVaultImpl\",\"type\":\"address\"}],\"name\":\"updateValidatorWithdrawalVaultImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vaultFactory\",\"type\":\"address\"}],\"name\":\"updateVaultFactory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateWithdrawnKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b506040516200373e3803806200373e83398101604081905262000033916200062c565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620003f7565b6200010e82620003f7565b6200011862000422565b6200014d7ff822b1f0c3b886ce1cdf1c2a5317844145470db33b02c63cae4813f8c9b2dc176801bc16d674ec80000062000490565b620001817f9b1ae66636378b5626322a52e22518dd40bb04881cf0440ed16a20c0f902b242670de0b6b3a764000062000490565b620001b67f876943525608da6d95be5925fe6c4fe80e8622c8a76e7414f80e8ba210e0711c6801ae361fc1451c000062000490565b620001e47f33271b56873d8abb908de4853f90a8a0ef8829548ec0bf6c298feed3917c50a261271062000490565b620002187f08593985ae1bebfb02f6c30105edffb176a6d87c9fad54c434bf9b58f67e81b6670de0b6b3a764000062000490565b620002457f59b5f464ec5829246a81f005456c8cb714ee224aea800742e2dae497263e466960ff62000490565b620002777ffa5a84fed05ba4c93fcc5ba1f4ad010e3bef3e6394b367aa10b3ec01997375cc655af3107a4000620004cd565b620002ad7f712c13b90acf399d7bc7625370ce37c64b5eba41011b0961a88c2ef1648870cf69021e19e0c9bab2400000620004cd565b620002df7fb18278bb399a7088b8b0b26f4896d5ebaba4497c611bbe9d43abe92d9a1fe83d655af3107a4000620004cd565b620003157f1c2fe98ddbbbffbcf7735c7446ffcddb5ccd2a4ec2ace0f7d90f73e9ff13fcc769021e19e0c9bab2400000620004cd565b620003427f6f8d0b773ad4970d3e7d47623dc9ce06a1b4fe833bf451d06a47e774f9acaa636032620004cd565b620003707f2cf2377da51daa9c0d7e3f98c7532a67ee5e9398afad7b7db6e578b978a27094610258620004cd565b6200039c7f84b42b3d5e6851893d4418c6ebc9a4727e78afdf84e73674c8b9c1c2b1904e2d8362000503565b620003a85f846200056d565b8015620003ee575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505062000662565b6001600160a01b0381166200041f5760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff166200048e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f8281526097602090815260409182902083905581518481529081018390525f805160206200371e83398151915291015b60405180910390a15050565b5f8281526098602090815260409182902083905581518481529081018390525f805160206200371e8339815191529101620004c1565b6200050e81620003f7565b5f828152609a602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251858152918201527f5de40a806536a2029221dac2c8887ac9f11952fcc1ed3d7cfb4476dd5259b7409101620004c1565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff166200060c575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620005cb3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b80516001600160a01b038116811462000627575f80fd5b919050565b5f80604083850312156200063e575f80fd5b620006498362000610565b9150620006596020840162000610565b90509250929050565b6130ae80620006705f395ff3fe608060405234801561000f575f80fd5b506004361061076f575f3560e01c80636870bb2b116103cd578063b11c699d11610200578063defd024d1161011f578063f122961f116100b4578063f83c778711610084578063f83c778714611d94578063fa71fcbb14611da7578063ff387f3a14611df6578063ff4f354614611e45575f80fd5b8063f122961f14611d0a578063f4914d3314611d31578063f63718e714611d5a578063f6c278c114611d6d575f80fd5b8063e7bdba32116100ef578063e7bdba3214611be4578063e8fe187314611c0b578063ecf170a814611c63578063f0141d8414611cbb575f80fd5b8063defd024d14611b0e578063e069f71414611b66578063e2f273bd14611bbe578063e4f59b6c14611bd1575f80fd5b8063bedcb34c11610195578063cc45dabe11610165578063cc45dabe14611a2d578063d2cee8ba14611a85578063d547741f14611ad4578063dde63e8f14611ae7575f80fd5b8063bedcb34c146119b9578063c20573c1146119e0578063c60470d3146119f3578063ca78360c14611a1a575f80fd5b8063b5cfee6c116101d0578063b5cfee6c14611927578063b68578441461197f578063b9894a1114611993578063bbb99bb5146119a6575f80fd5b8063b11c699d14611871578063b312392214611898578063b479a517146118c5578063b549dbff14611914575f80fd5b806384780205116102ec57806398c3592711610281578063a469e24711610251578063a469e24714611787578063a53bddd6146117df578063aa2f56c714611806578063aa95379514611819575f80fd5b806398c35927146116bd5780639ca76b73146116d0578063a0b4079f14611728578063a217fddf14611780575f80fd5b80638a4cfb58116102bc5780638a4cfb58146116185780638f8b38671461162b57806391d1485414611683578063983d273714611696575f80fd5b8063847802051461155f57806385e2fcd31461157257806388993d8b146115995780638910115c146115c0575f80fd5b806377e8a0c3116103625780637ae316d0116103325780637ae316d0146114c35780637b4cd7ec146115125780638314859314611525578063841b83b314611538575f80fd5b806377e8a0c31461142757806379175a741461144e578063792c8cc3146114755780637a87fa0b1461149c575f80fd5b80636e9960c31161039d5780636e9960c31461136457806372195b3e146113a9578063723b732c146113bc57806372ce78b0146113cf575f80fd5b80636870bb2b146112525780636ccb9d70146112655780636d28ad1c146112bd5780636e0fddfc14611315575f80fd5b80632f2ff15d116105a55780634c34a982116104c45780635b9cc8b1116104595780636240fb9c116104295780636240fb9c146111ca57806363db7eae146111dd57806367dcf13414611204578063686a8b671461122b575f80fd5b80635b9cc8b1146111255780635be6ce69146111385780635edc686e1461114b5780636176bbde146111a3575f80fd5b80635458a106116104945780635458a106146110585780635726a356146110b0578063572c686a146110ff5780635b5961fc14611112575f80fd5b80634c34a98214610fd057806352112bd314610ff757806353f5713b1461101e5780635455e47214611031575f80fd5b8063384002a21161053a578063403efe7f1161050a578063403efe7f14610f2a5780634191e0fe14610f3d57806344ba0ea214610f64578063489ed65114610f78575f80fd5b8063384002a214610ea25780633871d0f114610ec95780633b6bcca014610ef05780633c128dad14610f17575f80fd5b806336568abe1161057557806336568abe14610dfd57806336854d6314610e10578063368f9d1714610e3757806336c157f414610e4a575f80fd5b80632f2ff15d14610d44578063326a16a314610d5757806334d17d7414610d93578063360374a414610da6575f80fd5b806318bcb28411610691578063248a9ca3116106265780632a9cc2c4116105f65780632a9cc2c414610c465780632ca03f6614610c6d5780632e0f262514610cc55780632ec5e01814610cec575f80fd5b8063248a9ca314610ba55780632651644c14610bc7578063278671bb14610bda5780632a0acc6a14610c32575f80fd5b80631c55cccd116106615780631c55cccd14610b085780631ca197a514610b2f5780631de03db814610b7e5780631ea30fef14610b91575f80fd5b806318bcb28414610a4e5780631af0fff314610aa65780631b2df85014610acd5780631bf6a41c14610ae1575f80fd5b8063103f290711610707578063121669f1116106d7578063121669f11461099d57806314e1b8fd146109b0578063152a91da146109d957806318829fc3146109ff575f80fd5b8063103f2907146108ed5780631049e32e1461091457806310deba2b146109275780631202007514610976575f80fd5b8063088ee72d11610742578063088ee72d146108345780630945d42c146108475780630a3fbd9a1461085a5780630bdf3166146108c6575f80fd5b806301ffc9a7146107735780630430246e1461079b578063047cb439146107d057806308297645146107e5575b5f80fd5b610786610781366004612d91565b611e58565b60405190151581526020015b60405180910390f35b6107c27f9b1ae66636378b5626322a52e22518dd40bb04881cf0440ed16a20c0f902b24281565b604051908152602001610792565b6107e36107de366004612dd3565b611e8e565b005b7f9b1ae66636378b5626322a52e22518dd40bb04881cf0440ed16a20c0f902b2425f5260976020527f2b5f44404b80fc874d00ce3803444dc1d8415bef002ea5e3d4c6a1fc229b361b546107c2565b6107e3610842366004612dd3565b611ec6565b6107e3610855366004612dec565b611efa565b7fc5b1a6a0b843563e6a17ca90bc59d2315c523be427d0c9c2ba08d77ced4f46b15f52609a6020527f93bda0178f178a956e1154aad6f6d04aca130dc29bb626bd6774e853c8c9f354546001600160a01b03165b6040516001600160a01b039091168152602001610792565b6107c27f3e4ded42f360c2e6b1251d584085ae1d9aa9cbed18687fac6b6aef8eed1c5ad381565b6107c27f8d4341681b282735dd0d55670ff8e0ad68a80cbfc2cee847065e9f771470f88f81565b6107e3610922366004612dd3565b611f43565b7f59b5f464ec5829246a81f005456c8cb714ee224aea800742e2dae497263e46695f5260976020527ff1d631be95f382e871541957d68e9595b265874c488308836f37d0f22a9fbae9546107c2565b6107c27f4c9466ca1bf288a7334a7494f09a0acc38ee31628eaf8c68b574b9f0ec22a9c181565b6107e36109ab366004612dd3565b611f77565b5f80516020612fd98339815191525f5260986020525f80516020613019833981519152546107c2565b6107c27e665c1b06e0667c56a1ca1706b7573435d1b9162c6327b5d0ea1daeb491ad0d81565b7f46b41285bb7b8513ce3a9d95cdf6916699fb00b47326e8d3850be1b6186e03495f5260986020527f4d508419d31c3547aff85909df3c1fcaa249c360d3c9fa4e4f9e9c899cebbedc546107c2565b7f8d4341681b282735dd0d55670ff8e0ad68a80cbfc2cee847065e9f771470f88f5f52609a6020527f510a692d092451633b86b6d5ebd49dd58b5ea01b6d0783a379a8169a08baac9f546001600160a01b03166108ae565b6107c27fe5240448c78dfcff5bda4e4eed69ba9635df15d79da0e8a4cf889217106fa45b81565b6107c25f80516020612f9983398151915281565b6107c27f29384ec8473b541e7a7850226a4d1906a700f14cc394266ee08800ba62dc3af981565b6107c27fbd34382cd421c5250595893a4ed6cdb2125e6be7d5e0a9dbc469de5d583adfcf81565b7f3c6dcff840f36f9818a73b67d9d00197362f63687bd52e3c277bd0ffb30dde335f5260986020527f9e4fbca7af476428837bb1c0659b29a978bd5be1038b9848cfd6837f97c0c036546107c2565b6107e3610b8c366004612dd3565b611fab565b6107c25f8051602061305983398151915281565b6107c2610bb3366004612dec565b5f9081526065602052604090206001015490565b6107e3610bd5366004612dd3565b611fdf565b7f5be667ef1f4c6c279e2aa7e62595a1045043db6a43145cb438c6d36e7a3c3ed85f52609a6020527f3f1c1b82007b7a87a83473281505b32822fde2464206a16635328330125264a8546001600160a01b03166108ae565b6107c25f80516020612ff983398151915281565b6107c27fb134afa3abad633a84ab2d33dd5171f2b371e38b0f7bca001383aaf08ed6d2d181565b7fb134afa3abad633a84ab2d33dd5171f2b371e38b0f7bca001383aaf08ed6d2d15f52609a6020527fb5c61d48a513a298b438559aede2612ccf11b8fe4c725b0f159efab727297353546001600160a01b03166108ae565b6107c27f08593985ae1bebfb02f6c30105edffb176a6d87c9fad54c434bf9b58f67e81b681565b7f3d88d1233771c5c30791fb6805b7f91424dae1e5a68a57da846ca7ff83c640295f52609a6020527f018f2aef664aeeb1561d5a44d318b67f16f75b697bf95eeabc62c48d36323e72546001600160a01b03166108ae565b6107e3610d52366004612e03565b612013565b5f80516020612fb98339815191525f5260986020527fd179a4a9329ee39fba707fd91c699ec0f088afc56731eb89ff424b873ac70844546107c2565b6107e3610da1366004612dd3565b61203c565b7e665c1b06e0667c56a1ca1706b7573435d1b9162c6327b5d0ea1daeb491ad0d5f52609a6020527fe107fed811895732bef768006b62e8ce98d10a188d78cab697a91a201b5e2404546001600160a01b03166108ae565b6107e3610e0b366004612e03565b612070565b6107c27ff935b8bf66b325637ad32ca875b588849cf4026791b79b4dc20623cd3dd36e2081565b6107e3610e45366004612dd3565b6120ef565b7f8e96355022bb9b9f4d9d4e01fe2b58f45e78549c982c401c96f75f33c5de457e5f52609a6020527fe74d6d5cda9d4a34ee9d4950f99c58c26803c1cf17dbd9d3e9f82fcea7feb01e546001600160a01b03166108ae565b6107c27f95bf18d68834a11aaae7b73ff6037326f163a81a7b5ea80cba96856ce2284fbd81565b6107c27f9f919a2294d86593fbcec81ea71aa683cec51c78771c642f8894ba8f3949705281565b6107c27fc5b1a6a0b843563e6a17ca90bc59d2315c523be427d0c9c2ba08d77ced4f46b181565b6107e3610f25366004612dd3565b612123565b6107e3610f38366004612dd3565b612157565b6107c27fa4083e7a78dd898def03c51ce199cb4286b8828be4f6f46e04aec6176196747181565b6107c25f80516020612fb983398151915281565b7f690795c57e13eaf2526f76202b6799e9afdb069afca1e572f693953d013569d85f52609a6020527f38e84315fdfc8f1b16767d9fd043998a9ff60cfbcb629d8f48542b4e3ee87096546001600160a01b03166108ae565b6107c27f712c13b90acf399d7bc7625370ce37c64b5eba41011b0961a88c2ef1648870cf81565b6107c27f602490b12960e59ddb584affd1da6cd5692f4455c1ba0cc4e865af81e111ebe281565b61078661102c366004612dd3565b61218b565b6107c27f59b5f464ec5829246a81f005456c8cb714ee224aea800742e2dae497263e466981565b7fdb5d1c2a9350ca010dcdf3953da11a9e8f7c5e2918cdfa65500e84e7fd4fde7d5f52609a6020527f642611b82cedca4c0a5510e3234bea9632cc7eb6e135d12e2ef4f8c68dc23add546001600160a01b03166108ae565b7f712c13b90acf399d7bc7625370ce37c64b5eba41011b0961a88c2ef1648870cf5f5260986020527ffcacc1044a5a1b4eb9c058396306426a857813d37a4fb6ccf5a3adde30e0c914546107c2565b6107e361110d366004612dec565b6121b6565b6107e3611120366004612dd3565b6121f7565b6107e3611133366004612dec565b61222b565b6107e3611146366004612dd3565b61224c565b7fa4083e7a78dd898def03c51ce199cb4286b8828be4f6f46e04aec617619674715f52609a6020527f863e03b3878962463f3668c14c10a4aeeabb7baa9c7a9b990796f179109d8692546001600160a01b03166108ae565b6107c27f2cf2377da51daa9c0d7e3f98c7532a67ee5e9398afad7b7db6e578b978a2709481565b6107866111d8366004612dd3565b612280565b6107c27f33271b56873d8abb908de4853f90a8a0ef8829548ec0bf6c298feed3917c50a281565b6107c27ff822b1f0c3b886ce1cdf1c2a5317844145470db33b02c63cae4813f8c9b2dc1781565b6107c27fc54a7590fe6738d7a81f393c1cf5ab3e577c91781037d93a5a9f5ce44f19eb5181565b6107e3611260366004612dec565b612298565b7fd7e49a298cb2719de62e5df1024257eed316db6337361b3a30d56a75324046075f52609a6020527f294ce448c5d68d362948bb2b78c5571986464589b6911cc804ca52d7abbad2e3546001600160a01b03166108ae565b7fbd34382cd421c5250595893a4ed6cdb2125e6be7d5e0a9dbc469de5d583adfcf5f52609a6020527f3195564ffd56571794a8c7ffc14e3d393758b399f23318e874273db13addfdfe546001600160a01b03166108ae565b7fc54a7590fe6738d7a81f393c1cf5ab3e577c91781037d93a5a9f5ce44f19eb515f5260986020527f4d985796191711ecc0d75f056488220f1f755856cdfe3ebd45de3537c37b9b50546107c2565b5f80516020612ff98339815191525f5260996020527f15be86566e203c1f41b9ae149d9fbb01b2c14f503704423d739a6e3d2db5a9ee546001600160a01b03166108ae565b6107e36113b7366004612dd3565b6122d9565b6107e36113ca366004612dec565b61230d565b7f8567f5af844d68168987760a7ce1762804b9de703165fc50ce4fa85246016c915f5260996020527f2c1f6cfa08e101d854b66353df53d6eb32e981bfc1a8351f458fd54b64cfc181546001600160a01b03166108ae565b6107c27f84b42b3d5e6851893d4418c6ebc9a4727e78afdf84e73674c8b9c1c2b1904e2d81565b6107c27f5be667ef1f4c6c279e2aa7e62595a1045043db6a43145cb438c6d36e7a3c3ed881565b6107c27f876943525608da6d95be5925fe6c4fe80e8622c8a76e7414f80e8ba210e0711c81565b6107c27f76d62e541b8d573110ca3eb9003e96426f530422a76712d1356f6c6ce50541ca81565b7f33271b56873d8abb908de4853f90a8a0ef8829548ec0bf6c298feed3917c50a25f5260976020527f799f922a2554690a852ce3427a174a9d0f64f94f53730bd0c6e1e1fdc54799ae546107c2565b6107e3611520366004612dd3565b612341565b6107e3611533366004612dd3565b612382565b6107c27f8567f5af844d68168987760a7ce1762804b9de703165fc50ce4fa85246016c9181565b6107e361156d366004612dec565b6123b6565b6107c27fd7e49a298cb2719de62e5df1024257eed316db6337361b3a30d56a753240460781565b6107c27f6f8d0b773ad4970d3e7d47623dc9ce06a1b4fe833bf451d06a47e774f9acaa6381565b7f29384ec8473b541e7a7850226a4d1906a700f14cc394266ee08800ba62dc3af95f52609a6020527f249a87d52af73222d4a479ebe40b904ebabf543d4706240658e6092ca9388c26546001600160a01b03166108ae565b6107e3611626366004612dec565b6123e4565b7f84b42b3d5e6851893d4418c6ebc9a4727e78afdf84e73674c8b9c1c2b1904e2d5f52609a6020527f492656d26f3accf1cea0a783c131178deb1c8733d9c679e5cecde8df27a9ad95546001600160a01b03166108ae565b610786611691366004612e03565b612425565b6107c27f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c81565b6107e36116cb366004612dd3565b61244f565b7f76d62e541b8d573110ca3eb9003e96426f530422a76712d1356f6c6ce50541ca5f52609a6020527f86012a00795dbb89a313ebfe1e3a458a84ce87cdb7c6a7971caf999119513627546001600160a01b03166108ae565b7f602490b12960e59ddb584affd1da6cd5692f4455c1ba0cc4e865af81e111ebe25f52609a6020527fd54531c6bba5beed207277daa8e0e65bdfb6aece3f974fb0394154eb989d1d42546001600160a01b03166108ae565b6107c25f81565b7f4c9466ca1bf288a7334a7494f09a0acc38ee31628eaf8c68b574b9f0ec22a9c15f52609a6020527f2df8b6a0a0cdef82de21edc971a252888647231024af6c12c533010687315b1f546001600160a01b03166108ae565b6107c27f3d88d1233771c5c30791fb6805b7f91424dae1e5a68a57da846ca7ff83c6402981565b6107e3611814366004612dd3565b612483565b7f5c00ec259bace293b50174e499c413ca897b4bcb54ed468b7e6bade51c6a9f965f52609a6020527fcda3409ebc466b6ac691341dcf169fdb28e448f6cf860239292340843aa52984546001600160a01b03166108ae565b6107c27f8e96355022bb9b9f4d9d4e01fe2b58f45e78549c982c401c96f75f33c5de457e81565b6107866118a6366004612e2d565b5f908152609a60205260409020546001600160a01b0390811691161490565b7f6f8d0b773ad4970d3e7d47623dc9ce06a1b4fe833bf451d06a47e774f9acaa635f5260986020527f72873426992e590ffa79a15175a7f2c8cf191cf402b7484af189cd125376fcdc546107c2565b6107e3611922366004612dd3565b6124b7565b7fe5240448c78dfcff5bda4e4eed69ba9635df15d79da0e8a4cf889217106fa45b5f52609a6020527fcce26741946f801b25ce3c49451d2dd729b689d4d0d23ea57849f6c666bb5ee3546001600160a01b03166108ae565b6107c25f80516020612fd983398151915281565b6107e36119a1366004612dd3565b6124eb565b6107e36119b4366004612dec565b61251f565b6107c27f3c6dcff840f36f9818a73b67d9d00197362f63687bd52e3c277bd0ffb30dde3381565b6107e36119ee366004612dd3565b612573565b6107c27f690795c57e13eaf2526f76202b6799e9afdb069afca1e572f693953d013569d881565b6107e3611a28366004612dd3565b6125a7565b7f09dfa94a9be22222b511ecf509f49718fc08fbe3ada37a44d2022489eca3b44c5f52609b6020527fe98ed444639fcf7afa9e33a4ea67ac4155aa97d88f546111c8d1357c98dbca00546001600160a01b03166108ae565b7f2cf2377da51daa9c0d7e3f98c7532a67ee5e9398afad7b7db6e578b978a270945f5260986020527f0ccceacf55cd457ff25dca300775a2cb43db2c0b890d3ee063f4abba210c504f546107c2565b6107e3611ae2366004612e03565b6125db565b6107c27fdb5d1c2a9350ca010dcdf3953da11a9e8f7c5e2918cdfa65500e84e7fd4fde7d81565b7f9f919a2294d86593fbcec81ea71aa683cec51c78771c642f8894ba8f394970525f52609a6020527f99c8bd240e5bd2ee897b6a14ca3ca43a06f489dad5e38985ad188e67459dc6d7546001600160a01b03166108ae565b7f95bf18d68834a11aaae7b73ff6037326f163a81a7b5ea80cba96856ce2284fbd5f52609b6020527f20c8b2f4826823ac4cd62278270e8be9c7f63b9fe22e1f148f5369ec26bc69f4546001600160a01b03166108ae565b6107e3611bcc366004612dd3565b6125ff565b6107e3611bdf366004612dd3565b612677565b6107c27f46b41285bb7b8513ce3a9d95cdf6916699fb00b47326e8d3850be1b6186e034981565b7f3e4ded42f360c2e6b1251d584085ae1d9aa9cbed18687fac6b6aef8eed1c5ad35f52609a6020527fe298efc0f606c3be77912795055e173991a2c395633d4b0a06597a13b46e0c0b546001600160a01b03166108ae565b7ff935b8bf66b325637ad32ca875b588849cf4026791b79b4dc20623cd3dd36e205f52609a6020527f18d210dd586fe31598c73b0131261a1f7a576051e2667bbf5a4f8a01cf2f1392546001600160a01b03166108ae565b7f08593985ae1bebfb02f6c30105edffb176a6d87c9fad54c434bf9b58f67e81b65f5260976020527fb645ae2edae7c0716931b638cd9631a05f9a39fec3f15294f7f3af49f2f51ca8546107c2565b6107c27f5c00ec259bace293b50174e499c413ca897b4bcb54ed468b7e6bade51c6a9f9681565b5f805160206130598339815191525f5260986020525f80516020613039833981519152546107c2565b6107e3611d68366004612dd3565b6126ab565b6107c27f09dfa94a9be22222b511ecf509f49718fc08fbe3ada37a44d2022489eca3b44c81565b6107e3611da2366004612dd3565b6126de565b7f876943525608da6d95be5925fe6c4fe80e8622c8a76e7414f80e8ba210e0711c5f5260976020527fea561c0677f20715a0e74899b0381a0fa1265a58e9e02fb4a5a398d87555d1fe546107c2565b7ff822b1f0c3b886ce1cdf1c2a5317844145470db33b02c63cae4813f8c9b2dc175f5260976020527f9863915096f3522486953e53c4b97560d72679216b36fd98b4bdd4eca3a01eaa546107c2565b6107e3611e53366004612dec565b612712565b5f6001600160e01b03198216637965db0b60e01b1480611e8857506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f611e9881612733565b611ec27fdb5d1c2a9350ca010dcdf3953da11a9e8f7c5e2918cdfa65500e84e7fd4fde7d83612740565b5050565b5f611ed081612733565b611ec27ff935b8bf66b325637ad32ca875b588849cf4026791b79b4dc20623cd3dd36e2083612740565b5f80516020612f99833981519152611f1181612733565b611f3b7f712c13b90acf399d7bc7625370ce37c64b5eba41011b0961a88c2ef1648870cf836127af565b611ec26127f6565b5f611f4d81612733565b611ec27fc5b1a6a0b843563e6a17ca90bc59d2315c523be427d0c9c2ba08d77ced4f46b183612740565b5f611f8181612733565b611ec27f8e96355022bb9b9f4d9d4e01fe2b58f45e78549c982c401c96f75f33c5de457e83612740565b5f611fb581612733565b611ec27f5be667ef1f4c6c279e2aa7e62595a1045043db6a43145cb438c6d36e7a3c3ed883612740565b5f611fe981612733565b611ec27fd7e49a298cb2719de62e5df1024257eed316db6337361b3a30d56a753240460783612740565b5f8281526065602052604090206001015461202d81612733565b61203783836129a9565b505050565b5f61204681612733565b611ec27f5c00ec259bace293b50174e499c413ca897b4bcb54ed468b7e6bade51c6a9f9683612740565b6001600160a01b03811633146120e55760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b611ec28282612a2e565b5f6120f981612733565b611ec27f3d88d1233771c5c30791fb6805b7f91424dae1e5a68a57da846ca7ff83c6402983612740565b5f61212d81612733565b611ec27fa4083e7a78dd898def03c51ce199cb4286b8828be4f6f46e04aec6176196747183612740565b5f61216181612733565b611ec27f690795c57e13eaf2526f76202b6799e9afdb069afca1e572f693953d013569d883612740565b5f611e887f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c83612425565b5f80516020612f998339815191526121cd81612733565b611ec27f46b41285bb7b8513ce3a9d95cdf6916699fb00b47326e8d3850be1b6186e0349836127af565b5f61220181612733565b611ec27fbd34382cd421c5250595893a4ed6cdb2125e6be7d5e0a9dbc469de5d583adfcf83612740565b5f61223581612733565b611f3b5f80516020612fb9833981519152836127af565b5f61225681612733565b611ec27f3e4ded42f360c2e6b1251d584085ae1d9aa9cbed18687fac6b6aef8eed1c5ad383612740565b5f611e885f80516020612f9983398151915283612425565b5f80516020612f998339815191526122af81612733565b611ec27f3c6dcff840f36f9818a73b67d9d00197362f63687bd52e3c277bd0ffb30dde33836127af565b5f6122e381612733565b611ec27fb134afa3abad633a84ab2d33dd5171f2b371e38b0f7bca001383aaf08ed6d2d183612740565b5f61231781612733565b611ec27f2cf2377da51daa9c0d7e3f98c7532a67ee5e9398afad7b7db6e578b978a27094836127af565b5f80516020612f9983398151915261235881612733565b611ec27f8567f5af844d68168987760a7ce1762804b9de703165fc50ce4fa85246016c9183612a94565b5f61238c81612733565b611ec27f95bf18d68834a11aaae7b73ff6037326f163a81a7b5ea80cba96856ce2284fbd83612afb565b5f80516020612f998339815191526123cd81612733565b611f3b5f80516020613059833981519152836127af565b5f80516020612f998339815191526123fb81612733565b611ec27fc54a7590fe6738d7a81f393c1cf5ab3e577c91781037d93a5a9f5ce44f19eb51836127af565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f61245981612733565b611ec27f8d4341681b282735dd0d55670ff8e0ad68a80cbfc2cee847065e9f771470f88f83612740565b5f61248d81612733565b611ec27fe5240448c78dfcff5bda4e4eed69ba9635df15d79da0e8a4cf889217106fa45b83612740565b5f6124c181612733565b611ec27f602490b12960e59ddb584affd1da6cd5692f4455c1ba0cc4e865af81e111ebe283612740565b5f6124f581612733565b611ec27f09dfa94a9be22222b511ecf509f49718fc08fbe3ada37a44d2022489eca3b44c83612afb565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c61254981612733565b611ec27f6f8d0b773ad4970d3e7d47623dc9ce06a1b4fe833bf451d06a47e774f9acaa63836127af565b5f61257d81612733565b611ec27f76d62e541b8d573110ca3eb9003e96426f530422a76712d1356f6c6ce50541ca83612740565b5f6125b181612733565b611ec27f9f919a2294d86593fbcec81ea71aa683cec51c78771c642f8894ba8f3949705283612740565b5f828152606560205260409020600101546125f581612733565b6120378383612a2e565b5f61260981612733565b5f80516020612ff98339815191525f90815260996020527f15be86566e203c1f41b9ae149d9fbb01b2c14f503704423d739a6e3d2db5a9ee546001600160a01b03169061265690846129a9565b61266d5f80516020612ff983398151915284612a94565b6120375f82612a2e565b5f61268181612733565b611ec27f4c9466ca1bf288a7334a7494f09a0acc38ee31628eaf8c68b574b9f0ec22a9c183612740565b5f6126b581612733565b611ec27e665c1b06e0667c56a1ca1706b7573435d1b9162c6327b5d0ea1daeb491ad0d83612740565b5f6126e881612733565b611ec27f29384ec8473b541e7a7850226a4d1906a700f14cc394266ee08800ba62dc3af983612740565b5f61271c81612733565b611f3b5f80516020612fd9833981519152836127af565b61273d8133612b62565b50565b61274981612bbb565b5f828152609a602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251858152918201527f5de40a806536a2029221dac2c8887ac9f11952fcc1ed3d7cfb4476dd5259b74091015b60405180910390a15050565b5f8281526098602090815260409182902083905581518481529081018390527f9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c4658163091016127a3565b5f805160206130598339815191525f5260986020525f80516020613039833981519152541580159061284a57505f80516020612fd98339815191525f5260986020525f805160206130198339815191525415155b801561289a575060986020527ffcacc1044a5a1b4eb9c058396306426a857813d37a4fb6ccf5a3adde30e0c914545f805160206130598339815191525f525f805160206130398339815191525411155b80156128ea575060986020527fd179a4a9329ee39fba707fd91c699ec0f088afc56731eb89ff424b873ac70844545f80516020612fd98339815191525f525f805160206130198339815191525411155b8015612927575060986020525f80516020613039833981519152545f80516020612fd98339815191525f525f805160206130198339815191525411155b801561298a575060986020527ffcacc1044a5a1b4eb9c058396306426a857813d37a4fb6ccf5a3adde30e0c914545f80516020612fb98339815191525f527fd179a4a9329ee39fba707fd91c699ec0f088afc56731eb89ff424b873ac708445410155b6129a75760405163e773e0a960e01b815260040160405180910390fd5b565b6129b38282612425565b611ec2575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556129ea3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612a388282612425565b15611ec2575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b612a9d81612bbb565b5f8281526099602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251858152918201527fcbdd341876786c7241ad12a5ce5ea46739a4ce7b1587d0c216dfa655a98e50a691016127a3565b612b0481612bbb565b5f828152609b602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251858152918201527f19aab10c6a9f5d648eaa15e2d515f8dfda570ee221e7c8cb9dc07694e68005bc91016127a3565b612b6c8282612425565b611ec257612b7981612be2565b612b84836020612bf4565b604051602001612b95929190612e77565b60408051601f198184030181529082905262461bcd60e51b82526120dc91600401612eeb565b6001600160a01b03811661273d5760405163d92e233d60e01b815260040160405180910390fd5b6060611e886001600160a01b03831660145b60605f612c02836002612f31565b612c0d906002612f48565b67ffffffffffffffff811115612c2557612c25612f5b565b6040519080825280601f01601f191660200182016040528015612c4f576020820181803683370190505b509050600360fc1b815f81518110612c6957612c69612f6f565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110612c9757612c97612f6f565b60200101906001600160f81b03191690815f1a9053505f612cb9846002612f31565b612cc4906001612f48565b90505b6001811115612d3b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612cf857612cf8612f6f565b1a60f81b828281518110612d0e57612d0e612f6f565b60200101906001600160f81b03191690815f1a90535060049490941c93612d3481612f83565b9050612cc7565b508315612d8a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016120dc565b9392505050565b5f60208284031215612da1575f80fd5b81356001600160e01b031981168114612d8a575f80fd5b80356001600160a01b0381168114612dce575f80fd5b919050565b5f60208284031215612de3575f80fd5b612d8a82612db8565b5f60208284031215612dfc575f80fd5b5035919050565b5f8060408385031215612e14575f80fd5b82359150612e2460208401612db8565b90509250929050565b5f8060408385031215612e3e575f80fd5b612e4783612db8565b946020939093013593505050565b5f5b83811015612e6f578181015183820152602001612e57565b50505f910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351612eae816017850160208801612e55565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612edf816028840160208801612e55565b01602801949350505050565b602081525f8251806020840152612f09816040850160208701612e55565b601f01601f19169190910160400192915050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417611e8857611e88612f1d565b80820180821115611e8857611e88612f1d565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81612f9157612f91612f1d565b505f19019056feaf290d8680820aad922855f39b306097b20e28774d6c1ad35a20325630c3a02c1c2fe98ddbbbffbcf7735c7446ffcddb5ccd2a4ec2ace0f7d90f73e9ff13fcc7b18278bb399a7088b8b0b26f4896d5ebaba4497c611bbe9d43abe92d9a1fe83ddf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec428f1b9b075a455aa4e85ab4edea73c8fe6d4e2e5e4c6675d6135fefdca5e95a258489bc07817c82dd59579d43388f707a6a0a4a614b58e7df61bb06baec0de2c1fa5a84fed05ba4c93fcc5ba1f4ad010e3bef3e6394b367aa10b3ec01997375cca2646970667358221220d0bbc42566fb90656cf788bbeb4cb6ef98851a82ee8814bf66f60651001b822764736f6c634300081400339094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c46581630", +} + +// StaderConfigABI is the input ABI used to generate the binding from. +// Deprecated: Use StaderConfigMetaData.ABI instead. +var StaderConfigABI = StaderConfigMetaData.ABI + +// StaderConfigBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use StaderConfigMetaData.Bin instead. +var StaderConfigBin = StaderConfigMetaData.Bin + +// DeployStaderConfig deploys a new Ethereum contract, binding an instance of StaderConfig to it. +func DeployStaderConfig(auth *bind.TransactOpts, backend bind.ContractBackend, _admin common.Address, _ethDepositContract common.Address) (common.Address, *types.Transaction, *StaderConfig, error) { + parsed, err := StaderConfigMetaData.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(StaderConfigBin), backend, _admin, _ethDepositContract) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &StaderConfig{StaderConfigCaller: StaderConfigCaller{contract: contract}, StaderConfigTransactor: StaderConfigTransactor{contract: contract}, StaderConfigFilterer: StaderConfigFilterer{contract: contract}}, nil +} + +// StaderConfig is an auto generated Go binding around an Ethereum contract. +type StaderConfig struct { + StaderConfigCaller // Read-only binding to the contract + StaderConfigTransactor // Write-only binding to the contract + StaderConfigFilterer // Log filterer for contract events +} + +// StaderConfigCaller is an auto generated read-only Go binding around an Ethereum contract. +type StaderConfigCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StaderConfigTransactor is an auto generated write-only Go binding around an Ethereum contract. +type StaderConfigTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StaderConfigFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type StaderConfigFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StaderConfigSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type StaderConfigSession struct { + Contract *StaderConfig // 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 +} + +// StaderConfigCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type StaderConfigCallerSession struct { + Contract *StaderConfigCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// StaderConfigTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type StaderConfigTransactorSession struct { + Contract *StaderConfigTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// StaderConfigRaw is an auto generated low-level Go binding around an Ethereum contract. +type StaderConfigRaw struct { + Contract *StaderConfig // Generic contract binding to access the raw methods on +} + +// StaderConfigCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type StaderConfigCallerRaw struct { + Contract *StaderConfigCaller // Generic read-only contract binding to access the raw methods on +} + +// StaderConfigTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type StaderConfigTransactorRaw struct { + Contract *StaderConfigTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewStaderConfig creates a new instance of StaderConfig, bound to a specific deployed contract. +func NewStaderConfig(address common.Address, backend bind.ContractBackend) (*StaderConfig, error) { + contract, err := bindStaderConfig(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &StaderConfig{StaderConfigCaller: StaderConfigCaller{contract: contract}, StaderConfigTransactor: StaderConfigTransactor{contract: contract}, StaderConfigFilterer: StaderConfigFilterer{contract: contract}}, nil +} + +// NewStaderConfigCaller creates a new read-only instance of StaderConfig, bound to a specific deployed contract. +func NewStaderConfigCaller(address common.Address, caller bind.ContractCaller) (*StaderConfigCaller, error) { + contract, err := bindStaderConfig(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &StaderConfigCaller{contract: contract}, nil +} + +// NewStaderConfigTransactor creates a new write-only instance of StaderConfig, bound to a specific deployed contract. +func NewStaderConfigTransactor(address common.Address, transactor bind.ContractTransactor) (*StaderConfigTransactor, error) { + contract, err := bindStaderConfig(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &StaderConfigTransactor{contract: contract}, nil +} + +// NewStaderConfigFilterer creates a new log filterer instance of StaderConfig, bound to a specific deployed contract. +func NewStaderConfigFilterer(address common.Address, filterer bind.ContractFilterer) (*StaderConfigFilterer, error) { + contract, err := bindStaderConfig(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &StaderConfigFilterer{contract: contract}, nil +} + +// bindStaderConfig binds a generic wrapper to an already deployed contract. +func bindStaderConfig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := StaderConfigMetaData.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 (_StaderConfig *StaderConfigRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StaderConfig.Contract.StaderConfigCaller.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 (_StaderConfig *StaderConfigRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StaderConfig.Contract.StaderConfigTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StaderConfig *StaderConfigRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StaderConfig.Contract.StaderConfigTransactor.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 (_StaderConfig *StaderConfigCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StaderConfig.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 (_StaderConfig *StaderConfigTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StaderConfig.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StaderConfig *StaderConfigTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StaderConfig.Contract.contract.Transact(opts, method, params...) +} + +// ADMIN is a free data retrieval call binding the contract method 0x2a0acc6a. +// +// Solidity: function ADMIN() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) ADMIN(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "ADMIN") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ADMIN is a free data retrieval call binding the contract method 0x2a0acc6a. +// +// Solidity: function ADMIN() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) ADMIN() ([32]byte, error) { + return _StaderConfig.Contract.ADMIN(&_StaderConfig.CallOpts) +} + +// ADMIN is a free data retrieval call binding the contract method 0x2a0acc6a. +// +// Solidity: function ADMIN() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) ADMIN() ([32]byte, error) { + return _StaderConfig.Contract.ADMIN(&_StaderConfig.CallOpts) +} + +// AUCTIONCONTRACT is a free data retrieval call binding the contract method 0xb11c699d. +// +// Solidity: function AUCTION_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) AUCTIONCONTRACT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "AUCTION_CONTRACT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// AUCTIONCONTRACT is a free data retrieval call binding the contract method 0xb11c699d. +// +// Solidity: function AUCTION_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) AUCTIONCONTRACT() ([32]byte, error) { + return _StaderConfig.Contract.AUCTIONCONTRACT(&_StaderConfig.CallOpts) +} + +// AUCTIONCONTRACT is a free data retrieval call binding the contract method 0xb11c699d. +// +// Solidity: function AUCTION_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) AUCTIONCONTRACT() ([32]byte, error) { + return _StaderConfig.Contract.AUCTIONCONTRACT(&_StaderConfig.CallOpts) +} + +// DECIMALS is a free data retrieval call binding the contract method 0x2e0f2625. +// +// Solidity: function DECIMALS() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) DECIMALS(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "DECIMALS") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DECIMALS is a free data retrieval call binding the contract method 0x2e0f2625. +// +// Solidity: function DECIMALS() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) DECIMALS() ([32]byte, error) { + return _StaderConfig.Contract.DECIMALS(&_StaderConfig.CallOpts) +} + +// DECIMALS is a free data retrieval call binding the contract method 0x2e0f2625. +// +// Solidity: function DECIMALS() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) DECIMALS() ([32]byte, error) { + return _StaderConfig.Contract.DECIMALS(&_StaderConfig.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) DEFAULTADMINROLE() ([32]byte, error) { + return _StaderConfig.Contract.DEFAULTADMINROLE(&_StaderConfig.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _StaderConfig.Contract.DEFAULTADMINROLE(&_StaderConfig.CallOpts) +} + +// ETHXSUPPLYPORFEED is a free data retrieval call binding the contract method 0x2a9cc2c4. +// +// Solidity: function ETHX_SUPPLY_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) ETHXSUPPLYPORFEED(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "ETHX_SUPPLY_POR_FEED") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ETHXSUPPLYPORFEED is a free data retrieval call binding the contract method 0x2a9cc2c4. +// +// Solidity: function ETHX_SUPPLY_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) ETHXSUPPLYPORFEED() ([32]byte, error) { + return _StaderConfig.Contract.ETHXSUPPLYPORFEED(&_StaderConfig.CallOpts) +} + +// ETHXSUPPLYPORFEED is a free data retrieval call binding the contract method 0x2a9cc2c4. +// +// Solidity: function ETHX_SUPPLY_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) ETHXSUPPLYPORFEED() ([32]byte, error) { + return _StaderConfig.Contract.ETHXSUPPLYPORFEED(&_StaderConfig.CallOpts) +} + +// ETHBALANCEPORFEED is a free data retrieval call binding the contract method 0xc60470d3. +// +// Solidity: function ETH_BALANCE_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) ETHBALANCEPORFEED(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "ETH_BALANCE_POR_FEED") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ETHBALANCEPORFEED is a free data retrieval call binding the contract method 0xc60470d3. +// +// Solidity: function ETH_BALANCE_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) ETHBALANCEPORFEED() ([32]byte, error) { + return _StaderConfig.Contract.ETHBALANCEPORFEED(&_StaderConfig.CallOpts) +} + +// ETHBALANCEPORFEED is a free data retrieval call binding the contract method 0xc60470d3. +// +// Solidity: function ETH_BALANCE_POR_FEED() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) ETHBALANCEPORFEED() ([32]byte, error) { + return _StaderConfig.Contract.ETHBALANCEPORFEED(&_StaderConfig.CallOpts) +} + +// ETHDEPOSITCONTRACT is a free data retrieval call binding the contract method 0x77e8a0c3. +// +// Solidity: function ETH_DEPOSIT_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) ETHDEPOSITCONTRACT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "ETH_DEPOSIT_CONTRACT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ETHDEPOSITCONTRACT is a free data retrieval call binding the contract method 0x77e8a0c3. +// +// Solidity: function ETH_DEPOSIT_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) ETHDEPOSITCONTRACT() ([32]byte, error) { + return _StaderConfig.Contract.ETHDEPOSITCONTRACT(&_StaderConfig.CallOpts) +} + +// ETHDEPOSITCONTRACT is a free data retrieval call binding the contract method 0x77e8a0c3. +// +// Solidity: function ETH_DEPOSIT_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) ETHDEPOSITCONTRACT() ([32]byte, error) { + return _StaderConfig.Contract.ETHDEPOSITCONTRACT(&_StaderConfig.CallOpts) +} + +// ETHPERNODE is a free data retrieval call binding the contract method 0x67dcf134. +// +// Solidity: function ETH_PER_NODE() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) ETHPERNODE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "ETH_PER_NODE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ETHPERNODE is a free data retrieval call binding the contract method 0x67dcf134. +// +// Solidity: function ETH_PER_NODE() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) ETHPERNODE() ([32]byte, error) { + return _StaderConfig.Contract.ETHPERNODE(&_StaderConfig.CallOpts) +} + +// ETHPERNODE is a free data retrieval call binding the contract method 0x67dcf134. +// +// Solidity: function ETH_PER_NODE() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) ETHPERNODE() ([32]byte, error) { + return _StaderConfig.Contract.ETHPERNODE(&_StaderConfig.CallOpts) +} + +// ETHx is a free data retrieval call binding the contract method 0xf6c278c1. +// +// Solidity: function ETHx() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) ETHx(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "ETHx") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ETHx is a free data retrieval call binding the contract method 0xf6c278c1. +// +// Solidity: function ETHx() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) ETHx() ([32]byte, error) { + return _StaderConfig.Contract.ETHx(&_StaderConfig.CallOpts) +} + +// ETHx is a free data retrieval call binding the contract method 0xf6c278c1. +// +// Solidity: function ETHx() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) ETHx() ([32]byte, error) { + return _StaderConfig.Contract.ETHx(&_StaderConfig.CallOpts) +} + +// FULLDEPOSITSIZE is a free data retrieval call binding the contract method 0x792c8cc3. +// +// Solidity: function FULL_DEPOSIT_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) FULLDEPOSITSIZE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "FULL_DEPOSIT_SIZE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// FULLDEPOSITSIZE is a free data retrieval call binding the contract method 0x792c8cc3. +// +// Solidity: function FULL_DEPOSIT_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) FULLDEPOSITSIZE() ([32]byte, error) { + return _StaderConfig.Contract.FULLDEPOSITSIZE(&_StaderConfig.CallOpts) +} + +// FULLDEPOSITSIZE is a free data retrieval call binding the contract method 0x792c8cc3. +// +// Solidity: function FULL_DEPOSIT_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) FULLDEPOSITSIZE() ([32]byte, error) { + return _StaderConfig.Contract.FULLDEPOSITSIZE(&_StaderConfig.CallOpts) +} + +// MANAGER is a free data retrieval call binding the contract method 0x1b2df850. +// +// Solidity: function MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) MANAGER(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "MANAGER") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MANAGER is a free data retrieval call binding the contract method 0x1b2df850. +// +// Solidity: function MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) MANAGER() ([32]byte, error) { + return _StaderConfig.Contract.MANAGER(&_StaderConfig.CallOpts) +} + +// MANAGER is a free data retrieval call binding the contract method 0x1b2df850. +// +// Solidity: function MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) MANAGER() ([32]byte, error) { + return _StaderConfig.Contract.MANAGER(&_StaderConfig.CallOpts) +} + +// MAXDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x4c34a982. +// +// Solidity: function MAX_DEPOSIT_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) MAXDEPOSITAMOUNT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "MAX_DEPOSIT_AMOUNT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MAXDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x4c34a982. +// +// Solidity: function MAX_DEPOSIT_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) MAXDEPOSITAMOUNT() ([32]byte, error) { + return _StaderConfig.Contract.MAXDEPOSITAMOUNT(&_StaderConfig.CallOpts) +} + +// MAXDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x4c34a982. +// +// Solidity: function MAX_DEPOSIT_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) MAXDEPOSITAMOUNT() ([32]byte, error) { + return _StaderConfig.Contract.MAXDEPOSITAMOUNT(&_StaderConfig.CallOpts) +} + +// MAXWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0x44ba0ea2. +// +// Solidity: function MAX_WITHDRAW_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) MAXWITHDRAWAMOUNT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "MAX_WITHDRAW_AMOUNT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MAXWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0x44ba0ea2. +// +// Solidity: function MAX_WITHDRAW_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) MAXWITHDRAWAMOUNT() ([32]byte, error) { + return _StaderConfig.Contract.MAXWITHDRAWAMOUNT(&_StaderConfig.CallOpts) +} + +// MAXWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0x44ba0ea2. +// +// Solidity: function MAX_WITHDRAW_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) MAXWITHDRAWAMOUNT() ([32]byte, error) { + return _StaderConfig.Contract.MAXWITHDRAWAMOUNT(&_StaderConfig.CallOpts) +} + +// MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST is a free data retrieval call binding the contract method 0x6176bbde. +// +// Solidity: function MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST is a free data retrieval call binding the contract method 0x6176bbde. +// +// Solidity: function MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST() ([32]byte, error) { + return _StaderConfig.Contract.MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST(&_StaderConfig.CallOpts) +} + +// MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST is a free data retrieval call binding the contract method 0x6176bbde. +// +// Solidity: function MIN_BLOCK_DELAY_TO_FINALIZE_WITHDRAW_REQUEST() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST() ([32]byte, error) { + return _StaderConfig.Contract.MINBLOCKDELAYTOFINALIZEWITHDRAWREQUEST(&_StaderConfig.CallOpts) +} + +// MINDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x1ea30fef. +// +// Solidity: function MIN_DEPOSIT_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) MINDEPOSITAMOUNT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "MIN_DEPOSIT_AMOUNT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MINDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x1ea30fef. +// +// Solidity: function MIN_DEPOSIT_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) MINDEPOSITAMOUNT() ([32]byte, error) { + return _StaderConfig.Contract.MINDEPOSITAMOUNT(&_StaderConfig.CallOpts) +} + +// MINDEPOSITAMOUNT is a free data retrieval call binding the contract method 0x1ea30fef. +// +// Solidity: function MIN_DEPOSIT_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) MINDEPOSITAMOUNT() ([32]byte, error) { + return _StaderConfig.Contract.MINDEPOSITAMOUNT(&_StaderConfig.CallOpts) +} + +// MINWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0xb6857844. +// +// Solidity: function MIN_WITHDRAW_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) MINWITHDRAWAMOUNT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "MIN_WITHDRAW_AMOUNT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MINWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0xb6857844. +// +// Solidity: function MIN_WITHDRAW_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) MINWITHDRAWAMOUNT() ([32]byte, error) { + return _StaderConfig.Contract.MINWITHDRAWAMOUNT(&_StaderConfig.CallOpts) +} + +// MINWITHDRAWAMOUNT is a free data retrieval call binding the contract method 0xb6857844. +// +// Solidity: function MIN_WITHDRAW_AMOUNT() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) MINWITHDRAWAMOUNT() ([32]byte, error) { + return _StaderConfig.Contract.MINWITHDRAWAMOUNT(&_StaderConfig.CallOpts) +} + +// NODEELREWARDVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x0bdf3166. +// +// Solidity: function NODE_EL_REWARD_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) NODEELREWARDVAULTIMPLEMENTATION(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "NODE_EL_REWARD_VAULT_IMPLEMENTATION") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// NODEELREWARDVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x0bdf3166. +// +// Solidity: function NODE_EL_REWARD_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) NODEELREWARDVAULTIMPLEMENTATION() ([32]byte, error) { + return _StaderConfig.Contract.NODEELREWARDVAULTIMPLEMENTATION(&_StaderConfig.CallOpts) +} + +// NODEELREWARDVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x0bdf3166. +// +// Solidity: function NODE_EL_REWARD_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) NODEELREWARDVAULTIMPLEMENTATION() ([32]byte, error) { + return _StaderConfig.Contract.NODEELREWARDVAULTIMPLEMENTATION(&_StaderConfig.CallOpts) +} + +// OPERATOR is a free data retrieval call binding the contract method 0x983d2737. +// +// Solidity: function OPERATOR() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) OPERATOR(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "OPERATOR") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATOR is a free data retrieval call binding the contract method 0x983d2737. +// +// Solidity: function OPERATOR() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) OPERATOR() ([32]byte, error) { + return _StaderConfig.Contract.OPERATOR(&_StaderConfig.CallOpts) +} + +// OPERATOR is a free data retrieval call binding the contract method 0x983d2737. +// +// Solidity: function OPERATOR() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) OPERATOR() ([32]byte, error) { + return _StaderConfig.Contract.OPERATOR(&_StaderConfig.CallOpts) +} + +// OPERATORMAXNAMELENGTH is a free data retrieval call binding the contract method 0x5455e472. +// +// Solidity: function OPERATOR_MAX_NAME_LENGTH() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) OPERATORMAXNAMELENGTH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "OPERATOR_MAX_NAME_LENGTH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORMAXNAMELENGTH is a free data retrieval call binding the contract method 0x5455e472. +// +// Solidity: function OPERATOR_MAX_NAME_LENGTH() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) OPERATORMAXNAMELENGTH() ([32]byte, error) { + return _StaderConfig.Contract.OPERATORMAXNAMELENGTH(&_StaderConfig.CallOpts) +} + +// OPERATORMAXNAMELENGTH is a free data retrieval call binding the contract method 0x5455e472. +// +// Solidity: function OPERATOR_MAX_NAME_LENGTH() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) OPERATORMAXNAMELENGTH() ([32]byte, error) { + return _StaderConfig.Contract.OPERATORMAXNAMELENGTH(&_StaderConfig.CallOpts) +} + +// OPERATORREWARDCOLLECTOR is a free data retrieval call binding the contract method 0x79175a74. +// +// Solidity: function OPERATOR_REWARD_COLLECTOR() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) OPERATORREWARDCOLLECTOR(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "OPERATOR_REWARD_COLLECTOR") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPERATORREWARDCOLLECTOR is a free data retrieval call binding the contract method 0x79175a74. +// +// Solidity: function OPERATOR_REWARD_COLLECTOR() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) OPERATORREWARDCOLLECTOR() ([32]byte, error) { + return _StaderConfig.Contract.OPERATORREWARDCOLLECTOR(&_StaderConfig.CallOpts) +} + +// OPERATORREWARDCOLLECTOR is a free data retrieval call binding the contract method 0x79175a74. +// +// Solidity: function OPERATOR_REWARD_COLLECTOR() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) OPERATORREWARDCOLLECTOR() ([32]byte, error) { + return _StaderConfig.Contract.OPERATORREWARDCOLLECTOR(&_StaderConfig.CallOpts) +} + +// PENALTYCONTRACT is a free data retrieval call binding the contract method 0x1bf6a41c. +// +// Solidity: function PENALTY_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) PENALTYCONTRACT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "PENALTY_CONTRACT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PENALTYCONTRACT is a free data retrieval call binding the contract method 0x1bf6a41c. +// +// Solidity: function PENALTY_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) PENALTYCONTRACT() ([32]byte, error) { + return _StaderConfig.Contract.PENALTYCONTRACT(&_StaderConfig.CallOpts) +} + +// PENALTYCONTRACT is a free data retrieval call binding the contract method 0x1bf6a41c. +// +// Solidity: function PENALTY_CONTRACT() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) PENALTYCONTRACT() ([32]byte, error) { + return _StaderConfig.Contract.PENALTYCONTRACT(&_StaderConfig.CallOpts) +} + +// PERMISSIONEDNODEREGISTRY is a free data retrieval call binding the contract method 0x4191e0fe. +// +// Solidity: function PERMISSIONED_NODE_REGISTRY() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) PERMISSIONEDNODEREGISTRY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONED_NODE_REGISTRY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PERMISSIONEDNODEREGISTRY is a free data retrieval call binding the contract method 0x4191e0fe. +// +// Solidity: function PERMISSIONED_NODE_REGISTRY() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) PERMISSIONEDNODEREGISTRY() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONEDNODEREGISTRY(&_StaderConfig.CallOpts) +} + +// PERMISSIONEDNODEREGISTRY is a free data retrieval call binding the contract method 0x4191e0fe. +// +// Solidity: function PERMISSIONED_NODE_REGISTRY() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) PERMISSIONEDNODEREGISTRY() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONEDNODEREGISTRY(&_StaderConfig.CallOpts) +} + +// PERMISSIONEDPOOL is a free data retrieval call binding the contract method 0x52112bd3. +// +// Solidity: function PERMISSIONED_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) PERMISSIONEDPOOL(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONED_POOL") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PERMISSIONEDPOOL is a free data retrieval call binding the contract method 0x52112bd3. +// +// Solidity: function PERMISSIONED_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) PERMISSIONEDPOOL() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONEDPOOL(&_StaderConfig.CallOpts) +} + +// PERMISSIONEDPOOL is a free data retrieval call binding the contract method 0x52112bd3. +// +// Solidity: function PERMISSIONED_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) PERMISSIONEDPOOL() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONEDPOOL(&_StaderConfig.CallOpts) +} + +// PERMISSIONEDSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x12020075. +// +// Solidity: function PERMISSIONED_SOCIALIZING_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) PERMISSIONEDSOCIALIZINGPOOL(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONED_SOCIALIZING_POOL") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PERMISSIONEDSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x12020075. +// +// Solidity: function PERMISSIONED_SOCIALIZING_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) PERMISSIONEDSOCIALIZINGPOOL() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONEDSOCIALIZINGPOOL(&_StaderConfig.CallOpts) +} + +// PERMISSIONEDSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x12020075. +// +// Solidity: function PERMISSIONED_SOCIALIZING_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) PERMISSIONEDSOCIALIZINGPOOL() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONEDSOCIALIZINGPOOL(&_StaderConfig.CallOpts) +} + +// PERMISSIONLESSNODEREGISTRY is a free data retrieval call binding the contract method 0x152a91da. +// +// Solidity: function PERMISSIONLESS_NODE_REGISTRY() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) PERMISSIONLESSNODEREGISTRY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONLESS_NODE_REGISTRY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PERMISSIONLESSNODEREGISTRY is a free data retrieval call binding the contract method 0x152a91da. +// +// Solidity: function PERMISSIONLESS_NODE_REGISTRY() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) PERMISSIONLESSNODEREGISTRY() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONLESSNODEREGISTRY(&_StaderConfig.CallOpts) +} + +// PERMISSIONLESSNODEREGISTRY is a free data retrieval call binding the contract method 0x152a91da. +// +// Solidity: function PERMISSIONLESS_NODE_REGISTRY() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) PERMISSIONLESSNODEREGISTRY() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONLESSNODEREGISTRY(&_StaderConfig.CallOpts) +} + +// PERMISSIONLESSPOOL is a free data retrieval call binding the contract method 0x7a87fa0b. +// +// Solidity: function PERMISSIONLESS_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) PERMISSIONLESSPOOL(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONLESS_POOL") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PERMISSIONLESSPOOL is a free data retrieval call binding the contract method 0x7a87fa0b. +// +// Solidity: function PERMISSIONLESS_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) PERMISSIONLESSPOOL() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONLESSPOOL(&_StaderConfig.CallOpts) +} + +// PERMISSIONLESSPOOL is a free data retrieval call binding the contract method 0x7a87fa0b. +// +// Solidity: function PERMISSIONLESS_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) PERMISSIONLESSPOOL() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONLESSPOOL(&_StaderConfig.CallOpts) +} + +// PERMISSIONLESSSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x3b6bcca0. +// +// Solidity: function PERMISSIONLESS_SOCIALIZING_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) PERMISSIONLESSSOCIALIZINGPOOL(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "PERMISSIONLESS_SOCIALIZING_POOL") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PERMISSIONLESSSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x3b6bcca0. +// +// Solidity: function PERMISSIONLESS_SOCIALIZING_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) PERMISSIONLESSSOCIALIZINGPOOL() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONLESSSOCIALIZINGPOOL(&_StaderConfig.CallOpts) +} + +// PERMISSIONLESSSOCIALIZINGPOOL is a free data retrieval call binding the contract method 0x3b6bcca0. +// +// Solidity: function PERMISSIONLESS_SOCIALIZING_POOL() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) PERMISSIONLESSSOCIALIZINGPOOL() ([32]byte, error) { + return _StaderConfig.Contract.PERMISSIONLESSSOCIALIZINGPOOL(&_StaderConfig.CallOpts) +} + +// POOLSELECTOR is a free data retrieval call binding the contract method 0xdde63e8f. +// +// Solidity: function POOL_SELECTOR() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) POOLSELECTOR(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "POOL_SELECTOR") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// POOLSELECTOR is a free data retrieval call binding the contract method 0xdde63e8f. +// +// Solidity: function POOL_SELECTOR() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) POOLSELECTOR() ([32]byte, error) { + return _StaderConfig.Contract.POOLSELECTOR(&_StaderConfig.CallOpts) +} + +// POOLSELECTOR is a free data retrieval call binding the contract method 0xdde63e8f. +// +// Solidity: function POOL_SELECTOR() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) POOLSELECTOR() ([32]byte, error) { + return _StaderConfig.Contract.POOLSELECTOR(&_StaderConfig.CallOpts) +} + +// POOLUTILS is a free data retrieval call binding the contract method 0x85e2fcd3. +// +// Solidity: function POOL_UTILS() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) POOLUTILS(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "POOL_UTILS") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// POOLUTILS is a free data retrieval call binding the contract method 0x85e2fcd3. +// +// Solidity: function POOL_UTILS() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) POOLUTILS() ([32]byte, error) { + return _StaderConfig.Contract.POOLUTILS(&_StaderConfig.CallOpts) +} + +// POOLUTILS is a free data retrieval call binding the contract method 0x85e2fcd3. +// +// Solidity: function POOL_UTILS() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) POOLUTILS() ([32]byte, error) { + return _StaderConfig.Contract.POOLUTILS(&_StaderConfig.CallOpts) +} + +// PREDEPOSITSIZE is a free data retrieval call binding the contract method 0x0430246e. +// +// Solidity: function PRE_DEPOSIT_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) PREDEPOSITSIZE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "PRE_DEPOSIT_SIZE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PREDEPOSITSIZE is a free data retrieval call binding the contract method 0x0430246e. +// +// Solidity: function PRE_DEPOSIT_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) PREDEPOSITSIZE() ([32]byte, error) { + return _StaderConfig.Contract.PREDEPOSITSIZE(&_StaderConfig.CallOpts) +} + +// PREDEPOSITSIZE is a free data retrieval call binding the contract method 0x0430246e. +// +// Solidity: function PRE_DEPOSIT_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) PREDEPOSITSIZE() ([32]byte, error) { + return _StaderConfig.Contract.PREDEPOSITSIZE(&_StaderConfig.CallOpts) +} + +// REWARDTHRESHOLD is a free data retrieval call binding the contract method 0xe7bdba32. +// +// Solidity: function REWARD_THRESHOLD() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) REWARDTHRESHOLD(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "REWARD_THRESHOLD") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// REWARDTHRESHOLD is a free data retrieval call binding the contract method 0xe7bdba32. +// +// Solidity: function REWARD_THRESHOLD() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) REWARDTHRESHOLD() ([32]byte, error) { + return _StaderConfig.Contract.REWARDTHRESHOLD(&_StaderConfig.CallOpts) +} + +// REWARDTHRESHOLD is a free data retrieval call binding the contract method 0xe7bdba32. +// +// Solidity: function REWARD_THRESHOLD() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) REWARDTHRESHOLD() ([32]byte, error) { + return _StaderConfig.Contract.REWARDTHRESHOLD(&_StaderConfig.CallOpts) +} + +// SD is a free data retrieval call binding the contract method 0x384002a2. +// +// Solidity: function SD() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) SD(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "SD") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SD is a free data retrieval call binding the contract method 0x384002a2. +// +// Solidity: function SD() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) SD() ([32]byte, error) { + return _StaderConfig.Contract.SD(&_StaderConfig.CallOpts) +} + +// SD is a free data retrieval call binding the contract method 0x384002a2. +// +// Solidity: function SD() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) SD() ([32]byte, error) { + return _StaderConfig.Contract.SD(&_StaderConfig.CallOpts) +} + +// SDCOLLATERAL is a free data retrieval call binding the contract method 0xf122961f. +// +// Solidity: function SD_COLLATERAL() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) SDCOLLATERAL(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "SD_COLLATERAL") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SDCOLLATERAL is a free data retrieval call binding the contract method 0xf122961f. +// +// Solidity: function SD_COLLATERAL() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) SDCOLLATERAL() ([32]byte, error) { + return _StaderConfig.Contract.SDCOLLATERAL(&_StaderConfig.CallOpts) +} + +// SDCOLLATERAL is a free data retrieval call binding the contract method 0xf122961f. +// +// Solidity: function SD_COLLATERAL() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) SDCOLLATERAL() ([32]byte, error) { + return _StaderConfig.Contract.SDCOLLATERAL(&_StaderConfig.CallOpts) +} + +// SOCIALIZINGPOOLCYCLEDURATION is a free data retrieval call binding the contract method 0xbedcb34c. +// +// Solidity: function SOCIALIZING_POOL_CYCLE_DURATION() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) SOCIALIZINGPOOLCYCLEDURATION(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "SOCIALIZING_POOL_CYCLE_DURATION") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SOCIALIZINGPOOLCYCLEDURATION is a free data retrieval call binding the contract method 0xbedcb34c. +// +// Solidity: function SOCIALIZING_POOL_CYCLE_DURATION() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) SOCIALIZINGPOOLCYCLEDURATION() ([32]byte, error) { + return _StaderConfig.Contract.SOCIALIZINGPOOLCYCLEDURATION(&_StaderConfig.CallOpts) +} + +// SOCIALIZINGPOOLCYCLEDURATION is a free data retrieval call binding the contract method 0xbedcb34c. +// +// Solidity: function SOCIALIZING_POOL_CYCLE_DURATION() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) SOCIALIZINGPOOLCYCLEDURATION() ([32]byte, error) { + return _StaderConfig.Contract.SOCIALIZINGPOOLCYCLEDURATION(&_StaderConfig.CallOpts) +} + +// SOCIALIZINGPOOLOPTINCOOLINGPERIOD is a free data retrieval call binding the contract method 0x686a8b67. +// +// Solidity: function SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) SOCIALIZINGPOOLOPTINCOOLINGPERIOD(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SOCIALIZINGPOOLOPTINCOOLINGPERIOD is a free data retrieval call binding the contract method 0x686a8b67. +// +// Solidity: function SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) SOCIALIZINGPOOLOPTINCOOLINGPERIOD() ([32]byte, error) { + return _StaderConfig.Contract.SOCIALIZINGPOOLOPTINCOOLINGPERIOD(&_StaderConfig.CallOpts) +} + +// SOCIALIZINGPOOLOPTINCOOLINGPERIOD is a free data retrieval call binding the contract method 0x686a8b67. +// +// Solidity: function SOCIALIZING_POOL_OPT_IN_COOLING_PERIOD() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) SOCIALIZINGPOOLOPTINCOOLINGPERIOD() ([32]byte, error) { + return _StaderConfig.Contract.SOCIALIZINGPOOLOPTINCOOLINGPERIOD(&_StaderConfig.CallOpts) +} + +// STADERINSURANCEFUND is a free data retrieval call binding the contract method 0x1af0fff3. +// +// Solidity: function STADER_INSURANCE_FUND() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) STADERINSURANCEFUND(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "STADER_INSURANCE_FUND") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// STADERINSURANCEFUND is a free data retrieval call binding the contract method 0x1af0fff3. +// +// Solidity: function STADER_INSURANCE_FUND() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) STADERINSURANCEFUND() ([32]byte, error) { + return _StaderConfig.Contract.STADERINSURANCEFUND(&_StaderConfig.CallOpts) +} + +// STADERINSURANCEFUND is a free data retrieval call binding the contract method 0x1af0fff3. +// +// Solidity: function STADER_INSURANCE_FUND() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) STADERINSURANCEFUND() ([32]byte, error) { + return _StaderConfig.Contract.STADERINSURANCEFUND(&_StaderConfig.CallOpts) +} + +// STADERORACLE is a free data retrieval call binding the contract method 0x3871d0f1. +// +// Solidity: function STADER_ORACLE() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) STADERORACLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "STADER_ORACLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// STADERORACLE is a free data retrieval call binding the contract method 0x3871d0f1. +// +// Solidity: function STADER_ORACLE() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) STADERORACLE() ([32]byte, error) { + return _StaderConfig.Contract.STADERORACLE(&_StaderConfig.CallOpts) +} + +// STADERORACLE is a free data retrieval call binding the contract method 0x3871d0f1. +// +// Solidity: function STADER_ORACLE() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) STADERORACLE() ([32]byte, error) { + return _StaderConfig.Contract.STADERORACLE(&_StaderConfig.CallOpts) +} + +// STADERTREASURY is a free data retrieval call binding the contract method 0x841b83b3. +// +// Solidity: function STADER_TREASURY() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) STADERTREASURY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "STADER_TREASURY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// STADERTREASURY is a free data retrieval call binding the contract method 0x841b83b3. +// +// Solidity: function STADER_TREASURY() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) STADERTREASURY() ([32]byte, error) { + return _StaderConfig.Contract.STADERTREASURY(&_StaderConfig.CallOpts) +} + +// STADERTREASURY is a free data retrieval call binding the contract method 0x841b83b3. +// +// Solidity: function STADER_TREASURY() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) STADERTREASURY() ([32]byte, error) { + return _StaderConfig.Contract.STADERTREASURY(&_StaderConfig.CallOpts) +} + +// STAKEPOOLMANAGER is a free data retrieval call binding the contract method 0xa53bddd6. +// +// Solidity: function STAKE_POOL_MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) STAKEPOOLMANAGER(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "STAKE_POOL_MANAGER") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// STAKEPOOLMANAGER is a free data retrieval call binding the contract method 0xa53bddd6. +// +// Solidity: function STAKE_POOL_MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) STAKEPOOLMANAGER() ([32]byte, error) { + return _StaderConfig.Contract.STAKEPOOLMANAGER(&_StaderConfig.CallOpts) +} + +// STAKEPOOLMANAGER is a free data retrieval call binding the contract method 0xa53bddd6. +// +// Solidity: function STAKE_POOL_MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) STAKEPOOLMANAGER() ([32]byte, error) { + return _StaderConfig.Contract.STAKEPOOLMANAGER(&_StaderConfig.CallOpts) +} + +// TOTALFEE is a free data retrieval call binding the contract method 0x63db7eae. +// +// Solidity: function TOTAL_FEE() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) TOTALFEE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "TOTAL_FEE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// TOTALFEE is a free data retrieval call binding the contract method 0x63db7eae. +// +// Solidity: function TOTAL_FEE() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) TOTALFEE() ([32]byte, error) { + return _StaderConfig.Contract.TOTALFEE(&_StaderConfig.CallOpts) +} + +// TOTALFEE is a free data retrieval call binding the contract method 0x63db7eae. +// +// Solidity: function TOTAL_FEE() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) TOTALFEE() ([32]byte, error) { + return _StaderConfig.Contract.TOTALFEE(&_StaderConfig.CallOpts) +} + +// USERWITHDRAWMANAGER is a free data retrieval call binding the contract method 0x36854d63. +// +// Solidity: function USER_WITHDRAW_MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) USERWITHDRAWMANAGER(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "USER_WITHDRAW_MANAGER") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// USERWITHDRAWMANAGER is a free data retrieval call binding the contract method 0x36854d63. +// +// Solidity: function USER_WITHDRAW_MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) USERWITHDRAWMANAGER() ([32]byte, error) { + return _StaderConfig.Contract.USERWITHDRAWMANAGER(&_StaderConfig.CallOpts) +} + +// USERWITHDRAWMANAGER is a free data retrieval call binding the contract method 0x36854d63. +// +// Solidity: function USER_WITHDRAW_MANAGER() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) USERWITHDRAWMANAGER() ([32]byte, error) { + return _StaderConfig.Contract.USERWITHDRAWMANAGER(&_StaderConfig.CallOpts) +} + +// VALIDATORWITHDRAWALVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x1c55cccd. +// +// Solidity: function VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) VALIDATORWITHDRAWALVAULTIMPLEMENTATION(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// VALIDATORWITHDRAWALVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x1c55cccd. +// +// Solidity: function VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) VALIDATORWITHDRAWALVAULTIMPLEMENTATION() ([32]byte, error) { + return _StaderConfig.Contract.VALIDATORWITHDRAWALVAULTIMPLEMENTATION(&_StaderConfig.CallOpts) +} + +// VALIDATORWITHDRAWALVAULTIMPLEMENTATION is a free data retrieval call binding the contract method 0x1c55cccd. +// +// Solidity: function VALIDATOR_WITHDRAWAL_VAULT_IMPLEMENTATION() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) VALIDATORWITHDRAWALVAULTIMPLEMENTATION() ([32]byte, error) { + return _StaderConfig.Contract.VALIDATORWITHDRAWALVAULTIMPLEMENTATION(&_StaderConfig.CallOpts) +} + +// VAULTFACTORY is a free data retrieval call binding the contract method 0x103f2907. +// +// Solidity: function VAULT_FACTORY() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) VAULTFACTORY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "VAULT_FACTORY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// VAULTFACTORY is a free data retrieval call binding the contract method 0x103f2907. +// +// Solidity: function VAULT_FACTORY() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) VAULTFACTORY() ([32]byte, error) { + return _StaderConfig.Contract.VAULTFACTORY(&_StaderConfig.CallOpts) +} + +// VAULTFACTORY is a free data retrieval call binding the contract method 0x103f2907. +// +// Solidity: function VAULT_FACTORY() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) VAULTFACTORY() ([32]byte, error) { + return _StaderConfig.Contract.VAULTFACTORY(&_StaderConfig.CallOpts) +} + +// WITHDRAWNKEYSBATCHSIZE is a free data retrieval call binding the contract method 0x88993d8b. +// +// Solidity: function WITHDRAWN_KEYS_BATCH_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) WITHDRAWNKEYSBATCHSIZE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "WITHDRAWN_KEYS_BATCH_SIZE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// WITHDRAWNKEYSBATCHSIZE is a free data retrieval call binding the contract method 0x88993d8b. +// +// Solidity: function WITHDRAWN_KEYS_BATCH_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigSession) WITHDRAWNKEYSBATCHSIZE() ([32]byte, error) { + return _StaderConfig.Contract.WITHDRAWNKEYSBATCHSIZE(&_StaderConfig.CallOpts) +} + +// WITHDRAWNKEYSBATCHSIZE is a free data retrieval call binding the contract method 0x88993d8b. +// +// Solidity: function WITHDRAWN_KEYS_BATCH_SIZE() view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) WITHDRAWNKEYSBATCHSIZE() ([32]byte, error) { + return _StaderConfig.Contract.WITHDRAWNKEYSBATCHSIZE(&_StaderConfig.CallOpts) +} + +// GetAdmin is a free data retrieval call binding the contract method 0x6e9960c3. +// +// Solidity: function getAdmin() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetAdmin(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getAdmin") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetAdmin is a free data retrieval call binding the contract method 0x6e9960c3. +// +// Solidity: function getAdmin() view returns(address) +func (_StaderConfig *StaderConfigSession) GetAdmin() (common.Address, error) { + return _StaderConfig.Contract.GetAdmin(&_StaderConfig.CallOpts) +} + +// GetAdmin is a free data retrieval call binding the contract method 0x6e9960c3. +// +// Solidity: function getAdmin() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetAdmin() (common.Address, error) { + return _StaderConfig.Contract.GetAdmin(&_StaderConfig.CallOpts) +} + +// GetAuctionContract is a free data retrieval call binding the contract method 0x36c157f4. +// +// Solidity: function getAuctionContract() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetAuctionContract(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getAuctionContract") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetAuctionContract is a free data retrieval call binding the contract method 0x36c157f4. +// +// Solidity: function getAuctionContract() view returns(address) +func (_StaderConfig *StaderConfigSession) GetAuctionContract() (common.Address, error) { + return _StaderConfig.Contract.GetAuctionContract(&_StaderConfig.CallOpts) +} + +// GetAuctionContract is a free data retrieval call binding the contract method 0x36c157f4. +// +// Solidity: function getAuctionContract() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetAuctionContract() (common.Address, error) { + return _StaderConfig.Contract.GetAuctionContract(&_StaderConfig.CallOpts) +} + +// GetDecimals is a free data retrieval call binding the contract method 0xf0141d84. +// +// Solidity: function getDecimals() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetDecimals(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getDecimals") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetDecimals is a free data retrieval call binding the contract method 0xf0141d84. +// +// Solidity: function getDecimals() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetDecimals() (*big.Int, error) { + return _StaderConfig.Contract.GetDecimals(&_StaderConfig.CallOpts) +} + +// GetDecimals is a free data retrieval call binding the contract method 0xf0141d84. +// +// Solidity: function getDecimals() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetDecimals() (*big.Int, error) { + return _StaderConfig.Contract.GetDecimals(&_StaderConfig.CallOpts) +} + +// GetETHBalancePORFeedProxy is a free data retrieval call binding the contract method 0x489ed651. +// +// Solidity: function getETHBalancePORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetETHBalancePORFeedProxy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getETHBalancePORFeedProxy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetETHBalancePORFeedProxy is a free data retrieval call binding the contract method 0x489ed651. +// +// Solidity: function getETHBalancePORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigSession) GetETHBalancePORFeedProxy() (common.Address, error) { + return _StaderConfig.Contract.GetETHBalancePORFeedProxy(&_StaderConfig.CallOpts) +} + +// GetETHBalancePORFeedProxy is a free data retrieval call binding the contract method 0x489ed651. +// +// Solidity: function getETHBalancePORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetETHBalancePORFeedProxy() (common.Address, error) { + return _StaderConfig.Contract.GetETHBalancePORFeedProxy(&_StaderConfig.CallOpts) +} + +// GetETHDepositContract is a free data retrieval call binding the contract method 0x8f8b3867. +// +// Solidity: function getETHDepositContract() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetETHDepositContract(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getETHDepositContract") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetETHDepositContract is a free data retrieval call binding the contract method 0x8f8b3867. +// +// Solidity: function getETHDepositContract() view returns(address) +func (_StaderConfig *StaderConfigSession) GetETHDepositContract() (common.Address, error) { + return _StaderConfig.Contract.GetETHDepositContract(&_StaderConfig.CallOpts) +} + +// GetETHDepositContract is a free data retrieval call binding the contract method 0x8f8b3867. +// +// Solidity: function getETHDepositContract() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetETHDepositContract() (common.Address, error) { + return _StaderConfig.Contract.GetETHDepositContract(&_StaderConfig.CallOpts) +} + +// GetETHXSupplyPORFeedProxy is a free data retrieval call binding the contract method 0x2ca03f66. +// +// Solidity: function getETHXSupplyPORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetETHXSupplyPORFeedProxy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getETHXSupplyPORFeedProxy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetETHXSupplyPORFeedProxy is a free data retrieval call binding the contract method 0x2ca03f66. +// +// Solidity: function getETHXSupplyPORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigSession) GetETHXSupplyPORFeedProxy() (common.Address, error) { + return _StaderConfig.Contract.GetETHXSupplyPORFeedProxy(&_StaderConfig.CallOpts) +} + +// GetETHXSupplyPORFeedProxy is a free data retrieval call binding the contract method 0x2ca03f66. +// +// Solidity: function getETHXSupplyPORFeedProxy() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetETHXSupplyPORFeedProxy() (common.Address, error) { + return _StaderConfig.Contract.GetETHXSupplyPORFeedProxy(&_StaderConfig.CallOpts) +} + +// GetETHxToken is a free data retrieval call binding the contract method 0xcc45dabe. +// +// Solidity: function getETHxToken() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetETHxToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getETHxToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetETHxToken is a free data retrieval call binding the contract method 0xcc45dabe. +// +// Solidity: function getETHxToken() view returns(address) +func (_StaderConfig *StaderConfigSession) GetETHxToken() (common.Address, error) { + return _StaderConfig.Contract.GetETHxToken(&_StaderConfig.CallOpts) +} + +// GetETHxToken is a free data retrieval call binding the contract method 0xcc45dabe. +// +// Solidity: function getETHxToken() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetETHxToken() (common.Address, error) { + return _StaderConfig.Contract.GetETHxToken(&_StaderConfig.CallOpts) +} + +// GetFullDepositSize is a free data retrieval call binding the contract method 0xfa71fcbb. +// +// Solidity: function getFullDepositSize() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetFullDepositSize(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getFullDepositSize") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetFullDepositSize is a free data retrieval call binding the contract method 0xfa71fcbb. +// +// Solidity: function getFullDepositSize() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetFullDepositSize() (*big.Int, error) { + return _StaderConfig.Contract.GetFullDepositSize(&_StaderConfig.CallOpts) +} + +// GetFullDepositSize is a free data retrieval call binding the contract method 0xfa71fcbb. +// +// Solidity: function getFullDepositSize() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetFullDepositSize() (*big.Int, error) { + return _StaderConfig.Contract.GetFullDepositSize(&_StaderConfig.CallOpts) +} + +// GetMaxDepositAmount is a free data retrieval call binding the contract method 0x5726a356. +// +// Solidity: function getMaxDepositAmount() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetMaxDepositAmount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getMaxDepositAmount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetMaxDepositAmount is a free data retrieval call binding the contract method 0x5726a356. +// +// Solidity: function getMaxDepositAmount() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetMaxDepositAmount() (*big.Int, error) { + return _StaderConfig.Contract.GetMaxDepositAmount(&_StaderConfig.CallOpts) +} + +// GetMaxDepositAmount is a free data retrieval call binding the contract method 0x5726a356. +// +// Solidity: function getMaxDepositAmount() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetMaxDepositAmount() (*big.Int, error) { + return _StaderConfig.Contract.GetMaxDepositAmount(&_StaderConfig.CallOpts) +} + +// GetMaxWithdrawAmount is a free data retrieval call binding the contract method 0x326a16a3. +// +// Solidity: function getMaxWithdrawAmount() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetMaxWithdrawAmount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getMaxWithdrawAmount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetMaxWithdrawAmount is a free data retrieval call binding the contract method 0x326a16a3. +// +// Solidity: function getMaxWithdrawAmount() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetMaxWithdrawAmount() (*big.Int, error) { + return _StaderConfig.Contract.GetMaxWithdrawAmount(&_StaderConfig.CallOpts) +} + +// GetMaxWithdrawAmount is a free data retrieval call binding the contract method 0x326a16a3. +// +// Solidity: function getMaxWithdrawAmount() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetMaxWithdrawAmount() (*big.Int, error) { + return _StaderConfig.Contract.GetMaxWithdrawAmount(&_StaderConfig.CallOpts) +} + +// GetMinBlockDelayToFinalizeWithdrawRequest is a free data retrieval call binding the contract method 0xd2cee8ba. +// +// Solidity: function getMinBlockDelayToFinalizeWithdrawRequest() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetMinBlockDelayToFinalizeWithdrawRequest(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getMinBlockDelayToFinalizeWithdrawRequest") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetMinBlockDelayToFinalizeWithdrawRequest is a free data retrieval call binding the contract method 0xd2cee8ba. +// +// Solidity: function getMinBlockDelayToFinalizeWithdrawRequest() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetMinBlockDelayToFinalizeWithdrawRequest() (*big.Int, error) { + return _StaderConfig.Contract.GetMinBlockDelayToFinalizeWithdrawRequest(&_StaderConfig.CallOpts) +} + +// GetMinBlockDelayToFinalizeWithdrawRequest is a free data retrieval call binding the contract method 0xd2cee8ba. +// +// Solidity: function getMinBlockDelayToFinalizeWithdrawRequest() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetMinBlockDelayToFinalizeWithdrawRequest() (*big.Int, error) { + return _StaderConfig.Contract.GetMinBlockDelayToFinalizeWithdrawRequest(&_StaderConfig.CallOpts) +} + +// GetMinDepositAmount is a free data retrieval call binding the contract method 0xf4914d33. +// +// Solidity: function getMinDepositAmount() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetMinDepositAmount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getMinDepositAmount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetMinDepositAmount is a free data retrieval call binding the contract method 0xf4914d33. +// +// Solidity: function getMinDepositAmount() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetMinDepositAmount() (*big.Int, error) { + return _StaderConfig.Contract.GetMinDepositAmount(&_StaderConfig.CallOpts) +} + +// GetMinDepositAmount is a free data retrieval call binding the contract method 0xf4914d33. +// +// Solidity: function getMinDepositAmount() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetMinDepositAmount() (*big.Int, error) { + return _StaderConfig.Contract.GetMinDepositAmount(&_StaderConfig.CallOpts) +} + +// GetMinWithdrawAmount is a free data retrieval call binding the contract method 0x14e1b8fd. +// +// Solidity: function getMinWithdrawAmount() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetMinWithdrawAmount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getMinWithdrawAmount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetMinWithdrawAmount is a free data retrieval call binding the contract method 0x14e1b8fd. +// +// Solidity: function getMinWithdrawAmount() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetMinWithdrawAmount() (*big.Int, error) { + return _StaderConfig.Contract.GetMinWithdrawAmount(&_StaderConfig.CallOpts) +} + +// GetMinWithdrawAmount is a free data retrieval call binding the contract method 0x14e1b8fd. +// +// Solidity: function getMinWithdrawAmount() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetMinWithdrawAmount() (*big.Int, error) { + return _StaderConfig.Contract.GetMinWithdrawAmount(&_StaderConfig.CallOpts) +} + +// GetNodeELRewardVaultImplementation is a free data retrieval call binding the contract method 0xe8fe1873. +// +// Solidity: function getNodeELRewardVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetNodeELRewardVaultImplementation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getNodeELRewardVaultImplementation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetNodeELRewardVaultImplementation is a free data retrieval call binding the contract method 0xe8fe1873. +// +// Solidity: function getNodeELRewardVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigSession) GetNodeELRewardVaultImplementation() (common.Address, error) { + return _StaderConfig.Contract.GetNodeELRewardVaultImplementation(&_StaderConfig.CallOpts) +} + +// GetNodeELRewardVaultImplementation is a free data retrieval call binding the contract method 0xe8fe1873. +// +// Solidity: function getNodeELRewardVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetNodeELRewardVaultImplementation() (common.Address, error) { + return _StaderConfig.Contract.GetNodeELRewardVaultImplementation(&_StaderConfig.CallOpts) +} + +// GetOperatorMaxNameLength is a free data retrieval call binding the contract method 0x10deba2b. +// +// Solidity: function getOperatorMaxNameLength() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetOperatorMaxNameLength(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getOperatorMaxNameLength") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetOperatorMaxNameLength is a free data retrieval call binding the contract method 0x10deba2b. +// +// Solidity: function getOperatorMaxNameLength() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetOperatorMaxNameLength() (*big.Int, error) { + return _StaderConfig.Contract.GetOperatorMaxNameLength(&_StaderConfig.CallOpts) +} + +// GetOperatorMaxNameLength is a free data retrieval call binding the contract method 0x10deba2b. +// +// Solidity: function getOperatorMaxNameLength() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetOperatorMaxNameLength() (*big.Int, error) { + return _StaderConfig.Contract.GetOperatorMaxNameLength(&_StaderConfig.CallOpts) +} + +// GetOperatorRewardsCollector is a free data retrieval call binding the contract method 0x278671bb. +// +// Solidity: function getOperatorRewardsCollector() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetOperatorRewardsCollector(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getOperatorRewardsCollector") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetOperatorRewardsCollector is a free data retrieval call binding the contract method 0x278671bb. +// +// Solidity: function getOperatorRewardsCollector() view returns(address) +func (_StaderConfig *StaderConfigSession) GetOperatorRewardsCollector() (common.Address, error) { + return _StaderConfig.Contract.GetOperatorRewardsCollector(&_StaderConfig.CallOpts) +} + +// GetOperatorRewardsCollector is a free data retrieval call binding the contract method 0x278671bb. +// +// Solidity: function getOperatorRewardsCollector() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetOperatorRewardsCollector() (common.Address, error) { + return _StaderConfig.Contract.GetOperatorRewardsCollector(&_StaderConfig.CallOpts) +} + +// GetPenaltyContract is a free data retrieval call binding the contract method 0x8910115c. +// +// Solidity: function getPenaltyContract() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPenaltyContract(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPenaltyContract") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPenaltyContract is a free data retrieval call binding the contract method 0x8910115c. +// +// Solidity: function getPenaltyContract() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPenaltyContract() (common.Address, error) { + return _StaderConfig.Contract.GetPenaltyContract(&_StaderConfig.CallOpts) +} + +// GetPenaltyContract is a free data retrieval call binding the contract method 0x8910115c. +// +// Solidity: function getPenaltyContract() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPenaltyContract() (common.Address, error) { + return _StaderConfig.Contract.GetPenaltyContract(&_StaderConfig.CallOpts) +} + +// GetPermissionedNodeRegistry is a free data retrieval call binding the contract method 0x5edc686e. +// +// Solidity: function getPermissionedNodeRegistry() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPermissionedNodeRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPermissionedNodeRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPermissionedNodeRegistry is a free data retrieval call binding the contract method 0x5edc686e. +// +// Solidity: function getPermissionedNodeRegistry() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPermissionedNodeRegistry() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionedNodeRegistry(&_StaderConfig.CallOpts) +} + +// GetPermissionedNodeRegistry is a free data retrieval call binding the contract method 0x5edc686e. +// +// Solidity: function getPermissionedNodeRegistry() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPermissionedNodeRegistry() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionedNodeRegistry(&_StaderConfig.CallOpts) +} + +// GetPermissionedPool is a free data retrieval call binding the contract method 0xa0b4079f. +// +// Solidity: function getPermissionedPool() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPermissionedPool(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPermissionedPool") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPermissionedPool is a free data retrieval call binding the contract method 0xa0b4079f. +// +// Solidity: function getPermissionedPool() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPermissionedPool() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionedPool(&_StaderConfig.CallOpts) +} + +// GetPermissionedPool is a free data retrieval call binding the contract method 0xa0b4079f. +// +// Solidity: function getPermissionedPool() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPermissionedPool() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionedPool(&_StaderConfig.CallOpts) +} + +// GetPermissionedSocializingPool is a free data retrieval call binding the contract method 0xa469e247. +// +// Solidity: function getPermissionedSocializingPool() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPermissionedSocializingPool(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPermissionedSocializingPool") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPermissionedSocializingPool is a free data retrieval call binding the contract method 0xa469e247. +// +// Solidity: function getPermissionedSocializingPool() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPermissionedSocializingPool() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionedSocializingPool(&_StaderConfig.CallOpts) +} + +// GetPermissionedSocializingPool is a free data retrieval call binding the contract method 0xa469e247. +// +// Solidity: function getPermissionedSocializingPool() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPermissionedSocializingPool() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionedSocializingPool(&_StaderConfig.CallOpts) +} + +// GetPermissionlessNodeRegistry is a free data retrieval call binding the contract method 0x360374a4. +// +// Solidity: function getPermissionlessNodeRegistry() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPermissionlessNodeRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPermissionlessNodeRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPermissionlessNodeRegistry is a free data retrieval call binding the contract method 0x360374a4. +// +// Solidity: function getPermissionlessNodeRegistry() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPermissionlessNodeRegistry() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionlessNodeRegistry(&_StaderConfig.CallOpts) +} + +// GetPermissionlessNodeRegistry is a free data retrieval call binding the contract method 0x360374a4. +// +// Solidity: function getPermissionlessNodeRegistry() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPermissionlessNodeRegistry() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionlessNodeRegistry(&_StaderConfig.CallOpts) +} + +// GetPermissionlessPool is a free data retrieval call binding the contract method 0x9ca76b73. +// +// Solidity: function getPermissionlessPool() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPermissionlessPool(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPermissionlessPool") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPermissionlessPool is a free data retrieval call binding the contract method 0x9ca76b73. +// +// Solidity: function getPermissionlessPool() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPermissionlessPool() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionlessPool(&_StaderConfig.CallOpts) +} + +// GetPermissionlessPool is a free data retrieval call binding the contract method 0x9ca76b73. +// +// Solidity: function getPermissionlessPool() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPermissionlessPool() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionlessPool(&_StaderConfig.CallOpts) +} + +// GetPermissionlessSocializingPool is a free data retrieval call binding the contract method 0x0a3fbd9a. +// +// Solidity: function getPermissionlessSocializingPool() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPermissionlessSocializingPool(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPermissionlessSocializingPool") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPermissionlessSocializingPool is a free data retrieval call binding the contract method 0x0a3fbd9a. +// +// Solidity: function getPermissionlessSocializingPool() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPermissionlessSocializingPool() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionlessSocializingPool(&_StaderConfig.CallOpts) +} + +// GetPermissionlessSocializingPool is a free data retrieval call binding the contract method 0x0a3fbd9a. +// +// Solidity: function getPermissionlessSocializingPool() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPermissionlessSocializingPool() (common.Address, error) { + return _StaderConfig.Contract.GetPermissionlessSocializingPool(&_StaderConfig.CallOpts) +} + +// GetPoolSelector is a free data retrieval call binding the contract method 0x5458a106. +// +// Solidity: function getPoolSelector() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPoolSelector(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPoolSelector") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPoolSelector is a free data retrieval call binding the contract method 0x5458a106. +// +// Solidity: function getPoolSelector() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPoolSelector() (common.Address, error) { + return _StaderConfig.Contract.GetPoolSelector(&_StaderConfig.CallOpts) +} + +// GetPoolSelector is a free data retrieval call binding the contract method 0x5458a106. +// +// Solidity: function getPoolSelector() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPoolSelector() (common.Address, error) { + return _StaderConfig.Contract.GetPoolSelector(&_StaderConfig.CallOpts) +} + +// GetPoolUtils is a free data retrieval call binding the contract method 0x6ccb9d70. +// +// Solidity: function getPoolUtils() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetPoolUtils(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPoolUtils") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetPoolUtils is a free data retrieval call binding the contract method 0x6ccb9d70. +// +// Solidity: function getPoolUtils() view returns(address) +func (_StaderConfig *StaderConfigSession) GetPoolUtils() (common.Address, error) { + return _StaderConfig.Contract.GetPoolUtils(&_StaderConfig.CallOpts) +} + +// GetPoolUtils is a free data retrieval call binding the contract method 0x6ccb9d70. +// +// Solidity: function getPoolUtils() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetPoolUtils() (common.Address, error) { + return _StaderConfig.Contract.GetPoolUtils(&_StaderConfig.CallOpts) +} + +// GetPreDepositSize is a free data retrieval call binding the contract method 0x08297645. +// +// Solidity: function getPreDepositSize() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetPreDepositSize(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getPreDepositSize") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetPreDepositSize is a free data retrieval call binding the contract method 0x08297645. +// +// Solidity: function getPreDepositSize() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetPreDepositSize() (*big.Int, error) { + return _StaderConfig.Contract.GetPreDepositSize(&_StaderConfig.CallOpts) +} + +// GetPreDepositSize is a free data retrieval call binding the contract method 0x08297645. +// +// Solidity: function getPreDepositSize() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetPreDepositSize() (*big.Int, error) { + return _StaderConfig.Contract.GetPreDepositSize(&_StaderConfig.CallOpts) +} + +// GetRewardsThreshold is a free data retrieval call binding the contract method 0x18829fc3. +// +// Solidity: function getRewardsThreshold() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetRewardsThreshold(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getRewardsThreshold") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetRewardsThreshold is a free data retrieval call binding the contract method 0x18829fc3. +// +// Solidity: function getRewardsThreshold() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetRewardsThreshold() (*big.Int, error) { + return _StaderConfig.Contract.GetRewardsThreshold(&_StaderConfig.CallOpts) +} + +// GetRewardsThreshold is a free data retrieval call binding the contract method 0x18829fc3. +// +// Solidity: function getRewardsThreshold() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetRewardsThreshold() (*big.Int, error) { + return _StaderConfig.Contract.GetRewardsThreshold(&_StaderConfig.CallOpts) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_StaderConfig *StaderConfigCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_StaderConfig *StaderConfigSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _StaderConfig.Contract.GetRoleAdmin(&_StaderConfig.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_StaderConfig *StaderConfigCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _StaderConfig.Contract.GetRoleAdmin(&_StaderConfig.CallOpts, role) +} + +// GetSDCollateral is a free data retrieval call binding the contract method 0xaa953795. +// +// Solidity: function getSDCollateral() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetSDCollateral(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getSDCollateral") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetSDCollateral is a free data retrieval call binding the contract method 0xaa953795. +// +// Solidity: function getSDCollateral() view returns(address) +func (_StaderConfig *StaderConfigSession) GetSDCollateral() (common.Address, error) { + return _StaderConfig.Contract.GetSDCollateral(&_StaderConfig.CallOpts) +} + +// GetSDCollateral is a free data retrieval call binding the contract method 0xaa953795. +// +// Solidity: function getSDCollateral() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetSDCollateral() (common.Address, error) { + return _StaderConfig.Contract.GetSDCollateral(&_StaderConfig.CallOpts) +} + +// GetSocializingPoolCycleDuration is a free data retrieval call binding the contract method 0x1ca197a5. +// +// Solidity: function getSocializingPoolCycleDuration() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetSocializingPoolCycleDuration(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getSocializingPoolCycleDuration") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetSocializingPoolCycleDuration is a free data retrieval call binding the contract method 0x1ca197a5. +// +// Solidity: function getSocializingPoolCycleDuration() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetSocializingPoolCycleDuration() (*big.Int, error) { + return _StaderConfig.Contract.GetSocializingPoolCycleDuration(&_StaderConfig.CallOpts) +} + +// GetSocializingPoolCycleDuration is a free data retrieval call binding the contract method 0x1ca197a5. +// +// Solidity: function getSocializingPoolCycleDuration() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetSocializingPoolCycleDuration() (*big.Int, error) { + return _StaderConfig.Contract.GetSocializingPoolCycleDuration(&_StaderConfig.CallOpts) +} + +// GetSocializingPoolOptInCoolingPeriod is a free data retrieval call binding the contract method 0x6e0fddfc. +// +// Solidity: function getSocializingPoolOptInCoolingPeriod() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetSocializingPoolOptInCoolingPeriod(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getSocializingPoolOptInCoolingPeriod") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetSocializingPoolOptInCoolingPeriod is a free data retrieval call binding the contract method 0x6e0fddfc. +// +// Solidity: function getSocializingPoolOptInCoolingPeriod() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetSocializingPoolOptInCoolingPeriod() (*big.Int, error) { + return _StaderConfig.Contract.GetSocializingPoolOptInCoolingPeriod(&_StaderConfig.CallOpts) +} + +// GetSocializingPoolOptInCoolingPeriod is a free data retrieval call binding the contract method 0x6e0fddfc. +// +// Solidity: function getSocializingPoolOptInCoolingPeriod() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetSocializingPoolOptInCoolingPeriod() (*big.Int, error) { + return _StaderConfig.Contract.GetSocializingPoolOptInCoolingPeriod(&_StaderConfig.CallOpts) +} + +// GetStaderInsuranceFund is a free data retrieval call binding the contract method 0xb5cfee6c. +// +// Solidity: function getStaderInsuranceFund() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetStaderInsuranceFund(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getStaderInsuranceFund") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetStaderInsuranceFund is a free data retrieval call binding the contract method 0xb5cfee6c. +// +// Solidity: function getStaderInsuranceFund() view returns(address) +func (_StaderConfig *StaderConfigSession) GetStaderInsuranceFund() (common.Address, error) { + return _StaderConfig.Contract.GetStaderInsuranceFund(&_StaderConfig.CallOpts) +} + +// GetStaderInsuranceFund is a free data retrieval call binding the contract method 0xb5cfee6c. +// +// Solidity: function getStaderInsuranceFund() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetStaderInsuranceFund() (common.Address, error) { + return _StaderConfig.Contract.GetStaderInsuranceFund(&_StaderConfig.CallOpts) +} + +// GetStaderOracle is a free data retrieval call binding the contract method 0xdefd024d. +// +// Solidity: function getStaderOracle() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetStaderOracle(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getStaderOracle") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetStaderOracle is a free data retrieval call binding the contract method 0xdefd024d. +// +// Solidity: function getStaderOracle() view returns(address) +func (_StaderConfig *StaderConfigSession) GetStaderOracle() (common.Address, error) { + return _StaderConfig.Contract.GetStaderOracle(&_StaderConfig.CallOpts) +} + +// GetStaderOracle is a free data retrieval call binding the contract method 0xdefd024d. +// +// Solidity: function getStaderOracle() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetStaderOracle() (common.Address, error) { + return _StaderConfig.Contract.GetStaderOracle(&_StaderConfig.CallOpts) +} + +// GetStaderToken is a free data retrieval call binding the contract method 0xe069f714. +// +// Solidity: function getStaderToken() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetStaderToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getStaderToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetStaderToken is a free data retrieval call binding the contract method 0xe069f714. +// +// Solidity: function getStaderToken() view returns(address) +func (_StaderConfig *StaderConfigSession) GetStaderToken() (common.Address, error) { + return _StaderConfig.Contract.GetStaderToken(&_StaderConfig.CallOpts) +} + +// GetStaderToken is a free data retrieval call binding the contract method 0xe069f714. +// +// Solidity: function getStaderToken() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetStaderToken() (common.Address, error) { + return _StaderConfig.Contract.GetStaderToken(&_StaderConfig.CallOpts) +} + +// GetStaderTreasury is a free data retrieval call binding the contract method 0x72ce78b0. +// +// Solidity: function getStaderTreasury() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetStaderTreasury(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getStaderTreasury") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetStaderTreasury is a free data retrieval call binding the contract method 0x72ce78b0. +// +// Solidity: function getStaderTreasury() view returns(address) +func (_StaderConfig *StaderConfigSession) GetStaderTreasury() (common.Address, error) { + return _StaderConfig.Contract.GetStaderTreasury(&_StaderConfig.CallOpts) +} + +// GetStaderTreasury is a free data retrieval call binding the contract method 0x72ce78b0. +// +// Solidity: function getStaderTreasury() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetStaderTreasury() (common.Address, error) { + return _StaderConfig.Contract.GetStaderTreasury(&_StaderConfig.CallOpts) +} + +// GetStakePoolManager is a free data retrieval call binding the contract method 0x2ec5e018. +// +// Solidity: function getStakePoolManager() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetStakePoolManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getStakePoolManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetStakePoolManager is a free data retrieval call binding the contract method 0x2ec5e018. +// +// Solidity: function getStakePoolManager() view returns(address) +func (_StaderConfig *StaderConfigSession) GetStakePoolManager() (common.Address, error) { + return _StaderConfig.Contract.GetStakePoolManager(&_StaderConfig.CallOpts) +} + +// GetStakePoolManager is a free data retrieval call binding the contract method 0x2ec5e018. +// +// Solidity: function getStakePoolManager() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetStakePoolManager() (common.Address, error) { + return _StaderConfig.Contract.GetStakePoolManager(&_StaderConfig.CallOpts) +} + +// GetStakedEthPerNode is a free data retrieval call binding the contract method 0xff387f3a. +// +// Solidity: function getStakedEthPerNode() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetStakedEthPerNode(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getStakedEthPerNode") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetStakedEthPerNode is a free data retrieval call binding the contract method 0xff387f3a. +// +// Solidity: function getStakedEthPerNode() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetStakedEthPerNode() (*big.Int, error) { + return _StaderConfig.Contract.GetStakedEthPerNode(&_StaderConfig.CallOpts) +} + +// GetStakedEthPerNode is a free data retrieval call binding the contract method 0xff387f3a. +// +// Solidity: function getStakedEthPerNode() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetStakedEthPerNode() (*big.Int, error) { + return _StaderConfig.Contract.GetStakedEthPerNode(&_StaderConfig.CallOpts) +} + +// GetTotalFee is a free data retrieval call binding the contract method 0x7ae316d0. +// +// Solidity: function getTotalFee() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetTotalFee(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getTotalFee") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetTotalFee is a free data retrieval call binding the contract method 0x7ae316d0. +// +// Solidity: function getTotalFee() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetTotalFee() (*big.Int, error) { + return _StaderConfig.Contract.GetTotalFee(&_StaderConfig.CallOpts) +} + +// GetTotalFee is a free data retrieval call binding the contract method 0x7ae316d0. +// +// Solidity: function getTotalFee() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetTotalFee() (*big.Int, error) { + return _StaderConfig.Contract.GetTotalFee(&_StaderConfig.CallOpts) +} + +// GetUserWithdrawManager is a free data retrieval call binding the contract method 0xecf170a8. +// +// Solidity: function getUserWithdrawManager() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetUserWithdrawManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getUserWithdrawManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetUserWithdrawManager is a free data retrieval call binding the contract method 0xecf170a8. +// +// Solidity: function getUserWithdrawManager() view returns(address) +func (_StaderConfig *StaderConfigSession) GetUserWithdrawManager() (common.Address, error) { + return _StaderConfig.Contract.GetUserWithdrawManager(&_StaderConfig.CallOpts) +} + +// GetUserWithdrawManager is a free data retrieval call binding the contract method 0xecf170a8. +// +// Solidity: function getUserWithdrawManager() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetUserWithdrawManager() (common.Address, error) { + return _StaderConfig.Contract.GetUserWithdrawManager(&_StaderConfig.CallOpts) +} + +// GetValidatorWithdrawalVaultImplementation is a free data retrieval call binding the contract method 0x6d28ad1c. +// +// Solidity: function getValidatorWithdrawalVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetValidatorWithdrawalVaultImplementation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getValidatorWithdrawalVaultImplementation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetValidatorWithdrawalVaultImplementation is a free data retrieval call binding the contract method 0x6d28ad1c. +// +// Solidity: function getValidatorWithdrawalVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigSession) GetValidatorWithdrawalVaultImplementation() (common.Address, error) { + return _StaderConfig.Contract.GetValidatorWithdrawalVaultImplementation(&_StaderConfig.CallOpts) +} + +// GetValidatorWithdrawalVaultImplementation is a free data retrieval call binding the contract method 0x6d28ad1c. +// +// Solidity: function getValidatorWithdrawalVaultImplementation() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetValidatorWithdrawalVaultImplementation() (common.Address, error) { + return _StaderConfig.Contract.GetValidatorWithdrawalVaultImplementation(&_StaderConfig.CallOpts) +} + +// GetVaultFactory is a free data retrieval call binding the contract method 0x18bcb284. +// +// Solidity: function getVaultFactory() view returns(address) +func (_StaderConfig *StaderConfigCaller) GetVaultFactory(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getVaultFactory") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetVaultFactory is a free data retrieval call binding the contract method 0x18bcb284. +// +// Solidity: function getVaultFactory() view returns(address) +func (_StaderConfig *StaderConfigSession) GetVaultFactory() (common.Address, error) { + return _StaderConfig.Contract.GetVaultFactory(&_StaderConfig.CallOpts) +} + +// GetVaultFactory is a free data retrieval call binding the contract method 0x18bcb284. +// +// Solidity: function getVaultFactory() view returns(address) +func (_StaderConfig *StaderConfigCallerSession) GetVaultFactory() (common.Address, error) { + return _StaderConfig.Contract.GetVaultFactory(&_StaderConfig.CallOpts) +} + +// GetWithdrawnKeyBatchSize is a free data retrieval call binding the contract method 0xb479a517. +// +// Solidity: function getWithdrawnKeyBatchSize() view returns(uint256) +func (_StaderConfig *StaderConfigCaller) GetWithdrawnKeyBatchSize(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "getWithdrawnKeyBatchSize") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetWithdrawnKeyBatchSize is a free data retrieval call binding the contract method 0xb479a517. +// +// Solidity: function getWithdrawnKeyBatchSize() view returns(uint256) +func (_StaderConfig *StaderConfigSession) GetWithdrawnKeyBatchSize() (*big.Int, error) { + return _StaderConfig.Contract.GetWithdrawnKeyBatchSize(&_StaderConfig.CallOpts) +} + +// GetWithdrawnKeyBatchSize is a free data retrieval call binding the contract method 0xb479a517. +// +// Solidity: function getWithdrawnKeyBatchSize() view returns(uint256) +func (_StaderConfig *StaderConfigCallerSession) GetWithdrawnKeyBatchSize() (*big.Int, error) { + return _StaderConfig.Contract.GetWithdrawnKeyBatchSize(&_StaderConfig.CallOpts) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_StaderConfig *StaderConfigCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_StaderConfig *StaderConfigSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _StaderConfig.Contract.HasRole(&_StaderConfig.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_StaderConfig *StaderConfigCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _StaderConfig.Contract.HasRole(&_StaderConfig.CallOpts, role, account) +} + +// OnlyManagerRole is a free data retrieval call binding the contract method 0x6240fb9c. +// +// Solidity: function onlyManagerRole(address account) view returns(bool) +func (_StaderConfig *StaderConfigCaller) OnlyManagerRole(opts *bind.CallOpts, account common.Address) (bool, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "onlyManagerRole", account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// OnlyManagerRole is a free data retrieval call binding the contract method 0x6240fb9c. +// +// Solidity: function onlyManagerRole(address account) view returns(bool) +func (_StaderConfig *StaderConfigSession) OnlyManagerRole(account common.Address) (bool, error) { + return _StaderConfig.Contract.OnlyManagerRole(&_StaderConfig.CallOpts, account) +} + +// OnlyManagerRole is a free data retrieval call binding the contract method 0x6240fb9c. +// +// Solidity: function onlyManagerRole(address account) view returns(bool) +func (_StaderConfig *StaderConfigCallerSession) OnlyManagerRole(account common.Address) (bool, error) { + return _StaderConfig.Contract.OnlyManagerRole(&_StaderConfig.CallOpts, account) +} + +// OnlyOperatorRole is a free data retrieval call binding the contract method 0x53f5713b. +// +// Solidity: function onlyOperatorRole(address account) view returns(bool) +func (_StaderConfig *StaderConfigCaller) OnlyOperatorRole(opts *bind.CallOpts, account common.Address) (bool, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "onlyOperatorRole", account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// OnlyOperatorRole is a free data retrieval call binding the contract method 0x53f5713b. +// +// Solidity: function onlyOperatorRole(address account) view returns(bool) +func (_StaderConfig *StaderConfigSession) OnlyOperatorRole(account common.Address) (bool, error) { + return _StaderConfig.Contract.OnlyOperatorRole(&_StaderConfig.CallOpts, account) +} + +// OnlyOperatorRole is a free data retrieval call binding the contract method 0x53f5713b. +// +// Solidity: function onlyOperatorRole(address account) view returns(bool) +func (_StaderConfig *StaderConfigCallerSession) OnlyOperatorRole(account common.Address) (bool, error) { + return _StaderConfig.Contract.OnlyOperatorRole(&_StaderConfig.CallOpts, account) +} + +// OnlyStaderContract is a free data retrieval call binding the contract method 0xb3123922. +// +// Solidity: function onlyStaderContract(address _addr, bytes32 _contractName) view returns(bool) +func (_StaderConfig *StaderConfigCaller) OnlyStaderContract(opts *bind.CallOpts, _addr common.Address, _contractName [32]byte) (bool, error) { + var out []interface{} + err := _StaderConfig.contract.Call(opts, &out, "onlyStaderContract", _addr, _contractName) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// OnlyStaderContract is a free data retrieval call binding the contract method 0xb3123922. +// +// Solidity: function onlyStaderContract(address _addr, bytes32 _contractName) view returns(bool) +func (_StaderConfig *StaderConfigSession) OnlyStaderContract(_addr common.Address, _contractName [32]byte) (bool, error) { + return _StaderConfig.Contract.OnlyStaderContract(&_StaderConfig.CallOpts, _addr, _contractName) +} + +// OnlyStaderContract is a free data retrieval call binding the contract method 0xb3123922. +// +// Solidity: function onlyStaderContract(address _addr, bytes32 _contractName) view returns(bool) +func (_StaderConfig *StaderConfigCallerSession) OnlyStaderContract(_addr common.Address, _contractName [32]byte) (bool, error) { + return _StaderConfig.Contract.OnlyStaderContract(&_StaderConfig.CallOpts, _addr, _contractName) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_StaderConfig *StaderConfigCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _StaderConfig.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 (_StaderConfig *StaderConfigSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _StaderConfig.Contract.SupportsInterface(&_StaderConfig.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_StaderConfig *StaderConfigCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _StaderConfig.Contract.SupportsInterface(&_StaderConfig.CallOpts, interfaceId) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.GrantRole(&_StaderConfig.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.GrantRole(&_StaderConfig.TransactOpts, role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "renounceRole", role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.RenounceRole(&_StaderConfig.TransactOpts, role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.RenounceRole(&_StaderConfig.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.RevokeRole(&_StaderConfig.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_StaderConfig *StaderConfigTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.RevokeRole(&_StaderConfig.TransactOpts, role, account) +} + +// UpdateAdmin is a paid mutator transaction binding the contract method 0xe2f273bd. +// +// Solidity: function updateAdmin(address _admin) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateAdmin(opts *bind.TransactOpts, _admin common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateAdmin", _admin) +} + +// UpdateAdmin is a paid mutator transaction binding the contract method 0xe2f273bd. +// +// Solidity: function updateAdmin(address _admin) returns() +func (_StaderConfig *StaderConfigSession) UpdateAdmin(_admin common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateAdmin(&_StaderConfig.TransactOpts, _admin) +} + +// UpdateAdmin is a paid mutator transaction binding the contract method 0xe2f273bd. +// +// Solidity: function updateAdmin(address _admin) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateAdmin(_admin common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateAdmin(&_StaderConfig.TransactOpts, _admin) +} + +// UpdateAuctionContract is a paid mutator transaction binding the contract method 0x121669f1. +// +// Solidity: function updateAuctionContract(address _auctionContract) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateAuctionContract(opts *bind.TransactOpts, _auctionContract common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateAuctionContract", _auctionContract) +} + +// UpdateAuctionContract is a paid mutator transaction binding the contract method 0x121669f1. +// +// Solidity: function updateAuctionContract(address _auctionContract) returns() +func (_StaderConfig *StaderConfigSession) UpdateAuctionContract(_auctionContract common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateAuctionContract(&_StaderConfig.TransactOpts, _auctionContract) +} + +// UpdateAuctionContract is a paid mutator transaction binding the contract method 0x121669f1. +// +// Solidity: function updateAuctionContract(address _auctionContract) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateAuctionContract(_auctionContract common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateAuctionContract(&_StaderConfig.TransactOpts, _auctionContract) +} + +// UpdateETHBalancePORFeedProxy is a paid mutator transaction binding the contract method 0x403efe7f. +// +// Solidity: function updateETHBalancePORFeedProxy(address _ethBalanceProxy) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateETHBalancePORFeedProxy(opts *bind.TransactOpts, _ethBalanceProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateETHBalancePORFeedProxy", _ethBalanceProxy) +} + +// UpdateETHBalancePORFeedProxy is a paid mutator transaction binding the contract method 0x403efe7f. +// +// Solidity: function updateETHBalancePORFeedProxy(address _ethBalanceProxy) returns() +func (_StaderConfig *StaderConfigSession) UpdateETHBalancePORFeedProxy(_ethBalanceProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateETHBalancePORFeedProxy(&_StaderConfig.TransactOpts, _ethBalanceProxy) +} + +// UpdateETHBalancePORFeedProxy is a paid mutator transaction binding the contract method 0x403efe7f. +// +// Solidity: function updateETHBalancePORFeedProxy(address _ethBalanceProxy) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateETHBalancePORFeedProxy(_ethBalanceProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateETHBalancePORFeedProxy(&_StaderConfig.TransactOpts, _ethBalanceProxy) +} + +// UpdateETHXSupplyPORFeedProxy is a paid mutator transaction binding the contract method 0x72195b3e. +// +// Solidity: function updateETHXSupplyPORFeedProxy(address _ethXSupplyProxy) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateETHXSupplyPORFeedProxy(opts *bind.TransactOpts, _ethXSupplyProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateETHXSupplyPORFeedProxy", _ethXSupplyProxy) +} + +// UpdateETHXSupplyPORFeedProxy is a paid mutator transaction binding the contract method 0x72195b3e. +// +// Solidity: function updateETHXSupplyPORFeedProxy(address _ethXSupplyProxy) returns() +func (_StaderConfig *StaderConfigSession) UpdateETHXSupplyPORFeedProxy(_ethXSupplyProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateETHXSupplyPORFeedProxy(&_StaderConfig.TransactOpts, _ethXSupplyProxy) +} + +// UpdateETHXSupplyPORFeedProxy is a paid mutator transaction binding the contract method 0x72195b3e. +// +// Solidity: function updateETHXSupplyPORFeedProxy(address _ethXSupplyProxy) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateETHXSupplyPORFeedProxy(_ethXSupplyProxy common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateETHXSupplyPORFeedProxy(&_StaderConfig.TransactOpts, _ethXSupplyProxy) +} + +// UpdateETHxToken is a paid mutator transaction binding the contract method 0xb9894a11. +// +// Solidity: function updateETHxToken(address _ethX) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateETHxToken(opts *bind.TransactOpts, _ethX common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateETHxToken", _ethX) +} + +// UpdateETHxToken is a paid mutator transaction binding the contract method 0xb9894a11. +// +// Solidity: function updateETHxToken(address _ethX) returns() +func (_StaderConfig *StaderConfigSession) UpdateETHxToken(_ethX common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateETHxToken(&_StaderConfig.TransactOpts, _ethX) +} + +// UpdateETHxToken is a paid mutator transaction binding the contract method 0xb9894a11. +// +// Solidity: function updateETHxToken(address _ethX) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateETHxToken(_ethX common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateETHxToken(&_StaderConfig.TransactOpts, _ethX) +} + +// UpdateMaxDepositAmount is a paid mutator transaction binding the contract method 0x0945d42c. +// +// Solidity: function updateMaxDepositAmount(uint256 _maxDepositAmount) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateMaxDepositAmount(opts *bind.TransactOpts, _maxDepositAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateMaxDepositAmount", _maxDepositAmount) +} + +// UpdateMaxDepositAmount is a paid mutator transaction binding the contract method 0x0945d42c. +// +// Solidity: function updateMaxDepositAmount(uint256 _maxDepositAmount) returns() +func (_StaderConfig *StaderConfigSession) UpdateMaxDepositAmount(_maxDepositAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMaxDepositAmount(&_StaderConfig.TransactOpts, _maxDepositAmount) +} + +// UpdateMaxDepositAmount is a paid mutator transaction binding the contract method 0x0945d42c. +// +// Solidity: function updateMaxDepositAmount(uint256 _maxDepositAmount) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateMaxDepositAmount(_maxDepositAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMaxDepositAmount(&_StaderConfig.TransactOpts, _maxDepositAmount) +} + +// UpdateMaxWithdrawAmount is a paid mutator transaction binding the contract method 0x5b9cc8b1. +// +// Solidity: function updateMaxWithdrawAmount(uint256 _maxWithdrawAmount) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateMaxWithdrawAmount(opts *bind.TransactOpts, _maxWithdrawAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateMaxWithdrawAmount", _maxWithdrawAmount) +} + +// UpdateMaxWithdrawAmount is a paid mutator transaction binding the contract method 0x5b9cc8b1. +// +// Solidity: function updateMaxWithdrawAmount(uint256 _maxWithdrawAmount) returns() +func (_StaderConfig *StaderConfigSession) UpdateMaxWithdrawAmount(_maxWithdrawAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMaxWithdrawAmount(&_StaderConfig.TransactOpts, _maxWithdrawAmount) +} + +// UpdateMaxWithdrawAmount is a paid mutator transaction binding the contract method 0x5b9cc8b1. +// +// Solidity: function updateMaxWithdrawAmount(uint256 _maxWithdrawAmount) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateMaxWithdrawAmount(_maxWithdrawAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMaxWithdrawAmount(&_StaderConfig.TransactOpts, _maxWithdrawAmount) +} + +// UpdateMinBlockDelayToFinalizeWithdrawRequest is a paid mutator transaction binding the contract method 0x723b732c. +// +// Solidity: function updateMinBlockDelayToFinalizeWithdrawRequest(uint256 _minBlockDelay) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateMinBlockDelayToFinalizeWithdrawRequest(opts *bind.TransactOpts, _minBlockDelay *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateMinBlockDelayToFinalizeWithdrawRequest", _minBlockDelay) +} + +// UpdateMinBlockDelayToFinalizeWithdrawRequest is a paid mutator transaction binding the contract method 0x723b732c. +// +// Solidity: function updateMinBlockDelayToFinalizeWithdrawRequest(uint256 _minBlockDelay) returns() +func (_StaderConfig *StaderConfigSession) UpdateMinBlockDelayToFinalizeWithdrawRequest(_minBlockDelay *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMinBlockDelayToFinalizeWithdrawRequest(&_StaderConfig.TransactOpts, _minBlockDelay) +} + +// UpdateMinBlockDelayToFinalizeWithdrawRequest is a paid mutator transaction binding the contract method 0x723b732c. +// +// Solidity: function updateMinBlockDelayToFinalizeWithdrawRequest(uint256 _minBlockDelay) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateMinBlockDelayToFinalizeWithdrawRequest(_minBlockDelay *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMinBlockDelayToFinalizeWithdrawRequest(&_StaderConfig.TransactOpts, _minBlockDelay) +} + +// UpdateMinDepositAmount is a paid mutator transaction binding the contract method 0x84780205. +// +// Solidity: function updateMinDepositAmount(uint256 _minDepositAmount) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateMinDepositAmount(opts *bind.TransactOpts, _minDepositAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateMinDepositAmount", _minDepositAmount) +} + +// UpdateMinDepositAmount is a paid mutator transaction binding the contract method 0x84780205. +// +// Solidity: function updateMinDepositAmount(uint256 _minDepositAmount) returns() +func (_StaderConfig *StaderConfigSession) UpdateMinDepositAmount(_minDepositAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMinDepositAmount(&_StaderConfig.TransactOpts, _minDepositAmount) +} + +// UpdateMinDepositAmount is a paid mutator transaction binding the contract method 0x84780205. +// +// Solidity: function updateMinDepositAmount(uint256 _minDepositAmount) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateMinDepositAmount(_minDepositAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMinDepositAmount(&_StaderConfig.TransactOpts, _minDepositAmount) +} + +// UpdateMinWithdrawAmount is a paid mutator transaction binding the contract method 0xff4f3546. +// +// Solidity: function updateMinWithdrawAmount(uint256 _minWithdrawAmount) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateMinWithdrawAmount(opts *bind.TransactOpts, _minWithdrawAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateMinWithdrawAmount", _minWithdrawAmount) +} + +// UpdateMinWithdrawAmount is a paid mutator transaction binding the contract method 0xff4f3546. +// +// Solidity: function updateMinWithdrawAmount(uint256 _minWithdrawAmount) returns() +func (_StaderConfig *StaderConfigSession) UpdateMinWithdrawAmount(_minWithdrawAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMinWithdrawAmount(&_StaderConfig.TransactOpts, _minWithdrawAmount) +} + +// UpdateMinWithdrawAmount is a paid mutator transaction binding the contract method 0xff4f3546. +// +// Solidity: function updateMinWithdrawAmount(uint256 _minWithdrawAmount) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateMinWithdrawAmount(_minWithdrawAmount *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateMinWithdrawAmount(&_StaderConfig.TransactOpts, _minWithdrawAmount) +} + +// UpdateNodeELRewardImplementation is a paid mutator transaction binding the contract method 0x5be6ce69. +// +// Solidity: function updateNodeELRewardImplementation(address _nodeELRewardVaultImpl) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateNodeELRewardImplementation(opts *bind.TransactOpts, _nodeELRewardVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateNodeELRewardImplementation", _nodeELRewardVaultImpl) +} + +// UpdateNodeELRewardImplementation is a paid mutator transaction binding the contract method 0x5be6ce69. +// +// Solidity: function updateNodeELRewardImplementation(address _nodeELRewardVaultImpl) returns() +func (_StaderConfig *StaderConfigSession) UpdateNodeELRewardImplementation(_nodeELRewardVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateNodeELRewardImplementation(&_StaderConfig.TransactOpts, _nodeELRewardVaultImpl) +} + +// UpdateNodeELRewardImplementation is a paid mutator transaction binding the contract method 0x5be6ce69. +// +// Solidity: function updateNodeELRewardImplementation(address _nodeELRewardVaultImpl) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateNodeELRewardImplementation(_nodeELRewardVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateNodeELRewardImplementation(&_StaderConfig.TransactOpts, _nodeELRewardVaultImpl) +} + +// UpdateOperatorRewardsCollector is a paid mutator transaction binding the contract method 0x1de03db8. +// +// Solidity: function updateOperatorRewardsCollector(address _operatorRewardsCollector) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateOperatorRewardsCollector(opts *bind.TransactOpts, _operatorRewardsCollector common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateOperatorRewardsCollector", _operatorRewardsCollector) +} + +// UpdateOperatorRewardsCollector is a paid mutator transaction binding the contract method 0x1de03db8. +// +// Solidity: function updateOperatorRewardsCollector(address _operatorRewardsCollector) returns() +func (_StaderConfig *StaderConfigSession) UpdateOperatorRewardsCollector(_operatorRewardsCollector common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateOperatorRewardsCollector(&_StaderConfig.TransactOpts, _operatorRewardsCollector) +} + +// UpdateOperatorRewardsCollector is a paid mutator transaction binding the contract method 0x1de03db8. +// +// Solidity: function updateOperatorRewardsCollector(address _operatorRewardsCollector) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateOperatorRewardsCollector(_operatorRewardsCollector common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateOperatorRewardsCollector(&_StaderConfig.TransactOpts, _operatorRewardsCollector) +} + +// UpdatePenaltyContract is a paid mutator transaction binding the contract method 0xf83c7787. +// +// Solidity: function updatePenaltyContract(address _penaltyContract) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePenaltyContract(opts *bind.TransactOpts, _penaltyContract common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePenaltyContract", _penaltyContract) +} + +// UpdatePenaltyContract is a paid mutator transaction binding the contract method 0xf83c7787. +// +// Solidity: function updatePenaltyContract(address _penaltyContract) returns() +func (_StaderConfig *StaderConfigSession) UpdatePenaltyContract(_penaltyContract common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePenaltyContract(&_StaderConfig.TransactOpts, _penaltyContract) +} + +// UpdatePenaltyContract is a paid mutator transaction binding the contract method 0xf83c7787. +// +// Solidity: function updatePenaltyContract(address _penaltyContract) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePenaltyContract(_penaltyContract common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePenaltyContract(&_StaderConfig.TransactOpts, _penaltyContract) +} + +// UpdatePermissionedNodeRegistry is a paid mutator transaction binding the contract method 0x3c128dad. +// +// Solidity: function updatePermissionedNodeRegistry(address _permissionedNodeRegistry) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePermissionedNodeRegistry(opts *bind.TransactOpts, _permissionedNodeRegistry common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePermissionedNodeRegistry", _permissionedNodeRegistry) +} + +// UpdatePermissionedNodeRegistry is a paid mutator transaction binding the contract method 0x3c128dad. +// +// Solidity: function updatePermissionedNodeRegistry(address _permissionedNodeRegistry) returns() +func (_StaderConfig *StaderConfigSession) UpdatePermissionedNodeRegistry(_permissionedNodeRegistry common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionedNodeRegistry(&_StaderConfig.TransactOpts, _permissionedNodeRegistry) +} + +// UpdatePermissionedNodeRegistry is a paid mutator transaction binding the contract method 0x3c128dad. +// +// Solidity: function updatePermissionedNodeRegistry(address _permissionedNodeRegistry) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionedNodeRegistry(_permissionedNodeRegistry common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionedNodeRegistry(&_StaderConfig.TransactOpts, _permissionedNodeRegistry) +} + +// UpdatePermissionedPool is a paid mutator transaction binding the contract method 0xb549dbff. +// +// Solidity: function updatePermissionedPool(address _permissionedPool) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePermissionedPool(opts *bind.TransactOpts, _permissionedPool common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePermissionedPool", _permissionedPool) +} + +// UpdatePermissionedPool is a paid mutator transaction binding the contract method 0xb549dbff. +// +// Solidity: function updatePermissionedPool(address _permissionedPool) returns() +func (_StaderConfig *StaderConfigSession) UpdatePermissionedPool(_permissionedPool common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionedPool(&_StaderConfig.TransactOpts, _permissionedPool) +} + +// UpdatePermissionedPool is a paid mutator transaction binding the contract method 0xb549dbff. +// +// Solidity: function updatePermissionedPool(address _permissionedPool) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionedPool(_permissionedPool common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionedPool(&_StaderConfig.TransactOpts, _permissionedPool) +} + +// UpdatePermissionedSocializingPool is a paid mutator transaction binding the contract method 0xe4f59b6c. +// +// Solidity: function updatePermissionedSocializingPool(address _permissionedSocializePool) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePermissionedSocializingPool(opts *bind.TransactOpts, _permissionedSocializePool common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePermissionedSocializingPool", _permissionedSocializePool) +} + +// UpdatePermissionedSocializingPool is a paid mutator transaction binding the contract method 0xe4f59b6c. +// +// Solidity: function updatePermissionedSocializingPool(address _permissionedSocializePool) returns() +func (_StaderConfig *StaderConfigSession) UpdatePermissionedSocializingPool(_permissionedSocializePool common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionedSocializingPool(&_StaderConfig.TransactOpts, _permissionedSocializePool) +} + +// UpdatePermissionedSocializingPool is a paid mutator transaction binding the contract method 0xe4f59b6c. +// +// Solidity: function updatePermissionedSocializingPool(address _permissionedSocializePool) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionedSocializingPool(_permissionedSocializePool common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionedSocializingPool(&_StaderConfig.TransactOpts, _permissionedSocializePool) +} + +// UpdatePermissionlessNodeRegistry is a paid mutator transaction binding the contract method 0xf63718e7. +// +// Solidity: function updatePermissionlessNodeRegistry(address _permissionlessNodeRegistry) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePermissionlessNodeRegistry(opts *bind.TransactOpts, _permissionlessNodeRegistry common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePermissionlessNodeRegistry", _permissionlessNodeRegistry) +} + +// UpdatePermissionlessNodeRegistry is a paid mutator transaction binding the contract method 0xf63718e7. +// +// Solidity: function updatePermissionlessNodeRegistry(address _permissionlessNodeRegistry) returns() +func (_StaderConfig *StaderConfigSession) UpdatePermissionlessNodeRegistry(_permissionlessNodeRegistry common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionlessNodeRegistry(&_StaderConfig.TransactOpts, _permissionlessNodeRegistry) +} + +// UpdatePermissionlessNodeRegistry is a paid mutator transaction binding the contract method 0xf63718e7. +// +// Solidity: function updatePermissionlessNodeRegistry(address _permissionlessNodeRegistry) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionlessNodeRegistry(_permissionlessNodeRegistry common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionlessNodeRegistry(&_StaderConfig.TransactOpts, _permissionlessNodeRegistry) +} + +// UpdatePermissionlessPool is a paid mutator transaction binding the contract method 0xc20573c1. +// +// Solidity: function updatePermissionlessPool(address _permissionlessPool) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePermissionlessPool(opts *bind.TransactOpts, _permissionlessPool common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePermissionlessPool", _permissionlessPool) +} + +// UpdatePermissionlessPool is a paid mutator transaction binding the contract method 0xc20573c1. +// +// Solidity: function updatePermissionlessPool(address _permissionlessPool) returns() +func (_StaderConfig *StaderConfigSession) UpdatePermissionlessPool(_permissionlessPool common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionlessPool(&_StaderConfig.TransactOpts, _permissionlessPool) +} + +// UpdatePermissionlessPool is a paid mutator transaction binding the contract method 0xc20573c1. +// +// Solidity: function updatePermissionlessPool(address _permissionlessPool) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionlessPool(_permissionlessPool common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionlessPool(&_StaderConfig.TransactOpts, _permissionlessPool) +} + +// UpdatePermissionlessSocializingPool is a paid mutator transaction binding the contract method 0x1049e32e. +// +// Solidity: function updatePermissionlessSocializingPool(address _permissionlessSocializePool) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePermissionlessSocializingPool(opts *bind.TransactOpts, _permissionlessSocializePool common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePermissionlessSocializingPool", _permissionlessSocializePool) +} + +// UpdatePermissionlessSocializingPool is a paid mutator transaction binding the contract method 0x1049e32e. +// +// Solidity: function updatePermissionlessSocializingPool(address _permissionlessSocializePool) returns() +func (_StaderConfig *StaderConfigSession) UpdatePermissionlessSocializingPool(_permissionlessSocializePool common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionlessSocializingPool(&_StaderConfig.TransactOpts, _permissionlessSocializePool) +} + +// UpdatePermissionlessSocializingPool is a paid mutator transaction binding the contract method 0x1049e32e. +// +// Solidity: function updatePermissionlessSocializingPool(address _permissionlessSocializePool) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePermissionlessSocializingPool(_permissionlessSocializePool common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePermissionlessSocializingPool(&_StaderConfig.TransactOpts, _permissionlessSocializePool) +} + +// UpdatePoolSelector is a paid mutator transaction binding the contract method 0x047cb439. +// +// Solidity: function updatePoolSelector(address _poolSelector) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePoolSelector(opts *bind.TransactOpts, _poolSelector common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePoolSelector", _poolSelector) +} + +// UpdatePoolSelector is a paid mutator transaction binding the contract method 0x047cb439. +// +// Solidity: function updatePoolSelector(address _poolSelector) returns() +func (_StaderConfig *StaderConfigSession) UpdatePoolSelector(_poolSelector common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePoolSelector(&_StaderConfig.TransactOpts, _poolSelector) +} + +// UpdatePoolSelector is a paid mutator transaction binding the contract method 0x047cb439. +// +// Solidity: function updatePoolSelector(address _poolSelector) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePoolSelector(_poolSelector common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePoolSelector(&_StaderConfig.TransactOpts, _poolSelector) +} + +// UpdatePoolUtils is a paid mutator transaction binding the contract method 0x2651644c. +// +// Solidity: function updatePoolUtils(address _poolUtils) returns() +func (_StaderConfig *StaderConfigTransactor) UpdatePoolUtils(opts *bind.TransactOpts, _poolUtils common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updatePoolUtils", _poolUtils) +} + +// UpdatePoolUtils is a paid mutator transaction binding the contract method 0x2651644c. +// +// Solidity: function updatePoolUtils(address _poolUtils) returns() +func (_StaderConfig *StaderConfigSession) UpdatePoolUtils(_poolUtils common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePoolUtils(&_StaderConfig.TransactOpts, _poolUtils) +} + +// UpdatePoolUtils is a paid mutator transaction binding the contract method 0x2651644c. +// +// Solidity: function updatePoolUtils(address _poolUtils) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdatePoolUtils(_poolUtils common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdatePoolUtils(&_StaderConfig.TransactOpts, _poolUtils) +} + +// UpdateRewardsThreshold is a paid mutator transaction binding the contract method 0x572c686a. +// +// Solidity: function updateRewardsThreshold(uint256 _rewardsThreshold) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateRewardsThreshold(opts *bind.TransactOpts, _rewardsThreshold *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateRewardsThreshold", _rewardsThreshold) +} + +// UpdateRewardsThreshold is a paid mutator transaction binding the contract method 0x572c686a. +// +// Solidity: function updateRewardsThreshold(uint256 _rewardsThreshold) returns() +func (_StaderConfig *StaderConfigSession) UpdateRewardsThreshold(_rewardsThreshold *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateRewardsThreshold(&_StaderConfig.TransactOpts, _rewardsThreshold) +} + +// UpdateRewardsThreshold is a paid mutator transaction binding the contract method 0x572c686a. +// +// Solidity: function updateRewardsThreshold(uint256 _rewardsThreshold) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateRewardsThreshold(_rewardsThreshold *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateRewardsThreshold(&_StaderConfig.TransactOpts, _rewardsThreshold) +} + +// UpdateSDCollateral is a paid mutator transaction binding the contract method 0x34d17d74. +// +// Solidity: function updateSDCollateral(address _sdCollateral) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateSDCollateral(opts *bind.TransactOpts, _sdCollateral common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateSDCollateral", _sdCollateral) +} + +// UpdateSDCollateral is a paid mutator transaction binding the contract method 0x34d17d74. +// +// Solidity: function updateSDCollateral(address _sdCollateral) returns() +func (_StaderConfig *StaderConfigSession) UpdateSDCollateral(_sdCollateral common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateSDCollateral(&_StaderConfig.TransactOpts, _sdCollateral) +} + +// UpdateSDCollateral is a paid mutator transaction binding the contract method 0x34d17d74. +// +// Solidity: function updateSDCollateral(address _sdCollateral) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateSDCollateral(_sdCollateral common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateSDCollateral(&_StaderConfig.TransactOpts, _sdCollateral) +} + +// UpdateSocializingPoolCycleDuration is a paid mutator transaction binding the contract method 0x6870bb2b. +// +// Solidity: function updateSocializingPoolCycleDuration(uint256 _socializingPoolCycleDuration) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateSocializingPoolCycleDuration(opts *bind.TransactOpts, _socializingPoolCycleDuration *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateSocializingPoolCycleDuration", _socializingPoolCycleDuration) +} + +// UpdateSocializingPoolCycleDuration is a paid mutator transaction binding the contract method 0x6870bb2b. +// +// Solidity: function updateSocializingPoolCycleDuration(uint256 _socializingPoolCycleDuration) returns() +func (_StaderConfig *StaderConfigSession) UpdateSocializingPoolCycleDuration(_socializingPoolCycleDuration *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateSocializingPoolCycleDuration(&_StaderConfig.TransactOpts, _socializingPoolCycleDuration) +} + +// UpdateSocializingPoolCycleDuration is a paid mutator transaction binding the contract method 0x6870bb2b. +// +// Solidity: function updateSocializingPoolCycleDuration(uint256 _socializingPoolCycleDuration) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateSocializingPoolCycleDuration(_socializingPoolCycleDuration *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateSocializingPoolCycleDuration(&_StaderConfig.TransactOpts, _socializingPoolCycleDuration) +} + +// UpdateSocializingPoolOptInCoolingPeriod is a paid mutator transaction binding the contract method 0x8a4cfb58. +// +// Solidity: function updateSocializingPoolOptInCoolingPeriod(uint256 _SocializePoolOptInCoolingPeriod) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateSocializingPoolOptInCoolingPeriod(opts *bind.TransactOpts, _SocializePoolOptInCoolingPeriod *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateSocializingPoolOptInCoolingPeriod", _SocializePoolOptInCoolingPeriod) +} + +// UpdateSocializingPoolOptInCoolingPeriod is a paid mutator transaction binding the contract method 0x8a4cfb58. +// +// Solidity: function updateSocializingPoolOptInCoolingPeriod(uint256 _SocializePoolOptInCoolingPeriod) returns() +func (_StaderConfig *StaderConfigSession) UpdateSocializingPoolOptInCoolingPeriod(_SocializePoolOptInCoolingPeriod *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateSocializingPoolOptInCoolingPeriod(&_StaderConfig.TransactOpts, _SocializePoolOptInCoolingPeriod) +} + +// UpdateSocializingPoolOptInCoolingPeriod is a paid mutator transaction binding the contract method 0x8a4cfb58. +// +// Solidity: function updateSocializingPoolOptInCoolingPeriod(uint256 _SocializePoolOptInCoolingPeriod) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateSocializingPoolOptInCoolingPeriod(_SocializePoolOptInCoolingPeriod *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateSocializingPoolOptInCoolingPeriod(&_StaderConfig.TransactOpts, _SocializePoolOptInCoolingPeriod) +} + +// UpdateStaderInsuranceFund is a paid mutator transaction binding the contract method 0xaa2f56c7. +// +// Solidity: function updateStaderInsuranceFund(address _staderInsuranceFund) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateStaderInsuranceFund(opts *bind.TransactOpts, _staderInsuranceFund common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateStaderInsuranceFund", _staderInsuranceFund) +} + +// UpdateStaderInsuranceFund is a paid mutator transaction binding the contract method 0xaa2f56c7. +// +// Solidity: function updateStaderInsuranceFund(address _staderInsuranceFund) returns() +func (_StaderConfig *StaderConfigSession) UpdateStaderInsuranceFund(_staderInsuranceFund common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStaderInsuranceFund(&_StaderConfig.TransactOpts, _staderInsuranceFund) +} + +// UpdateStaderInsuranceFund is a paid mutator transaction binding the contract method 0xaa2f56c7. +// +// Solidity: function updateStaderInsuranceFund(address _staderInsuranceFund) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateStaderInsuranceFund(_staderInsuranceFund common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStaderInsuranceFund(&_StaderConfig.TransactOpts, _staderInsuranceFund) +} + +// UpdateStaderOracle is a paid mutator transaction binding the contract method 0xca78360c. +// +// Solidity: function updateStaderOracle(address _staderOracle) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateStaderOracle(opts *bind.TransactOpts, _staderOracle common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateStaderOracle", _staderOracle) +} + +// UpdateStaderOracle is a paid mutator transaction binding the contract method 0xca78360c. +// +// Solidity: function updateStaderOracle(address _staderOracle) returns() +func (_StaderConfig *StaderConfigSession) UpdateStaderOracle(_staderOracle common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStaderOracle(&_StaderConfig.TransactOpts, _staderOracle) +} + +// UpdateStaderOracle is a paid mutator transaction binding the contract method 0xca78360c. +// +// Solidity: function updateStaderOracle(address _staderOracle) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateStaderOracle(_staderOracle common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStaderOracle(&_StaderConfig.TransactOpts, _staderOracle) +} + +// UpdateStaderToken is a paid mutator transaction binding the contract method 0x83148593. +// +// Solidity: function updateStaderToken(address _staderToken) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateStaderToken(opts *bind.TransactOpts, _staderToken common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateStaderToken", _staderToken) +} + +// UpdateStaderToken is a paid mutator transaction binding the contract method 0x83148593. +// +// Solidity: function updateStaderToken(address _staderToken) returns() +func (_StaderConfig *StaderConfigSession) UpdateStaderToken(_staderToken common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStaderToken(&_StaderConfig.TransactOpts, _staderToken) +} + +// UpdateStaderToken is a paid mutator transaction binding the contract method 0x83148593. +// +// Solidity: function updateStaderToken(address _staderToken) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateStaderToken(_staderToken common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStaderToken(&_StaderConfig.TransactOpts, _staderToken) +} + +// UpdateStaderTreasury is a paid mutator transaction binding the contract method 0x7b4cd7ec. +// +// Solidity: function updateStaderTreasury(address _staderTreasury) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateStaderTreasury(opts *bind.TransactOpts, _staderTreasury common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateStaderTreasury", _staderTreasury) +} + +// UpdateStaderTreasury is a paid mutator transaction binding the contract method 0x7b4cd7ec. +// +// Solidity: function updateStaderTreasury(address _staderTreasury) returns() +func (_StaderConfig *StaderConfigSession) UpdateStaderTreasury(_staderTreasury common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStaderTreasury(&_StaderConfig.TransactOpts, _staderTreasury) +} + +// UpdateStaderTreasury is a paid mutator transaction binding the contract method 0x7b4cd7ec. +// +// Solidity: function updateStaderTreasury(address _staderTreasury) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateStaderTreasury(_staderTreasury common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStaderTreasury(&_StaderConfig.TransactOpts, _staderTreasury) +} + +// UpdateStakePoolManager is a paid mutator transaction binding the contract method 0x368f9d17. +// +// Solidity: function updateStakePoolManager(address _stakePoolManager) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateStakePoolManager(opts *bind.TransactOpts, _stakePoolManager common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateStakePoolManager", _stakePoolManager) +} + +// UpdateStakePoolManager is a paid mutator transaction binding the contract method 0x368f9d17. +// +// Solidity: function updateStakePoolManager(address _stakePoolManager) returns() +func (_StaderConfig *StaderConfigSession) UpdateStakePoolManager(_stakePoolManager common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStakePoolManager(&_StaderConfig.TransactOpts, _stakePoolManager) +} + +// UpdateStakePoolManager is a paid mutator transaction binding the contract method 0x368f9d17. +// +// Solidity: function updateStakePoolManager(address _stakePoolManager) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateStakePoolManager(_stakePoolManager common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateStakePoolManager(&_StaderConfig.TransactOpts, _stakePoolManager) +} + +// UpdateUserWithdrawManager is a paid mutator transaction binding the contract method 0x088ee72d. +// +// Solidity: function updateUserWithdrawManager(address _userWithdrawManager) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateUserWithdrawManager(opts *bind.TransactOpts, _userWithdrawManager common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateUserWithdrawManager", _userWithdrawManager) +} + +// UpdateUserWithdrawManager is a paid mutator transaction binding the contract method 0x088ee72d. +// +// Solidity: function updateUserWithdrawManager(address _userWithdrawManager) returns() +func (_StaderConfig *StaderConfigSession) UpdateUserWithdrawManager(_userWithdrawManager common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateUserWithdrawManager(&_StaderConfig.TransactOpts, _userWithdrawManager) +} + +// UpdateUserWithdrawManager is a paid mutator transaction binding the contract method 0x088ee72d. +// +// Solidity: function updateUserWithdrawManager(address _userWithdrawManager) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateUserWithdrawManager(_userWithdrawManager common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateUserWithdrawManager(&_StaderConfig.TransactOpts, _userWithdrawManager) +} + +// UpdateValidatorWithdrawalVaultImplementation is a paid mutator transaction binding the contract method 0x5b5961fc. +// +// Solidity: function updateValidatorWithdrawalVaultImplementation(address _validatorWithdrawalVaultImpl) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateValidatorWithdrawalVaultImplementation(opts *bind.TransactOpts, _validatorWithdrawalVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateValidatorWithdrawalVaultImplementation", _validatorWithdrawalVaultImpl) +} + +// UpdateValidatorWithdrawalVaultImplementation is a paid mutator transaction binding the contract method 0x5b5961fc. +// +// Solidity: function updateValidatorWithdrawalVaultImplementation(address _validatorWithdrawalVaultImpl) returns() +func (_StaderConfig *StaderConfigSession) UpdateValidatorWithdrawalVaultImplementation(_validatorWithdrawalVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateValidatorWithdrawalVaultImplementation(&_StaderConfig.TransactOpts, _validatorWithdrawalVaultImpl) +} + +// UpdateValidatorWithdrawalVaultImplementation is a paid mutator transaction binding the contract method 0x5b5961fc. +// +// Solidity: function updateValidatorWithdrawalVaultImplementation(address _validatorWithdrawalVaultImpl) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateValidatorWithdrawalVaultImplementation(_validatorWithdrawalVaultImpl common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateValidatorWithdrawalVaultImplementation(&_StaderConfig.TransactOpts, _validatorWithdrawalVaultImpl) +} + +// UpdateVaultFactory is a paid mutator transaction binding the contract method 0x98c35927. +// +// Solidity: function updateVaultFactory(address _vaultFactory) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateVaultFactory(opts *bind.TransactOpts, _vaultFactory common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateVaultFactory", _vaultFactory) +} + +// UpdateVaultFactory is a paid mutator transaction binding the contract method 0x98c35927. +// +// Solidity: function updateVaultFactory(address _vaultFactory) returns() +func (_StaderConfig *StaderConfigSession) UpdateVaultFactory(_vaultFactory common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateVaultFactory(&_StaderConfig.TransactOpts, _vaultFactory) +} + +// UpdateVaultFactory is a paid mutator transaction binding the contract method 0x98c35927. +// +// Solidity: function updateVaultFactory(address _vaultFactory) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateVaultFactory(_vaultFactory common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateVaultFactory(&_StaderConfig.TransactOpts, _vaultFactory) +} + +// UpdateWithdrawnKeysBatchSize is a paid mutator transaction binding the contract method 0xbbb99bb5. +// +// Solidity: function updateWithdrawnKeysBatchSize(uint256 _withdrawnKeysBatchSize) returns() +func (_StaderConfig *StaderConfigTransactor) UpdateWithdrawnKeysBatchSize(opts *bind.TransactOpts, _withdrawnKeysBatchSize *big.Int) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "updateWithdrawnKeysBatchSize", _withdrawnKeysBatchSize) +} + +// UpdateWithdrawnKeysBatchSize is a paid mutator transaction binding the contract method 0xbbb99bb5. +// +// Solidity: function updateWithdrawnKeysBatchSize(uint256 _withdrawnKeysBatchSize) returns() +func (_StaderConfig *StaderConfigSession) UpdateWithdrawnKeysBatchSize(_withdrawnKeysBatchSize *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateWithdrawnKeysBatchSize(&_StaderConfig.TransactOpts, _withdrawnKeysBatchSize) +} + +// UpdateWithdrawnKeysBatchSize is a paid mutator transaction binding the contract method 0xbbb99bb5. +// +// Solidity: function updateWithdrawnKeysBatchSize(uint256 _withdrawnKeysBatchSize) returns() +func (_StaderConfig *StaderConfigTransactorSession) UpdateWithdrawnKeysBatchSize(_withdrawnKeysBatchSize *big.Int) (*types.Transaction, error) { + return _StaderConfig.Contract.UpdateWithdrawnKeysBatchSize(&_StaderConfig.TransactOpts, _withdrawnKeysBatchSize) +} + +// StaderConfigInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the StaderConfig contract. +type StaderConfigInitializedIterator struct { + Event *StaderConfigInitialized // 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 *StaderConfigInitializedIterator) 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(StaderConfigInitialized) + if err := 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(StaderConfigInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigInitialized represents a Initialized event raised by the StaderConfig contract. +type StaderConfigInitialized 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 (_StaderConfig *StaderConfigFilterer) FilterInitialized(opts *bind.FilterOpts) (*StaderConfigInitializedIterator, error) { + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &StaderConfigInitializedIterator{contract: _StaderConfig.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 (_StaderConfig *StaderConfigFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *StaderConfigInitialized) (event.Subscription, error) { + + logs, sub, err := _StaderConfig.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(StaderConfigInitialized) + if err := _StaderConfig.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 (_StaderConfig *StaderConfigFilterer) ParseInitialized(log types.Log) (*StaderConfigInitialized, error) { + event := new(StaderConfigInitialized) + if err := _StaderConfig.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderConfigRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the StaderConfig contract. +type StaderConfigRoleAdminChangedIterator struct { + Event *StaderConfigRoleAdminChanged // 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 *StaderConfigRoleAdminChangedIterator) 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(StaderConfigRoleAdminChanged) + if err := 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(StaderConfigRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigRoleAdminChanged represents a RoleAdminChanged event raised by the StaderConfig contract. +type StaderConfigRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_StaderConfig *StaderConfigFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*StaderConfigRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &StaderConfigRoleAdminChangedIterator{contract: _StaderConfig.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_StaderConfig *StaderConfigFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *StaderConfigRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(StaderConfigRoleAdminChanged) + if err := _StaderConfig.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_StaderConfig *StaderConfigFilterer) ParseRoleAdminChanged(log types.Log) (*StaderConfigRoleAdminChanged, error) { + event := new(StaderConfigRoleAdminChanged) + if err := _StaderConfig.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderConfigRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the StaderConfig contract. +type StaderConfigRoleGrantedIterator struct { + Event *StaderConfigRoleGranted // 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 *StaderConfigRoleGrantedIterator) 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(StaderConfigRoleGranted) + if err := 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(StaderConfigRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigRoleGranted represents a RoleGranted event raised by the StaderConfig contract. +type StaderConfigRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderConfig *StaderConfigFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*StaderConfigRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &StaderConfigRoleGrantedIterator{contract: _StaderConfig.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderConfig *StaderConfigFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *StaderConfigRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, 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(StaderConfigRoleGranted) + if err := _StaderConfig.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderConfig *StaderConfigFilterer) ParseRoleGranted(log types.Log) (*StaderConfigRoleGranted, error) { + event := new(StaderConfigRoleGranted) + if err := _StaderConfig.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderConfigRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the StaderConfig contract. +type StaderConfigRoleRevokedIterator struct { + Event *StaderConfigRoleRevoked // 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 *StaderConfigRoleRevokedIterator) 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(StaderConfigRoleRevoked) + if err := 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(StaderConfigRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigRoleRevoked represents a RoleRevoked event raised by the StaderConfig contract. +type StaderConfigRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderConfig *StaderConfigFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*StaderConfigRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &StaderConfigRoleRevokedIterator{contract: _StaderConfig.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderConfig *StaderConfigFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *StaderConfigRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, 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(StaderConfigRoleRevoked) + if err := _StaderConfig.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderConfig *StaderConfigFilterer) ParseRoleRevoked(log types.Log) (*StaderConfigRoleRevoked, error) { + event := new(StaderConfigRoleRevoked) + if err := _StaderConfig.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderConfigSetAccountIterator is returned from FilterSetAccount and is used to iterate over the raw logs and unpacked data for SetAccount events raised by the StaderConfig contract. +type StaderConfigSetAccountIterator struct { + Event *StaderConfigSetAccount // 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 *StaderConfigSetAccountIterator) 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(StaderConfigSetAccount) + if err := 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(StaderConfigSetAccount) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigSetAccountIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigSetAccountIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigSetAccount represents a SetAccount event raised by the StaderConfig contract. +type StaderConfigSetAccount struct { + Key [32]byte + NewAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSetAccount is a free log retrieval operation binding the contract event 0xcbdd341876786c7241ad12a5ce5ea46739a4ce7b1587d0c216dfa655a98e50a6. +// +// Solidity: event SetAccount(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) FilterSetAccount(opts *bind.FilterOpts) (*StaderConfigSetAccountIterator, error) { + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "SetAccount") + if err != nil { + return nil, err + } + return &StaderConfigSetAccountIterator{contract: _StaderConfig.contract, event: "SetAccount", logs: logs, sub: sub}, nil +} + +// WatchSetAccount is a free log subscription operation binding the contract event 0xcbdd341876786c7241ad12a5ce5ea46739a4ce7b1587d0c216dfa655a98e50a6. +// +// Solidity: event SetAccount(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) WatchSetAccount(opts *bind.WatchOpts, sink chan<- *StaderConfigSetAccount) (event.Subscription, error) { + + logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "SetAccount") + 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(StaderConfigSetAccount) + if err := _StaderConfig.contract.UnpackLog(event, "SetAccount", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSetAccount is a log parse operation binding the contract event 0xcbdd341876786c7241ad12a5ce5ea46739a4ce7b1587d0c216dfa655a98e50a6. +// +// Solidity: event SetAccount(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) ParseSetAccount(log types.Log) (*StaderConfigSetAccount, error) { + event := new(StaderConfigSetAccount) + if err := _StaderConfig.contract.UnpackLog(event, "SetAccount", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderConfigSetConstantIterator is returned from FilterSetConstant and is used to iterate over the raw logs and unpacked data for SetConstant events raised by the StaderConfig contract. +type StaderConfigSetConstantIterator struct { + Event *StaderConfigSetConstant // 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 *StaderConfigSetConstantIterator) 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(StaderConfigSetConstant) + if err := 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(StaderConfigSetConstant) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigSetConstantIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigSetConstantIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigSetConstant represents a SetConstant event raised by the StaderConfig contract. +type StaderConfigSetConstant struct { + Key [32]byte + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSetConstant is a free log retrieval operation binding the contract event 0x9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c46581630. +// +// Solidity: event SetConstant(bytes32 key, uint256 amount) +func (_StaderConfig *StaderConfigFilterer) FilterSetConstant(opts *bind.FilterOpts) (*StaderConfigSetConstantIterator, error) { + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "SetConstant") + if err != nil { + return nil, err + } + return &StaderConfigSetConstantIterator{contract: _StaderConfig.contract, event: "SetConstant", logs: logs, sub: sub}, nil +} + +// WatchSetConstant is a free log subscription operation binding the contract event 0x9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c46581630. +// +// Solidity: event SetConstant(bytes32 key, uint256 amount) +func (_StaderConfig *StaderConfigFilterer) WatchSetConstant(opts *bind.WatchOpts, sink chan<- *StaderConfigSetConstant) (event.Subscription, error) { + + logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "SetConstant") + 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(StaderConfigSetConstant) + if err := _StaderConfig.contract.UnpackLog(event, "SetConstant", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSetConstant is a log parse operation binding the contract event 0x9094260c4234c0cb4c44e4a035abb5816b84e5505f9dc571c3ff397c46581630. +// +// Solidity: event SetConstant(bytes32 key, uint256 amount) +func (_StaderConfig *StaderConfigFilterer) ParseSetConstant(log types.Log) (*StaderConfigSetConstant, error) { + event := new(StaderConfigSetConstant) + if err := _StaderConfig.contract.UnpackLog(event, "SetConstant", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderConfigSetContractIterator is returned from FilterSetContract and is used to iterate over the raw logs and unpacked data for SetContract events raised by the StaderConfig contract. +type StaderConfigSetContractIterator struct { + Event *StaderConfigSetContract // 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 *StaderConfigSetContractIterator) 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(StaderConfigSetContract) + if err := 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(StaderConfigSetContract) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigSetContractIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigSetContractIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigSetContract represents a SetContract event raised by the StaderConfig contract. +type StaderConfigSetContract struct { + Key [32]byte + NewAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSetContract is a free log retrieval operation binding the contract event 0x5de40a806536a2029221dac2c8887ac9f11952fcc1ed3d7cfb4476dd5259b740. +// +// Solidity: event SetContract(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) FilterSetContract(opts *bind.FilterOpts) (*StaderConfigSetContractIterator, error) { + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "SetContract") + if err != nil { + return nil, err + } + return &StaderConfigSetContractIterator{contract: _StaderConfig.contract, event: "SetContract", logs: logs, sub: sub}, nil +} + +// WatchSetContract is a free log subscription operation binding the contract event 0x5de40a806536a2029221dac2c8887ac9f11952fcc1ed3d7cfb4476dd5259b740. +// +// Solidity: event SetContract(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) WatchSetContract(opts *bind.WatchOpts, sink chan<- *StaderConfigSetContract) (event.Subscription, error) { + + logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "SetContract") + 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(StaderConfigSetContract) + if err := _StaderConfig.contract.UnpackLog(event, "SetContract", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSetContract is a log parse operation binding the contract event 0x5de40a806536a2029221dac2c8887ac9f11952fcc1ed3d7cfb4476dd5259b740. +// +// Solidity: event SetContract(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) ParseSetContract(log types.Log) (*StaderConfigSetContract, error) { + event := new(StaderConfigSetContract) + if err := _StaderConfig.contract.UnpackLog(event, "SetContract", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderConfigSetTokenIterator is returned from FilterSetToken and is used to iterate over the raw logs and unpacked data for SetToken events raised by the StaderConfig contract. +type StaderConfigSetTokenIterator struct { + Event *StaderConfigSetToken // 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 *StaderConfigSetTokenIterator) 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(StaderConfigSetToken) + if err := 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(StaderConfigSetToken) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigSetTokenIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigSetTokenIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigSetToken represents a SetToken event raised by the StaderConfig contract. +type StaderConfigSetToken struct { + Key [32]byte + NewAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSetToken is a free log retrieval operation binding the contract event 0x19aab10c6a9f5d648eaa15e2d515f8dfda570ee221e7c8cb9dc07694e68005bc. +// +// Solidity: event SetToken(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) FilterSetToken(opts *bind.FilterOpts) (*StaderConfigSetTokenIterator, error) { + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "SetToken") + if err != nil { + return nil, err + } + return &StaderConfigSetTokenIterator{contract: _StaderConfig.contract, event: "SetToken", logs: logs, sub: sub}, nil +} + +// WatchSetToken is a free log subscription operation binding the contract event 0x19aab10c6a9f5d648eaa15e2d515f8dfda570ee221e7c8cb9dc07694e68005bc. +// +// Solidity: event SetToken(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) WatchSetToken(opts *bind.WatchOpts, sink chan<- *StaderConfigSetToken) (event.Subscription, error) { + + logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "SetToken") + 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(StaderConfigSetToken) + if err := _StaderConfig.contract.UnpackLog(event, "SetToken", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSetToken is a log parse operation binding the contract event 0x19aab10c6a9f5d648eaa15e2d515f8dfda570ee221e7c8cb9dc07694e68005bc. +// +// Solidity: event SetToken(bytes32 key, address newAddress) +func (_StaderConfig *StaderConfigFilterer) ParseSetToken(log types.Log) (*StaderConfigSetToken, error) { + event := new(StaderConfigSetToken) + if err := _StaderConfig.contract.UnpackLog(event, "SetToken", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderConfigSetVariableIterator is returned from FilterSetVariable and is used to iterate over the raw logs and unpacked data for SetVariable events raised by the StaderConfig contract. +type StaderConfigSetVariableIterator struct { + Event *StaderConfigSetVariable // 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 *StaderConfigSetVariableIterator) 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(StaderConfigSetVariable) + if err := 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(StaderConfigSetVariable) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderConfigSetVariableIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderConfigSetVariableIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderConfigSetVariable represents a SetVariable event raised by the StaderConfig contract. +type StaderConfigSetVariable struct { + Key [32]byte + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSetVariable is a free log retrieval operation binding the contract event 0x8091d0a33efc2ef6d3c254604932c813b52281547a6915df7dc1a5554f080c3e. +// +// Solidity: event SetVariable(bytes32 key, uint256 amount) +func (_StaderConfig *StaderConfigFilterer) FilterSetVariable(opts *bind.FilterOpts) (*StaderConfigSetVariableIterator, error) { + + logs, sub, err := _StaderConfig.contract.FilterLogs(opts, "SetVariable") + if err != nil { + return nil, err + } + return &StaderConfigSetVariableIterator{contract: _StaderConfig.contract, event: "SetVariable", logs: logs, sub: sub}, nil +} + +// WatchSetVariable is a free log subscription operation binding the contract event 0x8091d0a33efc2ef6d3c254604932c813b52281547a6915df7dc1a5554f080c3e. +// +// Solidity: event SetVariable(bytes32 key, uint256 amount) +func (_StaderConfig *StaderConfigFilterer) WatchSetVariable(opts *bind.WatchOpts, sink chan<- *StaderConfigSetVariable) (event.Subscription, error) { + + logs, sub, err := _StaderConfig.contract.WatchLogs(opts, "SetVariable") + 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(StaderConfigSetVariable) + if err := _StaderConfig.contract.UnpackLog(event, "SetVariable", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSetVariable is a log parse operation binding the contract event 0x8091d0a33efc2ef6d3c254604932c813b52281547a6915df7dc1a5554f080c3e. +// +// Solidity: event SetVariable(bytes32 key, uint256 amount) +func (_StaderConfig *StaderConfigFilterer) ParseSetVariable(log types.Log) (*StaderConfigSetVariable, error) { + event := new(StaderConfigSetVariable) + if err := _StaderConfig.contract.UnpackLog(event, "SetVariable", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/testing/deployHelper_test.go b/testing/deployHelper_test.go index 158613941..dc00480ed 100644 --- a/testing/deployHelper_test.go +++ b/testing/deployHelper_test.go @@ -6,17 +6,21 @@ import ( "fmt" "math/big" "testing" - "time" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethclient" - "github.com/stader-labs/stader-node/stader-lib/contracts" + "github.com/stader-labs/stader-node/testing/contracts" "github.com/stretchr/testify/require" "github.com/urfave/cli" ) +const ( + staderConfigAddr = "0x700b6A60ce7EaaEA56F065753d8dcB9653dbAD35" + ethXPredefineAddr = "0xA15BB66138824a1c7167f5E85b957d04Dd34E468" +) + func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { client, err := ethclient.Dial(eth1URL) require.Nil(t, err) @@ -39,13 +43,12 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { chainID, err := client.NetworkID(context.Background()) require.Nil(t, err) - fmt.Printf("FROM: %+v \n ", fromAddress.Hex()) // Get Transaction Ops to make a valid Ethereum transaction auth, err := GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) // deploy the config contract - staderCfAddress, _, stdCfContract, err := contracts.DeployStaderConfig(auth, client) + staderCfAddress, _, stdCfContract, err := contracts.DeployStaderConfig(auth, client, fromAddress, common.HexToAddress(ethXPredefineAddr)) require.Nil(t, err) fmt.Printf("staderCfAddress %+v", staderCfAddress.Hex()) @@ -56,44 +59,15 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { require.Nil(t, err) fmt.Printf("ethXAddr %+v", ethXAddr.Hex()) - time.Sleep(time.Second) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) - // // Init ethx - // _, err = ethxContract.Initialize(auth) - // require.Nil(t, err) - // auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) - - // _, err = ethxContract.UpdateStaderConfig(auth, staderCfAddress) - // require.Nil(t, err) - - // auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) - - StaderConfigInETHX, _ := ethxContract.StaderConfig(&bind.CallOpts{Pending: true}) - fmt.Printf(" StaderConfig %+v", StaderConfigInETHX.Hex()) - - StaderConfigInETHX, _ = ethxContract.StaderConfig(&bind.CallOpts{Pending: false}) - time.Sleep(time.Second) - fmt.Printf(" StaderConfig %+v", StaderConfigInETHX.Hex()) - - auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) - require.Nil(t, err) - - admin, _ := stdCfContract.GetAdmin(&bind.CallOpts{Pending: true}) - fmt.Printf("ADMIN %+v", admin.Hex()) - // auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) - // require.Nil(t, err) - ethxContract.UpdateStaderConfig(auth, staderCfAddress) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) - // sdcfg, err := contractsSrv.GetStaderConfigContract(c) - // require.Nil(t, err) - // Deploy node permission - plNodeRegistryAddr, _, _, err := contracts.DeployPermissionlessNodeRegistry(auth, client) + plNodeRegistryAddr, _, _, err := contracts.DeployPermissionlessNodeRegistry(auth, client, fromAddress, staderCfAddress) require.Nil(t, err) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) @@ -105,9 +79,8 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { require.Nil(t, err) // Deploy permissionless pool - permissionlessPool, _, _, err := contracts.DeployPermissionlessPool(auth, client) + permissionlessPool, _, _, err := contracts.DeployPermissionlessPool(auth, client, fromAddress, fromAddress) - // client.Commit() require.Nil(t, err) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) @@ -118,33 +91,9 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) - time.Sleep(time.Second) - opt := bind.CallOpts{ - Pending: true, - } - ETHxToken, err := ethxContract.Decimals(&opt) - if err != nil { - panic(err) - } - - fmt.Printf("ETHxToken from %+v\n", ETHxToken) - // time.Sleep(time.Minute) - storedPLPool, err := stdCfContract.GetPermissionlessPool(&opt) - if err != nil { - panic(err) - } - - storedPLRegis, err := stdCfContract.GetPermissionlessNodeRegistry(&bind.CallOpts{ - Pending: true, - }) - require.Nil(t, err) - fmt.Printf("Api contract from %s\n", auth.From.Hex()) fmt.Printf("DeployETHX to %s\n", ethXAddr.Hex()) fmt.Printf("DeployStaderConfig to %s\n", staderCfAddress.Hex()) - fmt.Printf("DeployPermissionlessPool to %s <> %s \n", permissionlessPool.Hex(), storedPLPool.Hex()) - fmt.Printf("permissionlessNR to %s <> store %s\n", plNodeRegistryAddr.Hex(), storedPLRegis.Hex()) - } // GetNextTransaction returns the next transaction in the pending transaction queue @@ -156,7 +105,6 @@ func GetNextTransaction(client *ethclient.Client, fromAddress common.Address, pr return nil, err } - fmt.Println(" >>>>>>>>>>>>>> Nouce ", nonce) // sign the transaction auth, err := bind.NewKeyedTransactorWithChainID(privateKey, chainID) if err != nil { diff --git a/testing/node_test.go b/testing/node_test.go index e155204b2..70f41da30 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -18,28 +18,24 @@ import ( ) type StaderNodeSuite struct { - done chan struct{} - app *cli.App + app *cli.App suite.Suite kurtosisCtx *kurtosis_context.KurtosisContext enclaveId string } func TestNodeSuite(t *testing.T) { - suite.Run(t, new(StaderNodeSuite)) + s := new(StaderNodeSuite) + s.app = newApp() + suite.Run(t, s) } func (s *StaderNodeSuite) TestNodeDaemon() { - // a := os.Args - // run(time.Minute*1, s.done, func() { - // err := s.app.Run([]string{ - // a[0], - // "node", - // }) - // require.Nil(s.T(), err) - // }) - time.Sleep(time.Minute * 5) + time.Sleep(time.Second * 5) +} +func (s *StaderNodeSuite) TestNodeRegistry() { + time.Sleep(time.Second * 5) } // run once, before test suite methods @@ -54,9 +50,6 @@ func (s *StaderNodeSuite) SetupSuite() { ctx, cancelCtxFunc := context.WithCancel(context.Background()) defer cancelCtxFunc() - s.app = newApp() - s.done = make(chan struct{}, 1) - flagSet := flag.NewFlagSet("node_testing", flag.PanicOnError) var p string flagSet.StringVar(&p, "settings", UserSettingPath, "settings") @@ -82,10 +75,13 @@ func (s *StaderNodeSuite) SetupSuite() { // run once, after test suite methods func (s *StaderNodeSuite) TearDownSuite() { - // <-s.done logrus.Println("TearDown StaderNodeSuite") + defer func() { + if s.kurtosisCtx != nil { - defer s.kurtosisCtx.Clean(context.Background(), true) + s.kurtosisCtx.Clean(context.Background(), true) + } + }() removeTestFolder(s.T()) } From b303bd0aea3342fe500b669a7eadf1ca968398bf Mon Sep 17 00:00:00 2001 From: batphonghan Date: Mon, 19 Jun 2023 14:28:36 +0700 Subject: [PATCH 22/90] WIP --- stader/api/node/commands.go | 2 +- stader/api/node/register.go | 3 +- .../contracts/PermissionlessNodeRegistry.go | 2 +- testing/deployHelper_test.go | 65 ++++++++++++++++++- testing/node_test.go | 10 +-- 5 files changed, 71 insertions(+), 11 deletions(-) diff --git a/stader/api/node/commands.go b/stader/api/node/commands.go index 6eda7a9af..7070f829d 100644 --- a/stader/api/node/commands.go +++ b/stader/api/node/commands.go @@ -124,7 +124,7 @@ func RegisterSubcommands(command *cli.Command, name string, aliases []string) { socializeMev, err := cliutils.ValidateBool("socialize-mev", c.Args().Get(2)) // Run - api.PrintResponse(registerNode(c, operatorName, operatorRewardAddress, socializeMev)) + api.PrintResponse(RegisterNode(c, operatorName, operatorRewardAddress, socializeMev)) return nil }, diff --git a/stader/api/node/register.go b/stader/api/node/register.go index 0d26a00ac..0a2c223da 100644 --- a/stader/api/node/register.go +++ b/stader/api/node/register.go @@ -2,6 +2,7 @@ package node import ( "fmt" + "github.com/ethereum/go-ethereum/common" pool_utils "github.com/stader-labs/stader-node/stader-lib/pool-utils" stader_config "github.com/stader-labs/stader-node/stader-lib/stader-config" @@ -90,7 +91,7 @@ func canRegisterNode(c *cli.Context, operatorName string, operatorRewardAddress } -func registerNode(c *cli.Context, operatorName string, operatorRewardAddress common.Address, mevSocialize bool) (*api.RegisterNodeResponse, error) { +func RegisterNode(c *cli.Context, operatorName string, operatorRewardAddress common.Address, mevSocialize bool) (*api.RegisterNodeResponse, error) { // Get services w, err := services.GetWallet(c) diff --git a/testing/contracts/PermissionlessNodeRegistry.go b/testing/contracts/PermissionlessNodeRegistry.go index 3dc6ca088..e99f278d1 100644 --- a/testing/contracts/PermissionlessNodeRegistry.go +++ b/testing/contracts/PermissionlessNodeRegistry.go @@ -44,7 +44,7 @@ type Validator struct { // PermissionlessNodeRegistryMetaData contains all meta data concerning the PermissionlessNodeRegistry contract. var PermissionlessNodeRegistryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CooldownNotComplete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicatePoolIDOrPoolNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InSufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBondEthValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidKeyCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartAndEndIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MisMatchingInputKeysSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoChangeInState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSDCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorAlreadyOnBoardedInProtocol\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorIsDeactivate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorNotOnBoarded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PageNumberIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PubkeyAlreadyExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyVerifiedKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyWithdrawnKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UNEXPECTED_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"maxKeyLimitReached\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"AddedValidatorKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"DecreasedTotalActiveValidatorCount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"IncreasedTotalActiveValidatorCount\",\"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\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nodeRewardAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"OnboardedOperator\",\"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\":\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredCollateralToPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"batchKeyDepositLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedInputKeyCountLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"UpdatedMaxNonTerminalKeyPerOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"UpdatedNextQueuedValidatorIndex\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardAddress\",\"type\":\"address\"}],\"name\":\"UpdatedOperatorDetails\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"UpdatedSocializingPoolState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"}],\"name\":\"UpdatedValidatorDepositBlock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedVerifiedKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedWithdrawnKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedAsFrontRunned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedReadyToDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorStatusMarkedAsInvalidSignature\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COLLATERAL_ETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRONT_RUN_PENALTY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ID\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_depositSignature\",\"type\":\"bytes[]\"}],\"name\":\"addValidatorKeys\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"changeSocializingPoolState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllNodeELVaultAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorRewardAddress\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalKeys\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getSocializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsByOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"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\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"increaseTotalActiveValidatorCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inputKeyCountLimit\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_readyToDepositPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_frontRunPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_invalidSignaturePubkey\",\"type\":\"bytes[]\"}],\"name\":\"markValidatorReadyToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNonTerminalKeyPerOperator\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextQueuedValidatorIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextValidatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nodeELRewardVaultByOperatorId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_operatorRewardAddress\",\"type\":\"address\"}],\"name\":\"onboardNodeOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorIDByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"operatorStructById\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"operatorRewardAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorAddress\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queuedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"socializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"totalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferCollateralToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"}],\"name\":\"updateDepositStatusAndBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_inputKeyCountLimit\",\"type\":\"uint16\"}],\"name\":\"updateInputKeyCountLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"updateMaxNonTerminalKeyPerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"updateNextQueuedValidatorIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_rewardAddress\",\"type\":\"address\"}],\"name\":\"updateOperatorDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateVerifiedKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"validatorIdByPubkey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorIdsByOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorRegistry\",\"outputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifiedKeyBatchSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"withdrawnValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b5060405162005666380380620056668339810160408190526200003391620004c6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001f1565b6200010e82620001f1565b620001186200021c565b6200012262000278565b6200012c620002dc565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff00009091166a01000000000000000000006001600160a01b0386160261ffff1916171762010000600160501b03191662320000179055603260fc55620001a25f8462000340565b8015620001e8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620004fc565b6001600160a01b038116620002195760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002765760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002d25760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b62000276620003e3565b5f54610100900460ff16620003365760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200027662000449565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16620003df575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200039e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff166200043d5760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff16620004a35760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b0381168114620004c1575f80fd5b919050565b5f8060408385031215620004d8575f80fd5b620004e383620004aa565b9150620004f360208401620004aa565b90509250929050565b61513c806200050a5f395ff3fe60806040526004361061035b575f3560e01c806383ea2358116101bd578063bb7306bf116100f2578063deacde2b11610092578063ebb5c1741161006d578063ebb5c17414610a64578063f7c0918914610a90578063f90b083814610aa5578063f9c4dda414610ac4575f80fd5b8063deacde2b146109fe578063e0bf8b5314610a11578063e0d7d0e914610a3e575f80fd5b8063c8a00e7a116100cd578063c8a00e7a14610964578063cac8b30614610994578063d547741f146109c0578063d5e1e5ce146109df575f80fd5b8063bb7306bf146108f1578063bc4a3ad51461090c578063c34ade5c14610938575f80fd5b8063998888981161015d578063ab3e71eb11610138578063ab3e71eb14610884578063af533aa814610899578063b01db078146108b8578063b8d2f06c146108d2575f80fd5b806399888898146108335780639ee804cb14610852578063a217fddf14610871575f80fd5b806384b0fa4c1161019857806384b0fa4c146107aa5780638a25bcec146107c057806391d14854146107df5780639344b242146107fe575f80fd5b806383ea23581461073257806384522a6d1461076a5780638456cb5914610796575f80fd5b806349911bfb116102935780635c2c30a511610233578063683547b81161020e578063683547b8146106c757806374338e6d146106f357806377c359e1146107095780637bd977d91461071e575f80fd5b80635c2c30a5146106595780635c975abb1461069157806360c3cf3f146106a8575f80fd5b806358a994ea1161026e57806358a994ea146105c957806359c3c9b7146105e85780635a1239c1146106075780635ae7f25d1461063a575f80fd5b806349911bfb1461055c5780634f59ed801461057157806350d5d7ab1461058c575f80fd5b80632d1dbd74116102fe57806336514d9f116102d957806336514d9f146104e457806336568abe146105035780633f4ba83a14610522578063490ffa3514610536575f80fd5b80632d1dbd74146104845780632d32924f146104995780632f2ff15d146104c5575f80fd5b8063186d954111610339578063186d9541146103eb578063248a9ca31461040a5780632517cfbf14610446578063264f27f314610465575f80fd5b806301ffc9a71461035f578063044d2fe81461039357806313797bff146103ca575b5f80fd5b34801561036a575f80fd5b5061037e6103793660046144ce565b610afb565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103b26103ad36600461455a565b610b31565b6040516001600160a01b03909116815260200161038a565b3480156103d5575f80fd5b506103e96103e43660046145fd565b610f50565b005b3480156103f6575f80fd5b506103e961040536600461468f565b611397565b348015610415575f80fd5b5061043861042436600461468f565b5f9081526065602052604090206001015490565b60405190815260200161038a565b348015610451575f80fd5b506103e96104603660046146a6565b611447565b348015610470575f80fd5b506103e961047f3660046146c7565b6114a9565b34801561048f575f80fd5b5061043860fd5481565b3480156104a4575f80fd5b506104b86104b3366004614705565b6116f4565b60405161038a9190614725565b3480156104d0575f80fd5b506103e96104df366004614771565b611828565b3480156104ef575f80fd5b5061037e6104fe36600461479f565b61184c565b34801561050e575f80fd5b506103e961051d366004614771565b611879565b34801561052d575f80fd5b506103e96118fc565b348015610541575f80fd5b5060fb546103b290600160501b90046001600160a01b031681565b348015610567575f80fd5b5061043860ff5481565b34801561057c575f80fd5b50610438673782dace9d90000081565b348015610597575f80fd5b5060fb546105b1906201000090046001600160401b031681565b6040516001600160401b03909116815260200161038a565b3480156105d4575f80fd5b506103e96105e33660046147d1565b611924565b3480156105f3575f80fd5b506103e961060236600461468f565b611aa2565b348015610612575f80fd5b5061062661062136600461468f565b611b42565b60405161038a9897969594939291906148a4565b348015610645575f80fd5b506103e961065436600461468f565b611d24565b348015610664575f80fd5b50610438610673366004614931565b80516020818301810180516101038252928201919093012091525481565b34801561069c575f80fd5b5060975460ff1661037e565b3480156106b3575f80fd5b506103e96106c23660046149db565b611e8b565b3480156106d2575f80fd5b506106e66106e1366004614a01565b611f05565b60405161038a9190614a33565b3480156106fe575f80fd5b506104386101005481565b348015610714575f80fd5b5061010154610438565b348015610729575f80fd5b506104386122bc565b34801561073d575f80fd5b506103b261074c36600461468f565b5f90815261010560205260409020600201546001600160a01b031690565b348015610775575f80fd5b5061043861078436600461468f565b6101086020525f908152604090205481565b3480156107a1575f80fd5b506103e96122d3565b3480156107b5575f80fd5b506104386101015481565b3480156107cb575f80fd5b506105b16107da366004614a01565b6122f9565b3480156107ea575f80fd5b5061037e6107f9366004614771565b6123c4565b348015610809575f80fd5b506103b261081836600461468f565b6101096020525f90815260409020546001600160a01b031681565b34801561083e575f80fd5b506106e661084d366004614705565b6123ee565b34801561085d575f80fd5b506103e961086c366004614b1d565b612739565b34801561087c575f80fd5b506104385f81565b34801561088f575f80fd5b5061043860fc5481565b3480156108a4575f80fd5b506103e96108b336600461468f565b6127c2565b3480156108c3575f80fd5b50673782dace9d900000610438565b3480156108dd575f80fd5b506103e96108ec36600461468f565b612815565b3480156108fc575f80fd5b506104386729a2241af62c000081565b348015610917575f80fd5b5061043861092636600461468f565b6101046020525f908152604090205481565b348015610943575f80fd5b5061043861095236600461468f565b5f908152610107602052604090205490565b34801561096f575f80fd5b5061098361097e36600461468f565b6128a0565b60405161038a959493929190614b38565b34801561099f575f80fd5b506104386109ae366004614b1d565b6101066020525f908152604090205481565b3480156109cb575f80fd5b506103e96109da366004614771565b612969565b3480156109ea575f80fd5b506104386109f9366004614705565b61298d565b6103e9610a0c3660046145fd565b6129b9565b348015610a1c575f80fd5b5060fb54610a2b9061ffff1681565b60405161ffff909116815260200161038a565b348015610a49575f80fd5b50610a52600181565b60405160ff909116815260200161038a565b348015610a6f575f80fd5b50610438610a7e36600461468f565b5f908152610108602052604090205490565b348015610a9b575f80fd5b5061043860fe5481565b348015610ab0575f80fd5b506103b2610abf366004614b7c565b61309c565b348015610acf575f80fd5b5061037e610ade366004614b1d565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b2b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b3a613305565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb09190614b97565b905060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c279190614b97565b604051636fc4c27f60e11b8152600160048201526001600160a01b039182169183169063df8984fe90602401602060405180830381865afa158015610c6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c929190614b97565b6001600160a01b031614610cb9576040516303b8ffef60e41b815260040160405180910390fd5b604051639f7053f560e01b81526001600160a01b03821690639f7053f590610ce79088908890600401614bda565b5f604051808303815f87803b158015610cfe575f80fd5b505af1158015610d10573d5f803e3d5ffd5b50505050610d1d8361334b565b604051633e71376960e21b81523360048201526001600160a01b0382169063f9c4dda490602401602060405180830381865afa158015610d5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d839190614bf5565b15610da15760405163707999fb60e11b815260040160405180910390fd5b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e179190614b97565b60fd54604051636a0b688160e01b81526001600482015260248101919091526001600160a01b039190911690636a0b6881906044016020604051808303815f875af1158015610e68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8c9190614b97565b60fd545f9081526101096020526040902080546001600160a01b0319166001600160a01b038316179055905086610ec35780610f38565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f389190614b97565b9250610f4687878787613372565b5050949350505050565b610f58613500565b610f60613305565b60fb5460408051633871d0f160e01b81529051610fde923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd99190614c10565b613559565b60fc5485908490839081610ff28486614c3b565b610ffc9190614c3b565b111561101b5760405163525e3de760e01b815260040160405180910390fd5b5f5b838110156110e4575f6101038b8b8481811061103b5761103b614c4e565b905060200281019061104d9190614c62565b60405161105b929190614ca4565b9081526020016040518091039020549050611075816135e5565b61107e81613631565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b848181106110b1576110b1614c4e565b90506020028101906110c39190614c62565b836040516110d393929190614cb3565b60405180910390a15060010161101d565b5081156111c15760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111609190614b97565b6001600160a01b0316638d0d8cb66111806729a2241af62c000085614cd6565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156111a9575f80fd5b505af11580156111bb573d5f803e3d5ffd5b50505050505b5f5b828110156112b7575f6101038989848181106111e1576111e1614c4e565b90506020028101906111f39190614c62565b604051611201929190614ca4565b908152602001604051809103902054905061121b816135e5565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b8346689898481811061128457611284614c4e565b90506020028101906112969190614c62565b836040516112a693929190614cb3565b60405180910390a1506001016111c3565b505f5b81811015611381575f6101038787848181106112d8576112d8614c4e565b90506020028101906112ea9190614c62565b6040516112f8929190614ca4565b9081526020016040518091039020549050611312816135e5565b61131b81613672565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f87878481811061134e5761134e614c4e565b90506020028101906113609190614c62565b8360405161137093929190614cb3565b60405180910390a1506001016112ba565b5050505061138f600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b815290516113ec923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb54611465903390600160501b90046001600160a01b0316613801565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c369060200161143c565b60fb5460408051633871d0f160e01b815290516114fe923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa15801561154c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115709190614c10565b81111561159057604051639519af4360e01b815260040160405180910390fd5b5f5b818110156116e5575f6101038585848181106115b0576115b0614c4e565b90506020028101906115c29190614c62565b6040516115d0929190614ca4565b90815260200160405180910390205490506115ea81613886565b611607576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b158015611669575f80fd5b505af115801561167b573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf798585848181106116b2576116b2614c4e565b90506020028101906116c49190614c62565b836040516116d493929190614cb3565b60405180910390a150600101611592565b506116ef81613ad1565b505050565b6060825f03611716576040516334d6e01560e01b815260040160405180910390fd5b5f82611723600186614ced565b61172d9190614cd6565b611738906001614c3b565b90505f6117458483614c3b565b905060fd548111611756578061175a565b60fd545b90505f82821161176a575f611774565b6117748383614ced565b6001600160401b0381111561178b5761178b61491d565b6040519080825280602002602001820160405280156117b4578160200160208202803683370190505b509050825b8281101561181e575f81815261010960205260409020546001600160a01b0316826117e48684614ced565b815181106117f4576117f4614c4e565b6001600160a01b03909216602092830291909101909101528061181681614d00565b9150506117b9565b5095945050505050565b5f8281526065602052604090206001015461184281613b1c565b6116ef8383613b26565b5f6101038383604051611860929190614ca4565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146118ee5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6118f88282613bab565b5050565b60fb5461191a903390600160501b90046001600160a01b0316613c11565b611922613c96565b565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611975573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119999190614b97565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b81526004016119c6929190614bda565b5f604051808303815f87803b1580156119dd575f80fd5b505af11580156119ef573d5f803e3d5ffd5b505050506119fc8161334b565b611a0533613ce8565b50335f9081526101066020908152604080832054808452610105909252909120600101611a33848683614d95565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d8726977790611a9490879087908790614e50565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b81529051611af7923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b806101015f828254611b099190614c3b565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f29060200161143c565b6101026020525f90815260409020805460018201805460ff9092169291611b6890614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9490614d18565b8015611bdf5780601f10611bb657610100808354040283529160200191611bdf565b820191905f5260205f20905b815481529060010190602001808311611bc257829003601f168201915b505050505090806002018054611bf490614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2090614d18565b8015611c6b5780601f10611c4257610100808354040283529160200191611c6b565b820191905f5260205f20905b815481529060010190602001808311611c4e57829003601f168201915b505050505090806003018054611c8090614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054611cac90614d18565b8015611cf75780601f10611cce57610100808354040283529160200191611cf7565b820191905f5260205f20905b815481529060010190602001808311611cda57829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611d2c613500565b60fb5460408051637a87fa0b60e01b81529051611d81923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df69190614b97565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611e2e575f80fd5b505af1158015611e40573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a81604051611e7691815260200190565b60405180910390a1611e88600160c955565b50565b60fb54611ea9903390600160501b90046001600160a01b0316613c11565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a29060200161143c565b6060825f03611f27576040516334d6e01560e01b815260040160405180910390fd5b5f82611f34600186614ced565b611f3e9190614cd6565b90505f611f4b8483614c3b565b6001600160a01b0387165f9081526101066020526040812054919250819003611f875760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311611fa35782611fa5565b805b92505f848411611fb5575f611fbf565b611fbf8585614ced565b6001600160401b03811115611fd657611fd661491d565b60405190808252806020026020018201604052801561200f57816020015b611ffc614484565b815260200190600190039081611ff45790505b509050845b848110156122af575f8481526101076020526040812080548390811061203c5761203c614c4e565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff16600581111561207e5761207e614823565b600581111561208f5761208f614823565b81526020016001820180546120a390614d18565b80601f01602080910402602001604051908101604052809291908181526020018280546120cf90614d18565b801561211a5780601f106120f15761010080835404028352916020019161211a565b820191905f5260205f20905b8154815290600101906020018083116120fd57829003601f168201915b5050505050815260200160028201805461213390614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461215f90614d18565b80156121aa5780601f10612181576101008083540402835291602001916121aa565b820191905f5260205f20905b81548152906001019060200180831161218d57829003601f168201915b505050505081526020016003820180546121c390614d18565b80601f01602080910402602001604051908101604052809291908181526020018280546121ef90614d18565b801561223a5780601f106122115761010080835404028352916020019161223a565b820191905f5260205f20905b81548152906001019060200180831161221d57829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152836122808985614ced565b8151811061229057612290614c4e565b60200260200101819052505080806122a790614d00565b915050612014565b5098975050505050505050565b5f6101005460ff546122ce9190614ced565b905090565b60fb546122f1903390600160501b90046001600160a01b0316613c11565b611922613d56565b5f8183111561231b5760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f90815261010660205260408120549061234b825f908152610107602052604090205490565b905080841161235a578361235c565b805b93505f855b858110156123b9575f8481526101076020526040812080548390811061238957612389614c4e565b905f5260205f200154905061239d81613d93565b156123b057826123ac81614e7b565b9350505b50600101612361565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f03612410576040516334d6e01560e01b815260040160405180910390fd5b5f8261241d600186614ced565b6124279190614cd6565b612432906001614c3b565b90505f61243f8483614c3b565b905060fe5481116124505780612454565b60fe545b90505f846001600160401b0381111561246f5761246f61491d565b6040519080825280602002602001820160405280156124a857816020015b612495614484565b81526020019060019003908161248d5790505b5090505f835b8381101561272d576124bf81613886565b1561271b575f818152610102602052604090819020815161010081019092528054829060ff1660058111156124f6576124f6614823565b600581111561250757612507614823565b815260200160018201805461251b90614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461254790614d18565b80156125925780601f1061256957610100808354040283529160200191612592565b820191905f5260205f20905b81548152906001019060200180831161257557829003601f168201915b505050505081526020016002820180546125ab90614d18565b80601f01602080910402602001604051908101604052809291908181526020018280546125d790614d18565b80156126225780601f106125f957610100808354040283529160200191612622565b820191905f5260205f20905b81548152906001019060200180831161260557829003601f168201915b5050505050815260200160038201805461263b90614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461266790614d18565b80156126b25780601f10612689576101008083540402835291602001916126b2565b820191905f5260205f20905b81548152906001019060200180831161269557829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152835184908490811061270157612701614c4e565b6020026020010181905250818061271790614d00565b9250505b8061272581614d00565b9150506124ae565b50815295945050505050565b5f61274381613b1c565b61274c8261334b565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb546127e0903390600160501b90046001600160a01b0316613801565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b49060200161143c565b60fb5460408051637a87fa0b60e01b8152905161286a923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da99060200161143c565b6101056020525f90815260409020805460018201805460ff80841694610100909404169291906128cf90614d18565b80601f01602080910402602001604051908101604052809291908181526020018280546128fb90614d18565b80156129465780601f1061291d57610100808354040283529160200191612946565b820191905f5260205f20905b81548152906001019060200180831161292957829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f8281526065602052604090206001015461298381613b1c565b6116ef8383613bab565b610107602052815f5260405f2081815481106129a7575f80fd5b905f5260205f20015f91509150505481565b6129c1613500565b6129c9613305565b5f6129d333613ce8565b90505f806129e388878686614019565b915091505f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a39573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614b97565b90505f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad59190614b97565b90505f5b84811015612f3457816001600160a01b0316639f55941b8d8d84818110612b0257612b02614c4e565b9050602002810190612b149190614c62565b8d8d86818110612b2657612b26614c4e565b9050602002810190612b389190614c62565b8d8d88818110612b4a57612b4a614c4e565b9050602002810190612b5c9190614c62565b6040518763ffffffff1660e01b8152600401612b7d96959493929190614ea0565b5f604051808303815f87803b158015612b94575f80fd5b505af1158015612ba6573d5f803e3d5ffd5b505050505f836001600160a01b0316637f70ce0d6001898589612bc99190614c3b565b60fe546040516001600160e01b031960e087901b16815260ff90941660048501526024840192909252604483015260648201526084016020604051808303815f875af1158015612c1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c3f9190614b97565b604080516101008101909152909150805f81526020018e8e85818110612c6757612c67614c4e565b9050602002810190612c799190614c62565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018c8c85818110612cc457612cc4614c4e565b9050602002810190612cd69190614c62565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018a8a85818110612d2157612d21614c4e565b9050602002810190612d339190614c62565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b03841660208084019190915260408084018c905260608401839052608090930182905260fe54825261010290522081518154829060ff19166001836005811115612dbb57612dbb614823565b021790555060208201516001820190612dd49082614ee8565b5060408201516002820190612de99082614ee8565b5060608201516003820190612dfe9082614ee8565b5060808201516004820180546001600160a01b0319166001600160a01b0390921691909117905560a0820151600582015560c0820151600682015560e09091015160079091015560fe546101038e8e85818110612e5d57612e5d614c4e565b9050602002810190612e6f9190614c62565b604051612e7d929190614ca4565b9081526040805160209281900383019020929092555f898152610107825291822060fe5481546001810183559184529190922090910155337fab5128638b64e6216e80dfafa70d3cb6d54913a536dc41e76eb4a04cfbe979cf8e8e85818110612ee857612ee8614c4e565b9050602002810190612efa9190614c62565b60fe54604051612f0c93929190614cb3565b60405180910390a260fe8054905f612f2383614d00565b919050555081600101915050612ad9565b5060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f86573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612faa9190614b97565b6001600160a01b031663eda0ae128560fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561300a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061302e9190614c10565b6130389190614cd6565b8d8d8d8d8b8a6040518863ffffffff1660e01b815260040161305f9695949392919061502f565b5f604051808303818588803b158015613076575f80fd5b505af1158015613088573d5f803e3d5ffd5b5050505050505050505061138f600160c955565b5f806130a733613ce8565b5f818152610105602052604090205490915083151561010090910460ff161515036130e557604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613136573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061315a9190614c10565b5f82815261010860205260409020546131739190614c3b565b4310156131935760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b03169150821561328a576001600160a01b038216311561321257816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156131fb575f80fd5b505af115801561320d573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613263573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132879190614b97565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff16156119225760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016118e5565b6001600160a01b038116611e885760405163d92e233d60e01b815260040160405180910390fd5b6040518060a00160405280600115158152602001851515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b0384166020808401919091523360409384015260fd548252610105815290829020835181549285015161ffff1990931690151561ff00191617610100921515929092029190911781559082015160018201906134289082614ee8565b5060608201516002820180546001600160a01b03199081166001600160a01b039384161790915560809093015160039092018054909316911617905560fd8054335f9081526101066020908152604080832084905592825261010890529081204390558154919061349883614d00565b9190505550336001600160a01b03167f55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd482600160fd546134d89190614ced565b604080516001600160a01b039093168352602083019190915287151590820152606001611a94565b600260c954036135525760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016118e5565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa1580156135a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135c89190614bf5565b6116ef5760405163168dfea160e01b815260040160405180910390fd5b80158061361357505f818152610102602052604081205460ff16600581111561361057613610614823565b14155b15611e88576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff80548452610104909252822083905580549161366a83614d00565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa1580156136ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137139190614b97565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa158015613772573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137969190614c10565b6137a890673782dace9d900000614ced565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b1580156137e5575f80fd5b505af11580156137f7573d5f803e3d5ffd5b5050505050505050565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa158015613845573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138699190614bf5565b6118f85760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff1660058111156138bb576138bb614823565b60058111156138cc576138cc614823565b81526020016001820180546138e090614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461390c90614d18565b80156139575780601f1061392e57610100808354040283529160200191613957565b820191905f5260205f20905b81548152906001019060200180831161393a57829003601f168201915b5050505050815260200160028201805461397090614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461399c90614d18565b80156139e75780601f106139be576101008083540402835291602001916139e7565b820191905f5260205f20905b8154815290600101906020018083116139ca57829003601f168201915b50505050508152602001600382018054613a0090614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054613a2c90614d18565b8015613a775780601f10613a4e57610100808354040283529160200191613a77565b820191905f5260205f20905b815481529060010190602001808311613a5a57829003601f168201915b50505091835250506004828101546001600160a01b03166020830152600583015460408301526006830154606083015260079092015460809091015290915081516005811115613ac957613ac9614823565b149392505050565b806101015f828254613ae39190614ced565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece39060200161143c565b611e888133614234565b613b3082826123c4565b6118f8575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613b673390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b613bb582826123c4565b156118f8575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015613c55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c799190614bf5565b6118f85760405163c4230ae360e01b815260040160405180910390fd5b613c9e61428d565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381165f908152610106602052604081205490819003613d225760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff16613d515760405163c11cb1df60e01b815260040160405180910390fd5b919050565b613d5e613305565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613ccb3390565b5f818152610102602052604080822081516101008101909252805483929190829060ff166005811115613dc857613dc8614823565b6005811115613dd957613dd9614823565b8152602001600182018054613ded90614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054613e1990614d18565b8015613e645780601f10613e3b57610100808354040283529160200191613e64565b820191905f5260205f20905b815481529060010190602001808311613e4757829003601f168201915b50505050508152602001600282018054613e7d90614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054613ea990614d18565b8015613ef45780601f10613ecb57610100808354040283529160200191613ef4565b820191905f5260205f20905b815481529060010190602001808311613ed757829003601f168201915b50505050508152602001600382018054613f0d90614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054613f3990614d18565b8015613f845780601f10613f5b57610100808354040283529160200191613f84565b820191905f5260205f20905b815481529060010190602001808311613f6757829003601f168201915b505050918352505060048201546001600160a01b0316602082015260058083015460408301526006830154606083015260079092015460809091015290915081516005811115613fd657613fd6614823565b1480613ff45750600281516005811115613ff257613ff2614823565b145b80614011575060018151600581111561400f5761400f614823565b145b159392505050565b5f80848614158061402a5750838614155b156140485760405163e5fe884360e01b815260040160405180910390fd5b85915081158061405d575060fb5461ffff1682115b1561407b576040516379b348ff60e11b815260040160405180910390fd5b505f8281526101076020526040812054906140973382846122f9565b60fb546001600160401b039182169250620100009004166140b88483614c3b565b11156140d757604051633e10caad60e21b815260040160405180910390fd5b6140e9673782dace9d90000084614cd6565b341461410857604051635aaa2d1f60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b031663aa9537956040518163ffffffff1660e01b8152600401602060405180830381865afa158015614159573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061417d9190614b97565b6001600160a01b031663b178e38e3360016141988786614c3b565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260ff90911660248301526044820152606401602060405180830381865afa1580156141e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061420d9190614bf5565b61422a57604051633bf053fd60e11b815260040160405180910390fd5b5094509492505050565b61423e82826123c4565b6118f85761424b816142d6565b6142568360206142e8565b60405160200161426792919061506b565b60408051601f198184030181529082905262461bcd60e51b82526118e5916004016150df565b60975460ff166119225760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016118e5565b6060610b2b6001600160a01b03831660145b60605f6142f6836002614cd6565b614301906002614c3b565b6001600160401b038111156143185761431861491d565b6040519080825280601f01601f191660200182016040528015614342576020820181803683370190505b509050600360fc1b815f8151811061435c5761435c614c4e565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061438a5761438a614c4e565b60200101906001600160f81b03191690815f1a9053505f6143ac846002614cd6565b6143b7906001614c3b565b90505b600181111561442e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106143eb576143eb614c4e565b1a60f81b82828151811061440157614401614c4e565b60200101906001600160f81b03191690815f1a90535060049490941c93614427816150f1565b90506143ba565b50831561447d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016118e5565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f602082840312156144de575f80fd5b81356001600160e01b03198116811461447d575f80fd5b8015158114611e88575f80fd5b5f8083601f840112614512575f80fd5b5081356001600160401b03811115614528575f80fd5b60208301915083602082850101111561453f575f80fd5b9250929050565b6001600160a01b0381168114611e88575f80fd5b5f805f806060858703121561456d575f80fd5b8435614578816144f5565b935060208501356001600160401b03811115614592575f80fd5b61459e87828801614502565b90945092505060408501356145b281614546565b939692955090935050565b5f8083601f8401126145cd575f80fd5b5081356001600160401b038111156145e3575f80fd5b6020830191508360208260051b850101111561453f575f80fd5b5f805f805f8060608789031215614612575f80fd5b86356001600160401b0380821115614628575f80fd5b6146348a838b016145bd565b9098509650602089013591508082111561464c575f80fd5b6146588a838b016145bd565b90965094506040890135915080821115614670575f80fd5b5061467d89828a016145bd565b979a9699509497509295939492505050565b5f6020828403121561469f575f80fd5b5035919050565b5f602082840312156146b6575f80fd5b813561ffff8116811461447d575f80fd5b5f80602083850312156146d8575f80fd5b82356001600160401b038111156146ed575f80fd5b6146f9858286016145bd565b90969095509350505050565b5f8060408385031215614716575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b818110156147655783516001600160a01b031683529284019291840191600101614740565b50909695505050505050565b5f8060408385031215614782575f80fd5b82359150602083013561479481614546565b809150509250929050565b5f80602083850312156147b0575f80fd5b82356001600160401b038111156147c5575f80fd5b6146f985828601614502565b5f805f604084860312156147e3575f80fd5b83356001600160401b038111156147f8575f80fd5b61480486828701614502565b909450925050602084013561481881614546565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b6006811061485357634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015614871578181015183820152602001614859565b50505f910152565b5f8151808452614890816020860160208601614857565b601f01601f19169290920160200192915050565b5f6101006148b2838c614837565b8060208401526148c48184018b614879565b905082810360408401526148d8818a614879565b905082810360608401526148ec8189614879565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215614941575f80fd5b81356001600160401b0380821115614957575f80fd5b818401915084601f83011261496a575f80fd5b81358181111561497c5761497c61491d565b604051601f8201601f19908116603f011681019083821181831017156149a4576149a461491d565b816040528281528760208487010111156149bc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f602082840312156149eb575f80fd5b81356001600160401b038116811461447d575f80fd5b5f805f60608486031215614a13575f80fd5b8335614a1e81614546565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b83811015614b0f57603f198984030185528151610100614a79858351614837565b88820151818a870152614a8e82870182614879565b9150508782015185820389870152614aa68282614879565b91505060608083015186830382880152614ac08382614879565b92505050608080830151614ade828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e09182015191909401529386019390860190600101614a58565b509098975050505050505050565b5f60208284031215614b2d575f80fd5b813561447d81614546565b8515158152841515602082015260a060408201525f614b5a60a0830186614879565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f60208284031215614b8c575f80fd5b813561447d816144f5565b5f60208284031215614ba7575f80fd5b815161447d81614546565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f614bed602083018486614bb2565b949350505050565b5f60208284031215614c05575f80fd5b815161447d816144f5565b5f60208284031215614c20575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2b57610b2b614c27565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112614c77575f80fd5b8301803591506001600160401b03821115614c90575f80fd5b60200191503681900382131561453f575f80fd5b818382375f9101908152919050565b604081525f614cc6604083018587614bb2565b9050826020830152949350505050565b8082028115828204841417610b2b57610b2b614c27565b81810381811115610b2b57610b2b614c27565b5f60018201614d1157614d11614c27565b5060010190565b600181811c90821680614d2c57607f821691505b602082108103614d4a57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156116ef575f81815260208120601f850160051c81016020861015614d765750805b601f850160051c820191505b8181101561138f57828155600101614d82565b6001600160401b03831115614dac57614dac61491d565b614dc083614dba8354614d18565b83614d50565b5f601f841160018114614df1575f8515614dda5750838201355b5f19600387901b1c1916600186901b178355614e49565b5f83815260209020601f19861690835b82811015614e215786850135825560209485019460019092019101614e01565b5086821015614e3d575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f614e63604083018587614bb2565b905060018060a01b0383166020830152949350505050565b5f6001600160401b03808316818103614e9657614e96614c27565b6001019392505050565b606081525f614eb360608301888a614bb2565b8281036020840152614ec6818789614bb2565b90508281036040840152614edb818587614bb2565b9998505050505050505050565b81516001600160401b03811115614f0157614f0161491d565b614f1581614f0f8454614d18565b84614d50565b602080601f831160018114614f48575f8415614f315750858301515b5f19600386901b1c1916600185901b17855561138f565b5f85815260208120601f198616915b82811015614f7657888601518255948401946001909101908401614f57565b5085821015614f9357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8183525f6020808501808196508560051b81019150845f5b878110156150225782840389528135601e19883603018112614fdb575f80fd5b870185810190356001600160401b03811115614ff5575f80fd5b803603821315615003575f80fd5b61500e868284614bb2565b9a87019a9550505090840190600101614fbb565b5091979650505050505050565b608081525f61504260808301888a614fa3565b8281036020840152615055818789614fa3565b6040840195909552505060600152949350505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516150a2816017850160208801614857565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516150d3816028840160208801614857565b01602801949350505050565b602081525f61447d6020830184614879565b5f816150ff576150ff614c27565b505f19019056fea264697066735822122038587c5537098698379d47e206c76731944e1671f5e10be7621fd6860ccddd1664736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + Bin: "0x608060405234801562000010575f80fd5b50604051620054dc380380620054dc8339810160408190526200003391620004c6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001f1565b6200010e82620001f1565b620001186200021c565b6200012262000278565b6200012c620002dc565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff00009091166a01000000000000000000006001600160a01b0386160261ffff1916171762010000600160501b03191662320000179055603260fc55620001a25f8462000340565b8015620001e8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620004fc565b6001600160a01b038116620002195760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002765760405162461bcd60e51b815260206004820152602b60248201525f80516020620054bc83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002d25760405162461bcd60e51b815260206004820152602b60248201525f80516020620054bc83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b62000276620003e3565b5f54610100900460ff16620003365760405162461bcd60e51b815260206004820152602b60248201525f80516020620054bc83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200027662000449565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16620003df575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200039e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff166200043d5760405162461bcd60e51b815260206004820152602b60248201525f80516020620054bc83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff16620004a35760405162461bcd60e51b815260206004820152602b60248201525f80516020620054bc83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b0381168114620004c1575f80fd5b919050565b5f8060408385031215620004d8575f80fd5b620004e383620004aa565b9150620004f360208401620004aa565b90509250929050565b614fb2806200050a5f395ff3fe60806040526004361061035b575f3560e01c806383ea2358116101bd578063bb7306bf116100f2578063deacde2b11610092578063ebb5c1741161006d578063ebb5c17414610a64578063f7c0918914610a90578063f90b083814610aa5578063f9c4dda414610ac4575f80fd5b8063deacde2b146109fe578063e0bf8b5314610a11578063e0d7d0e914610a3e575f80fd5b8063c8a00e7a116100cd578063c8a00e7a14610964578063cac8b30614610994578063d547741f146109c0578063d5e1e5ce146109df575f80fd5b8063bb7306bf146108f1578063bc4a3ad51461090c578063c34ade5c14610938575f80fd5b8063998888981161015d578063ab3e71eb11610138578063ab3e71eb14610884578063af533aa814610899578063b01db078146108b8578063b8d2f06c146108d2575f80fd5b806399888898146108335780639ee804cb14610852578063a217fddf14610871575f80fd5b806384b0fa4c1161019857806384b0fa4c146107aa5780638a25bcec146107c057806391d14854146107df5780639344b242146107fe575f80fd5b806383ea23581461073257806384522a6d1461076a5780638456cb5914610796575f80fd5b806349911bfb116102935780635c2c30a511610233578063683547b81161020e578063683547b8146106c757806374338e6d146106f357806377c359e1146107095780637bd977d91461071e575f80fd5b80635c2c30a5146106595780635c975abb1461069157806360c3cf3f146106a8575f80fd5b806358a994ea1161026e57806358a994ea146105c957806359c3c9b7146105e85780635a1239c1146106075780635ae7f25d1461063a575f80fd5b806349911bfb1461055c5780634f59ed801461057157806350d5d7ab1461058c575f80fd5b80632d1dbd74116102fe57806336514d9f116102d957806336514d9f146104e457806336568abe146105035780633f4ba83a14610522578063490ffa3514610536575f80fd5b80632d1dbd74146104845780632d32924f146104995780632f2ff15d146104c5575f80fd5b8063186d954111610339578063186d9541146103eb578063248a9ca31461040a5780632517cfbf14610446578063264f27f314610465575f80fd5b806301ffc9a71461035f578063044d2fe81461039357806313797bff146103ca575b5f80fd5b34801561036a575f80fd5b5061037e610379366004614344565b610afb565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103b26103ad3660046143d0565b610b31565b6040516001600160a01b03909116815260200161038a565b3480156103d5575f80fd5b506103e96103e4366004614473565b610dc6565b005b3480156103f6575f80fd5b506103e9610405366004614505565b61120d565b348015610415575f80fd5b50610438610424366004614505565b5f9081526065602052604090206001015490565b60405190815260200161038a565b348015610451575f80fd5b506103e961046036600461451c565b6112bd565b348015610470575f80fd5b506103e961047f36600461453d565b61131f565b34801561048f575f80fd5b5061043860fd5481565b3480156104a4575f80fd5b506104b86104b336600461457b565b61156a565b60405161038a919061459b565b3480156104d0575f80fd5b506103e96104df3660046145e7565b61169e565b3480156104ef575f80fd5b5061037e6104fe366004614615565b6116c2565b34801561050e575f80fd5b506103e961051d3660046145e7565b6116ef565b34801561052d575f80fd5b506103e9611772565b348015610541575f80fd5b5060fb546103b290600160501b90046001600160a01b031681565b348015610567575f80fd5b5061043860ff5481565b34801561057c575f80fd5b50610438673782dace9d90000081565b348015610597575f80fd5b5060fb546105b1906201000090046001600160401b031681565b6040516001600160401b03909116815260200161038a565b3480156105d4575f80fd5b506103e96105e3366004614647565b61179a565b3480156105f3575f80fd5b506103e9610602366004614505565b611918565b348015610612575f80fd5b50610626610621366004614505565b6119b8565b60405161038a98979695949392919061471a565b348015610645575f80fd5b506103e9610654366004614505565b611b9a565b348015610664575f80fd5b506104386106733660046147a7565b80516020818301810180516101038252928201919093012091525481565b34801561069c575f80fd5b5060975460ff1661037e565b3480156106b3575f80fd5b506103e96106c2366004614851565b611d01565b3480156106d2575f80fd5b506106e66106e1366004614877565b611d7b565b60405161038a91906148a9565b3480156106fe575f80fd5b506104386101005481565b348015610714575f80fd5b5061010154610438565b348015610729575f80fd5b50610438612132565b34801561073d575f80fd5b506103b261074c366004614505565b5f90815261010560205260409020600201546001600160a01b031690565b348015610775575f80fd5b50610438610784366004614505565b6101086020525f908152604090205481565b3480156107a1575f80fd5b506103e9612149565b3480156107b5575f80fd5b506104386101015481565b3480156107cb575f80fd5b506105b16107da366004614877565b61216f565b3480156107ea575f80fd5b5061037e6107f93660046145e7565b61223a565b348015610809575f80fd5b506103b2610818366004614505565b6101096020525f90815260409020546001600160a01b031681565b34801561083e575f80fd5b506106e661084d36600461457b565b612264565b34801561085d575f80fd5b506103e961086c366004614993565b6125af565b34801561087c575f80fd5b506104385f81565b34801561088f575f80fd5b5061043860fc5481565b3480156108a4575f80fd5b506103e96108b3366004614505565b612638565b3480156108c3575f80fd5b50673782dace9d900000610438565b3480156108dd575f80fd5b506103e96108ec366004614505565b61268b565b3480156108fc575f80fd5b506104386729a2241af62c000081565b348015610917575f80fd5b50610438610926366004614505565b6101046020525f908152604090205481565b348015610943575f80fd5b50610438610952366004614505565b5f908152610107602052604090205490565b34801561096f575f80fd5b5061098361097e366004614505565b612716565b60405161038a9594939291906149ae565b34801561099f575f80fd5b506104386109ae366004614993565b6101066020525f908152604090205481565b3480156109cb575f80fd5b506103e96109da3660046145e7565b6127df565b3480156109ea575f80fd5b506104386109f936600461457b565b612803565b6103e9610a0c366004614473565b61282f565b348015610a1c575f80fd5b5060fb54610a2b9061ffff1681565b60405161ffff909116815260200161038a565b348015610a49575f80fd5b50610a52600181565b60405160ff909116815260200161038a565b348015610a6f575f80fd5b50610438610a7e366004614505565b5f908152610108602052604090205490565b348015610a9b575f80fd5b5061043860fe5481565b348015610ab0575f80fd5b506103b2610abf3660046149f2565b612f12565b348015610acf575f80fd5b5061037e610ade366004614993565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b2b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b3a61317b565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb09190614a0d565b604051639f7053f560e01b81529091506001600160a01b03821690639f7053f590610be19088908890600401614a50565b5f604051808303815f87803b158015610bf8575f80fd5b505af1158015610c0a573d5f803e3d5ffd5b50505050610c17836131c1565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c8d9190614a0d565b60fd54604051636a0b688160e01b81526001600482015260248101919091526001600160a01b039190911690636a0b6881906044016020604051808303815f875af1158015610cde573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d029190614a0d565b60fd545f9081526101096020526040902080546001600160a01b0319166001600160a01b038316179055905086610d395780610dae565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dae9190614a0d565b9250610dbc878787876131e8565b5050949350505050565b610dce613376565b610dd661317b565b60fb5460408051633871d0f160e01b81529051610e54923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610e2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4f9190614a6b565b6133cf565b60fc5485908490839081610e688486614a96565b610e729190614a96565b1115610e915760405163525e3de760e01b815260040160405180910390fd5b5f5b83811015610f5a575f6101038b8b84818110610eb157610eb1614aa9565b9050602002810190610ec39190614abd565b604051610ed1929190614aff565b9081526020016040518091039020549050610eeb8161345b565b610ef4816134a7565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b84818110610f2757610f27614aa9565b9050602002810190610f399190614abd565b83604051610f4993929190614b0e565b60405180910390a150600101610e93565b5081156110375760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fb2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd69190614a0d565b6001600160a01b0316638d0d8cb6610ff66729a2241af62c000085614b31565b6040518263ffffffff1660e01b81526004015f604051808303818588803b15801561101f575f80fd5b505af1158015611031573d5f803e3d5ffd5b50505050505b5f5b8281101561112d575f61010389898481811061105757611057614aa9565b90506020028101906110699190614abd565b604051611077929190614aff565b90815260200160405180910390205490506110918161345b565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b834668989848181106110fa576110fa614aa9565b905060200281019061110c9190614abd565b8360405161111c93929190614b0e565b60405180910390a150600101611039565b505f5b818110156111f7575f61010387878481811061114e5761114e614aa9565b90506020028101906111609190614abd565b60405161116e929190614aff565b90815260200160405180910390205490506111888161345b565b611191816134e8565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f8787848181106111c4576111c4614aa9565b90506020028101906111d69190614abd565b836040516111e693929190614b0e565b60405180910390a150600101611130565b50505050611205600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b81529051611262923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610e2b573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb546112db903390600160501b90046001600160a01b0316613677565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c36906020016112b2565b60fb5460408051633871d0f160e01b81529051611374923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610e2b573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa1580156113c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e69190614a6b565b81111561140657604051639519af4360e01b815260040160405180910390fd5b5f5b8181101561155b575f61010385858481811061142657611426614aa9565b90506020028101906114389190614abd565b604051611446929190614aff565b9081526020016040518091039020549050611460816136fc565b61147d576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b1580156114df575f80fd5b505af11580156114f1573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf7985858481811061152857611528614aa9565b905060200281019061153a9190614abd565b8360405161154a93929190614b0e565b60405180910390a150600101611408565b5061156581613947565b505050565b6060825f0361158c576040516334d6e01560e01b815260040160405180910390fd5b5f82611599600186614b48565b6115a39190614b31565b6115ae906001614a96565b90505f6115bb8483614a96565b905060fd5481116115cc57806115d0565b60fd545b90505f8282116115e0575f6115ea565b6115ea8383614b48565b6001600160401b0381111561160157611601614793565b60405190808252806020026020018201604052801561162a578160200160208202803683370190505b509050825b82811015611694575f81815261010960205260409020546001600160a01b03168261165a8684614b48565b8151811061166a5761166a614aa9565b6001600160a01b03909216602092830291909101909101528061168c81614b5b565b91505061162f565b5095945050505050565b5f828152606560205260409020600101546116b881613992565b611565838361399c565b5f61010383836040516116d6929190614aff565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146117645760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61176e8282613a21565b5050565b60fb54611790903390600160501b90046001600160a01b0316613a87565b611798613b0c565b565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180f9190614a0d565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b815260040161183c929190614a50565b5f604051808303815f87803b158015611853575f80fd5b505af1158015611865573d5f803e3d5ffd5b50505050611872816131c1565b61187b33613b5e565b50335f90815261010660209081526040808320548084526101059092529091206001016118a9848683614bf0565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d872697779061190a90879087908790614cab565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b8152905161196d923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610e2b573d5f803e3d5ffd5b806101015f82825461197f9190614a96565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f2906020016112b2565b6101026020525f90815260409020805460018201805460ff90921692916119de90614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0a90614b73565b8015611a555780601f10611a2c57610100808354040283529160200191611a55565b820191905f5260205f20905b815481529060010190602001808311611a3857829003601f168201915b505050505090806002018054611a6a90614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9690614b73565b8015611ae15780601f10611ab857610100808354040283529160200191611ae1565b820191905f5260205f20905b815481529060010190602001808311611ac457829003601f168201915b505050505090806003018054611af690614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2290614b73565b8015611b6d5780601f10611b4457610100808354040283529160200191611b6d565b820191905f5260205f20905b815481529060010190602001808311611b5057829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611ba2613376565b60fb5460408051637a87fa0b60e01b81529051611bf7923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610e2b573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c6c9190614a0d565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611ca4575f80fd5b505af1158015611cb6573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a81604051611cec91815260200190565b60405180910390a1611cfe600160c955565b50565b60fb54611d1f903390600160501b90046001600160a01b0316613a87565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a2906020016112b2565b6060825f03611d9d576040516334d6e01560e01b815260040160405180910390fd5b5f82611daa600186614b48565b611db49190614b31565b90505f611dc18483614a96565b6001600160a01b0387165f9081526101066020526040812054919250819003611dfd5760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311611e195782611e1b565b805b92505f848411611e2b575f611e35565b611e358585614b48565b6001600160401b03811115611e4c57611e4c614793565b604051908082528060200260200182016040528015611e8557816020015b611e726142fa565b815260200190600190039081611e6a5790505b509050845b84811015612125575f84815261010760205260408120805483908110611eb257611eb2614aa9565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff166005811115611ef457611ef4614699565b6005811115611f0557611f05614699565b8152602001600182018054611f1990614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054611f4590614b73565b8015611f905780601f10611f6757610100808354040283529160200191611f90565b820191905f5260205f20905b815481529060010190602001808311611f7357829003601f168201915b50505050508152602001600282018054611fa990614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd590614b73565b80156120205780601f10611ff757610100808354040283529160200191612020565b820191905f5260205f20905b81548152906001019060200180831161200357829003601f168201915b5050505050815260200160038201805461203990614b73565b80601f016020809104026020016040519081016040528092919081815260200182805461206590614b73565b80156120b05780601f10612087576101008083540402835291602001916120b0565b820191905f5260205f20905b81548152906001019060200180831161209357829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152836120f68985614b48565b8151811061210657612106614aa9565b602002602001018190525050808061211d90614b5b565b915050611e8a565b5098975050505050505050565b5f6101005460ff546121449190614b48565b905090565b60fb54612167903390600160501b90046001600160a01b0316613a87565b611798613bcc565b5f818311156121915760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f9081526101066020526040812054906121c1825f908152610107602052604090205490565b90508084116121d057836121d2565b805b93505f855b8581101561222f575f848152610107602052604081208054839081106121ff576121ff614aa9565b905f5260205f200154905061221381613c09565b15612226578261222281614cd6565b9350505b506001016121d7565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f03612286576040516334d6e01560e01b815260040160405180910390fd5b5f82612293600186614b48565b61229d9190614b31565b6122a8906001614a96565b90505f6122b58483614a96565b905060fe5481116122c657806122ca565b60fe545b90505f846001600160401b038111156122e5576122e5614793565b60405190808252806020026020018201604052801561231e57816020015b61230b6142fa565b8152602001906001900390816123035790505b5090505f835b838110156125a357612335816136fc565b15612591575f818152610102602052604090819020815161010081019092528054829060ff16600581111561236c5761236c614699565b600581111561237d5761237d614699565b815260200160018201805461239190614b73565b80601f01602080910402602001604051908101604052809291908181526020018280546123bd90614b73565b80156124085780601f106123df57610100808354040283529160200191612408565b820191905f5260205f20905b8154815290600101906020018083116123eb57829003601f168201915b5050505050815260200160028201805461242190614b73565b80601f016020809104026020016040519081016040528092919081815260200182805461244d90614b73565b80156124985780601f1061246f57610100808354040283529160200191612498565b820191905f5260205f20905b81548152906001019060200180831161247b57829003601f168201915b505050505081526020016003820180546124b190614b73565b80601f01602080910402602001604051908101604052809291908181526020018280546124dd90614b73565b80156125285780601f106124ff57610100808354040283529160200191612528565b820191905f5260205f20905b81548152906001019060200180831161250b57829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152835184908490811061257757612577614aa9565b6020026020010181905250818061258d90614b5b565b9250505b8061259b81614b5b565b915050612324565b50815295945050505050565b5f6125b981613992565b6125c2826131c1565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb54612656903390600160501b90046001600160a01b0316613677565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b4906020016112b2565b60fb5460408051637a87fa0b60e01b815290516126e0923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610e2b573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da9906020016112b2565b6101056020525f90815260409020805460018201805460ff808416946101009094041692919061274590614b73565b80601f016020809104026020016040519081016040528092919081815260200182805461277190614b73565b80156127bc5780601f10612793576101008083540402835291602001916127bc565b820191905f5260205f20905b81548152906001019060200180831161279f57829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f828152606560205260409020600101546127f981613992565b6115658383613a21565b610107602052815f5260405f20818154811061281d575f80fd5b905f5260205f20015f91509150505481565b612837613376565b61283f61317b565b5f61284933613b5e565b90505f8061285988878686613e8f565b915091505f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d39190614a0d565b90505f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612927573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061294b9190614a0d565b90505f5b84811015612daa57816001600160a01b0316639f55941b8d8d8481811061297857612978614aa9565b905060200281019061298a9190614abd565b8d8d8681811061299c5761299c614aa9565b90506020028101906129ae9190614abd565b8d8d888181106129c0576129c0614aa9565b90506020028101906129d29190614abd565b6040518763ffffffff1660e01b81526004016129f396959493929190614cfb565b5f604051808303815f87803b158015612a0a575f80fd5b505af1158015612a1c573d5f803e3d5ffd5b505050505f836001600160a01b0316637f70ce0d6001898589612a3f9190614a96565b60fe546040516001600160e01b031960e087901b16815260ff90941660048501526024840192909252604483015260648201526084016020604051808303815f875af1158015612a91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ab59190614a0d565b604080516101008101909152909150805f81526020018e8e85818110612add57612add614aa9565b9050602002810190612aef9190614abd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018c8c85818110612b3a57612b3a614aa9565b9050602002810190612b4c9190614abd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018a8a85818110612b9757612b97614aa9565b9050602002810190612ba99190614abd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b03841660208084019190915260408084018c905260608401839052608090930182905260fe54825261010290522081518154829060ff19166001836005811115612c3157612c31614699565b021790555060208201516001820190612c4a9082614d43565b5060408201516002820190612c5f9082614d43565b5060608201516003820190612c749082614d43565b5060808201516004820180546001600160a01b0319166001600160a01b0390921691909117905560a0820151600582015560c0820151600682015560e09091015160079091015560fe546101038e8e85818110612cd357612cd3614aa9565b9050602002810190612ce59190614abd565b604051612cf3929190614aff565b9081526040805160209281900383019020929092555f898152610107825291822060fe5481546001810183559184529190922090910155337fab5128638b64e6216e80dfafa70d3cb6d54913a536dc41e76eb4a04cfbe979cf8e8e85818110612d5e57612d5e614aa9565b9050602002810190612d709190614abd565b60fe54604051612d8293929190614b0e565b60405180910390a260fe8054905f612d9983614b5b565b91905055508160010191505061294f565b5060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dfc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e209190614a0d565b6001600160a01b031663eda0ae128560fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ea49190614a6b565b612eae9190614b31565b8d8d8d8d8b8a6040518863ffffffff1660e01b8152600401612ed596959493929190614e8a565b5f604051808303818588803b158015612eec575f80fd5b505af1158015612efe573d5f803e3d5ffd5b50505050505050505050611205600160c955565b5f80612f1d33613b5e565b5f818152610105602052604090205490915083151561010090910460ff16151503612f5b57604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fac573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fd09190614a6b565b5f8281526101086020526040902054612fe99190614a96565b4310156130095760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b031691508215613100576001600160a01b038216311561308857816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613071575f80fd5b505af1158015613083573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130fd9190614a0d565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff16156117985760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161175b565b6001600160a01b038116611cfe5760405163d92e233d60e01b815260040160405180910390fd5b6040518060a00160405280600115158152602001851515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b0384166020808401919091523360409384015260fd548252610105815290829020835181549285015161ffff1990931690151561ff001916176101009215159290920291909117815590820151600182019061329e9082614d43565b5060608201516002820180546001600160a01b03199081166001600160a01b039384161790915560809093015160039092018054909316911617905560fd8054335f9081526101066020908152604080832084905592825261010890529081204390558154919061330e83614b5b565b9190505550336001600160a01b03167f55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd482600160fd5461334e9190614b48565b604080516001600160a01b03909316835260208301919091528715159082015260600161190a565b600260c954036133c85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161175b565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa15801561341a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061343e9190614ec6565b6115655760405163168dfea160e01b815260040160405180910390fd5b80158061348957505f818152610102602052604081205460ff16600581111561348657613486614699565b14155b15611cfe576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff8054845261010490925282208390558054916134e083614b5b565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa158015613565573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135899190614a0d565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061360c9190614a6b565b61361e90673782dace9d900000614b48565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b15801561365b575f80fd5b505af115801561366d573d5f803e3d5ffd5b5050505050505050565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa1580156136bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136df9190614ec6565b61176e5760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff16600581111561373157613731614699565b600581111561374257613742614699565b815260200160018201805461375690614b73565b80601f016020809104026020016040519081016040528092919081815260200182805461378290614b73565b80156137cd5780601f106137a4576101008083540402835291602001916137cd565b820191905f5260205f20905b8154815290600101906020018083116137b057829003601f168201915b505050505081526020016002820180546137e690614b73565b80601f016020809104026020016040519081016040528092919081815260200182805461381290614b73565b801561385d5780601f106138345761010080835404028352916020019161385d565b820191905f5260205f20905b81548152906001019060200180831161384057829003601f168201915b5050505050815260200160038201805461387690614b73565b80601f01602080910402602001604051908101604052809291908181526020018280546138a290614b73565b80156138ed5780601f106138c4576101008083540402835291602001916138ed565b820191905f5260205f20905b8154815290600101906020018083116138d057829003601f168201915b50505091835250506004828101546001600160a01b0316602083015260058301546040830152600683015460608301526007909201546080909101529091508151600581111561393f5761393f614699565b149392505050565b806101015f8282546139599190614b48565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece3906020016112b2565b611cfe81336140aa565b6139a6828261223a565b61176e575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556139dd3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b613a2b828261223a565b1561176e575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015613acb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613aef9190614ec6565b61176e5760405163c4230ae360e01b815260040160405180910390fd5b613b14614103565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381165f908152610106602052604081205490819003613b985760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff16613bc75760405163c11cb1df60e01b815260040160405180910390fd5b919050565b613bd461317b565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613b413390565b5f818152610102602052604080822081516101008101909252805483929190829060ff166005811115613c3e57613c3e614699565b6005811115613c4f57613c4f614699565b8152602001600182018054613c6390614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054613c8f90614b73565b8015613cda5780601f10613cb157610100808354040283529160200191613cda565b820191905f5260205f20905b815481529060010190602001808311613cbd57829003601f168201915b50505050508152602001600282018054613cf390614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054613d1f90614b73565b8015613d6a5780601f10613d4157610100808354040283529160200191613d6a565b820191905f5260205f20905b815481529060010190602001808311613d4d57829003601f168201915b50505050508152602001600382018054613d8390614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054613daf90614b73565b8015613dfa5780601f10613dd157610100808354040283529160200191613dfa565b820191905f5260205f20905b815481529060010190602001808311613ddd57829003601f168201915b505050918352505060048201546001600160a01b0316602082015260058083015460408301526006830154606083015260079092015460809091015290915081516005811115613e4c57613e4c614699565b1480613e6a5750600281516005811115613e6857613e68614699565b145b80613e875750600181516005811115613e8557613e85614699565b145b159392505050565b5f808486141580613ea05750838614155b15613ebe5760405163e5fe884360e01b815260040160405180910390fd5b859150811580613ed3575060fb5461ffff1682115b15613ef1576040516379b348ff60e11b815260040160405180910390fd5b505f828152610107602052604081205490613f0d33828461216f565b60fb546001600160401b03918216925062010000900416613f2e8483614a96565b1115613f4d57604051633e10caad60e21b815260040160405180910390fd5b613f5f673782dace9d90000084614b31565b3414613f7e57604051635aaa2d1f60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b031663aa9537956040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fcf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ff39190614a0d565b6001600160a01b031663b178e38e33600161400e8786614a96565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260ff90911660248301526044820152606401602060405180830381865afa15801561405f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140839190614ec6565b6140a057604051633bf053fd60e11b815260040160405180910390fd5b5094509492505050565b6140b4828261223a565b61176e576140c18161414c565b6140cc83602061415e565b6040516020016140dd929190614ee1565b60408051601f198184030181529082905262461bcd60e51b825261175b91600401614f55565b60975460ff166117985760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161175b565b6060610b2b6001600160a01b03831660145b60605f61416c836002614b31565b614177906002614a96565b6001600160401b0381111561418e5761418e614793565b6040519080825280601f01601f1916602001820160405280156141b8576020820181803683370190505b509050600360fc1b815f815181106141d2576141d2614aa9565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061420057614200614aa9565b60200101906001600160f81b03191690815f1a9053505f614222846002614b31565b61422d906001614a96565b90505b60018111156142a4576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061426157614261614aa9565b1a60f81b82828151811061427757614277614aa9565b60200101906001600160f81b03191690815f1a90535060049490941c9361429d81614f67565b9050614230565b5083156142f35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161175b565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f60208284031215614354575f80fd5b81356001600160e01b0319811681146142f3575f80fd5b8015158114611cfe575f80fd5b5f8083601f840112614388575f80fd5b5081356001600160401b0381111561439e575f80fd5b6020830191508360208285010111156143b5575f80fd5b9250929050565b6001600160a01b0381168114611cfe575f80fd5b5f805f80606085870312156143e3575f80fd5b84356143ee8161436b565b935060208501356001600160401b03811115614408575f80fd5b61441487828801614378565b9094509250506040850135614428816143bc565b939692955090935050565b5f8083601f840112614443575f80fd5b5081356001600160401b03811115614459575f80fd5b6020830191508360208260051b85010111156143b5575f80fd5b5f805f805f8060608789031215614488575f80fd5b86356001600160401b038082111561449e575f80fd5b6144aa8a838b01614433565b909850965060208901359150808211156144c2575f80fd5b6144ce8a838b01614433565b909650945060408901359150808211156144e6575f80fd5b506144f389828a01614433565b979a9699509497509295939492505050565b5f60208284031215614515575f80fd5b5035919050565b5f6020828403121561452c575f80fd5b813561ffff811681146142f3575f80fd5b5f806020838503121561454e575f80fd5b82356001600160401b03811115614563575f80fd5b61456f85828601614433565b90969095509350505050565b5f806040838503121561458c575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b818110156145db5783516001600160a01b0316835292840192918401916001016145b6565b50909695505050505050565b5f80604083850312156145f8575f80fd5b82359150602083013561460a816143bc565b809150509250929050565b5f8060208385031215614626575f80fd5b82356001600160401b0381111561463b575f80fd5b61456f85828601614378565b5f805f60408486031215614659575f80fd5b83356001600160401b0381111561466e575f80fd5b61467a86828701614378565b909450925050602084013561468e816143bc565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b600681106146c957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b838110156146e75781810151838201526020016146cf565b50505f910152565b5f81518084526147068160208601602086016146cd565b601f01601f19169290920160200192915050565b5f610100614728838c6146ad565b80602084015261473a8184018b6146ef565b9050828103604084015261474e818a6146ef565b9050828103606084015261476281896146ef565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156147b7575f80fd5b81356001600160401b03808211156147cd575f80fd5b818401915084601f8301126147e0575f80fd5b8135818111156147f2576147f2614793565b604051601f8201601f19908116603f0116810190838211818310171561481a5761481a614793565b81604052828152876020848701011115614832575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f60208284031215614861575f80fd5b81356001600160401b03811681146142f3575f80fd5b5f805f60608486031215614889575f80fd5b8335614894816143bc565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b8381101561498557603f1989840301855281516101006148ef8583516146ad565b88820151818a870152614904828701826146ef565b915050878201518582038987015261491c82826146ef565b9150506060808301518683038288015261493683826146ef565b92505050608080830151614954828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e091820151919094015293860193908601906001016148ce565b509098975050505050505050565b5f602082840312156149a3575f80fd5b81356142f3816143bc565b8515158152841515602082015260a060408201525f6149d060a08301866146ef565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f60208284031215614a02575f80fd5b81356142f38161436b565b5f60208284031215614a1d575f80fd5b81516142f3816143bc565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f614a63602083018486614a28565b949350505050565b5f60208284031215614a7b575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2b57610b2b614a82565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112614ad2575f80fd5b8301803591506001600160401b03821115614aeb575f80fd5b6020019150368190038213156143b5575f80fd5b818382375f9101908152919050565b604081525f614b21604083018587614a28565b9050826020830152949350505050565b8082028115828204841417610b2b57610b2b614a82565b81810381811115610b2b57610b2b614a82565b5f60018201614b6c57614b6c614a82565b5060010190565b600181811c90821680614b8757607f821691505b602082108103614ba557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115611565575f81815260208120601f850160051c81016020861015614bd15750805b601f850160051c820191505b8181101561120557828155600101614bdd565b6001600160401b03831115614c0757614c07614793565b614c1b83614c158354614b73565b83614bab565b5f601f841160018114614c4c575f8515614c355750838201355b5f19600387901b1c1916600186901b178355614ca4565b5f83815260209020601f19861690835b82811015614c7c5786850135825560209485019460019092019101614c5c565b5086821015614c98575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f614cbe604083018587614a28565b905060018060a01b0383166020830152949350505050565b5f6001600160401b03808316818103614cf157614cf1614a82565b6001019392505050565b606081525f614d0e60608301888a614a28565b8281036020840152614d21818789614a28565b90508281036040840152614d36818587614a28565b9998505050505050505050565b81516001600160401b03811115614d5c57614d5c614793565b614d7081614d6a8454614b73565b84614bab565b602080601f831160018114614da3575f8415614d8c5750858301515b5f19600386901b1c1916600185901b178555611205565b5f85815260208120601f198616915b82811015614dd157888601518255948401946001909101908401614db2565b5085821015614dee57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8183525f6020808501808196508560051b81019150845f5b87811015614e7d5782840389528135601e19883603018112614e36575f80fd5b870185810190356001600160401b03811115614e50575f80fd5b803603821315614e5e575f80fd5b614e69868284614a28565b9a87019a9550505090840190600101614e16565b5091979650505050505050565b608081525f614e9d60808301888a614dfe565b8281036020840152614eb0818789614dfe565b6040840195909552505060600152949350505050565b5f60208284031215614ed6575f80fd5b81516142f38161436b565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351614f188160178501602088016146cd565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614f498160288401602088016146cd565b01602801949350505050565b602081525f6142f360208301846146ef565b5f81614f7557614f75614a82565b505f19019056fea26469706673582212209919b19ae8f93b9076ed967daa469dc7dff46dbd2dc14bd48df335b2ce89a79f64736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // PermissionlessNodeRegistryABI is the input ABI used to generate the binding from. diff --git a/testing/deployHelper_test.go b/testing/deployHelper_test.go index dc00480ed..4a5d1578d 100644 --- a/testing/deployHelper_test.go +++ b/testing/deployHelper_test.go @@ -4,13 +4,17 @@ import ( "context" "crypto/ecdsa" "fmt" + "log" "math/big" "testing" "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/crypto" "github.com/ethereum/go-ethereum/ethclient" + "github.com/stader-labs/stader-node/shared/services" + "github.com/stader-labs/stader-node/stader-lib/node" "github.com/stader-labs/stader-node/testing/contracts" "github.com/stretchr/testify/require" "github.com/urfave/cli" @@ -79,7 +83,7 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { require.Nil(t, err) // Deploy permissionless pool - permissionlessPool, _, _, err := contracts.DeployPermissionlessPool(auth, client, fromAddress, fromAddress) + permissionlessPool, _, _, err := contracts.DeployPermissionlessPool(auth, client, fromAddress, staderCfAddress) require.Nil(t, err) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) @@ -94,6 +98,27 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { fmt.Printf("Api contract from %s\n", auth.From.Hex()) fmt.Printf("DeployETHX to %s\n", ethXAddr.Hex()) fmt.Printf("DeployStaderConfig to %s\n", staderCfAddress.Hex()) + + prn, err := services.GetPermissionlessNodeRegistry(c) + require.Nil(t, err) + + w, err := services.GetWallet(c) + require.Nil(t, err) + + nodePrivateKey, err := w.GetNodePrivateKey() + require.Nil(t, err) + + acc, err := w.GetNodeAccount() + require.Nil(t, err) + + send1EthTransaction(client, fromAddress, acc.Address, privateKey, chainID) + + auth, err = GetNextTransaction(client, acc.Address, nodePrivateKey, chainID) + require.Nil(t, err) + + // npr.GetRoleAdmin() + _, err = node.OnboardNodeOperator(prn, true, "stader", acc.Address, auth) + require.Nil(t, err) } // GetNextTransaction returns the next transaction in the pending transaction queue @@ -117,3 +142,41 @@ func GetNextTransaction(client *ethclient.Client, fromAddress common.Address, pr return auth, nil } + +func send1EthTransaction(client *ethclient.Client, + fromAddress common.Address, + toAddress common.Address, + privateKey *ecdsa.PrivateKey, + chainID *big.Int, +) { + // nonce + nonce, err := client.PendingNonceAt(context.Background(), fromAddress) + if err != nil { + + log.Fatal(err) + } + + gasLimit := uint64(10000000) // in units + gasPrice := big.NewInt(10000000000) // in wei + + var data []byte + tx := types.NewTransaction( + nonce, + toAddress, + big.NewInt(9000000000000000000), + gasLimit, + gasPrice, + data) + + signedTx, err := types.SignTx(tx, types.NewEIP155Signer(chainID), privateKey) + if err != nil { + log.Fatal(err) + } + + err = client.SendTransaction(context.Background(), signedTx) + if err != nil { + log.Fatal(err) + } + + fmt.Printf("tx sent: %s", signedTx.Hash().Hex()) // tx sent: 0x77006fcb3938f648e2cc65bafd27dec30b9bfbe9df41f78498b9c8b7322a249e +} diff --git a/testing/node_test.go b/testing/node_test.go index 70f41da30..1c4952503 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -11,6 +11,8 @@ import ( "github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context" "github.com/mitchellh/go-homedir" "github.com/sirupsen/logrus" + + //stader/register.go "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" @@ -31,11 +33,7 @@ func TestNodeSuite(t *testing.T) { } func (s *StaderNodeSuite) TestNodeDaemon() { - time.Sleep(time.Second * 5) -} - -func (s *StaderNodeSuite) TestNodeRegistry() { - time.Sleep(time.Second * 5) + time.Sleep(time.Second * 20) } // run once, before test suite methods @@ -62,9 +60,7 @@ func (s *StaderNodeSuite) SetupSuite() { logrus.Println("Done SetupSuite()") go func() { - a := os.Args - // run(time.Minute*1, s.done, func() { err := s.app.Run([]string{ a[0], "node", From 0d6db0f368801bfa6cbe441b877858f378821def Mon Sep 17 00:00:00 2001 From: batphonghan Date: Mon, 19 Jun 2023 17:39:12 +0700 Subject: [PATCH 23/90] Update URL --- shared/services/bc-manager.go | 2 + shared/services/config/stadernode-config.go | 2 +- shared/services/requirements.go | 3 +- stader-lib/node/operator.go | 3 +- stader/node/node.go | 10 +- .../contracts/PermissionlessNodeRegistry.go | 2 +- testing/contracts/PoolUtils.go | 2463 +++++++++++++++++ testing/deployHelper_test.go | 43 +- testing/httptest/http.go | 51 + testing/node_test.go | 7 +- 10 files changed, 2572 insertions(+), 14 deletions(-) create mode 100644 testing/contracts/PoolUtils.go create mode 100644 testing/httptest/http.go diff --git a/shared/services/bc-manager.go b/shared/services/bc-manager.go index 3b9eac114..89995f4a4 100644 --- a/shared/services/bc-manager.go +++ b/shared/services/bc-manager.go @@ -75,6 +75,8 @@ func NewBeaconClientManager(cfg *config.StaderConfig) (*BeaconClientManager, err return nil, fmt.Errorf("Unknown Consensus client mode '%v'", cfg.ConsensusClientMode.Value) } + primaryProvider = "http://127.0.0.1:51799" + // Fallback CC var fallbackProvider string if cfg.UseFallbackClients.Value == true { diff --git a/shared/services/config/stadernode-config.go b/shared/services/config/stadernode-config.go index b01014a1f..4b350da61 100644 --- a/shared/services/config/stadernode-config.go +++ b/shared/services/config/stadernode-config.go @@ -260,7 +260,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Devnet: "https://1r6l0g1nkd.execute-api.us-east-1.amazonaws.com/prod", config.Network_Mainnet: "https://1r6l0g1nkd.execute-api.us-east-1.amazonaws.com/prod", config.Network_Zhejiang: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", - config.Network_Local: "0xAb2A01BC351770D09611Ac80f1DE076D56E0487d", + config.Network_Local: "http://localhost:9088", }, } } diff --git a/shared/services/requirements.go b/shared/services/requirements.go index 65c75becb..be5d80bd7 100644 --- a/shared/services/requirements.go +++ b/shared/services/requirements.go @@ -178,7 +178,8 @@ func WaitNodeRegistered(c *cli.Context, operatorAddress common.Address, verbose if err != nil { return err } - if operatorId.Cmp(big.NewInt(0)) != 0 { + + if operatorId.Cmp(big.NewInt(0)) == 0 { return nil } if verbose { diff --git a/stader-lib/node/operator.go b/stader-lib/node/operator.go index bfd088bc9..72ea28b3c 100644 --- a/stader-lib/node/operator.go +++ b/stader-lib/node/operator.go @@ -2,13 +2,14 @@ package node import ( "fmt" + "math/big" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/stader-labs/stader-node/stader-lib/contracts" "github.com/stader-labs/stader-node/stader-lib/stader" types2 "github.com/stader-labs/stader-node/stader-lib/types" - "math/big" ) func EstimateOnboardNodeOperator(pnr *stader.PermissionlessNodeRegistryContractManager, mevSocialize bool, operatorName string, operatorRewarderAddress common.Address, opts *bind.TransactOpts) (stader.GasInfo, error) { diff --git a/stader/node/node.go b/stader/node/node.go index fdcc3896e..79781a109 100644 --- a/stader/node/node.go +++ b/stader/node/node.go @@ -141,11 +141,11 @@ func run(c *cli.Context) error { continue } else { // Check the BC status - err := services.WaitBeaconClientSynced(c, false) // Force refresh the primary / fallback BC status - if err != nil { - errorLog.Println(err) - continue - } + // err := services.WaitBeaconClientSynced(c, false) // Force refresh the primary / fallback BC status + // if err != nil { + // errorLog.Println(err) + // continue + // } } publicKey, err := stader.GetPublicKey(c) diff --git a/testing/contracts/PermissionlessNodeRegistry.go b/testing/contracts/PermissionlessNodeRegistry.go index e99f278d1..f5f412b0a 100644 --- a/testing/contracts/PermissionlessNodeRegistry.go +++ b/testing/contracts/PermissionlessNodeRegistry.go @@ -44,7 +44,7 @@ type Validator struct { // PermissionlessNodeRegistryMetaData contains all meta data concerning the PermissionlessNodeRegistry contract. var PermissionlessNodeRegistryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CooldownNotComplete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicatePoolIDOrPoolNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InSufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBondEthValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidKeyCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartAndEndIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MisMatchingInputKeysSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoChangeInState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSDCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorAlreadyOnBoardedInProtocol\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorIsDeactivate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorNotOnBoarded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PageNumberIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PubkeyAlreadyExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyVerifiedKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyWithdrawnKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UNEXPECTED_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"maxKeyLimitReached\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"AddedValidatorKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"DecreasedTotalActiveValidatorCount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"IncreasedTotalActiveValidatorCount\",\"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\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nodeRewardAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"OnboardedOperator\",\"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\":\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredCollateralToPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"batchKeyDepositLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedInputKeyCountLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"UpdatedMaxNonTerminalKeyPerOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"UpdatedNextQueuedValidatorIndex\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardAddress\",\"type\":\"address\"}],\"name\":\"UpdatedOperatorDetails\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"UpdatedSocializingPoolState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"}],\"name\":\"UpdatedValidatorDepositBlock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedVerifiedKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedWithdrawnKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedAsFrontRunned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedReadyToDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorStatusMarkedAsInvalidSignature\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COLLATERAL_ETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRONT_RUN_PENALTY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ID\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_depositSignature\",\"type\":\"bytes[]\"}],\"name\":\"addValidatorKeys\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"changeSocializingPoolState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllNodeELVaultAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorRewardAddress\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalKeys\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getSocializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsByOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"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\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"increaseTotalActiveValidatorCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inputKeyCountLimit\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_readyToDepositPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_frontRunPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_invalidSignaturePubkey\",\"type\":\"bytes[]\"}],\"name\":\"markValidatorReadyToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNonTerminalKeyPerOperator\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextQueuedValidatorIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextValidatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nodeELRewardVaultByOperatorId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_operatorRewardAddress\",\"type\":\"address\"}],\"name\":\"onboardNodeOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorIDByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"operatorStructById\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"operatorRewardAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorAddress\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queuedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"socializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"totalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferCollateralToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"}],\"name\":\"updateDepositStatusAndBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_inputKeyCountLimit\",\"type\":\"uint16\"}],\"name\":\"updateInputKeyCountLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"updateMaxNonTerminalKeyPerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"updateNextQueuedValidatorIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_rewardAddress\",\"type\":\"address\"}],\"name\":\"updateOperatorDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateVerifiedKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"validatorIdByPubkey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorIdsByOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorRegistry\",\"outputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifiedKeyBatchSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"withdrawnValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b50604051620054dc380380620054dc8339810160408190526200003391620004c6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001f1565b6200010e82620001f1565b620001186200021c565b6200012262000278565b6200012c620002dc565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff00009091166a01000000000000000000006001600160a01b0386160261ffff1916171762010000600160501b03191662320000179055603260fc55620001a25f8462000340565b8015620001e8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620004fc565b6001600160a01b038116620002195760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002765760405162461bcd60e51b815260206004820152602b60248201525f80516020620054bc83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002d25760405162461bcd60e51b815260206004820152602b60248201525f80516020620054bc83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b62000276620003e3565b5f54610100900460ff16620003365760405162461bcd60e51b815260206004820152602b60248201525f80516020620054bc83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200027662000449565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16620003df575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200039e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff166200043d5760405162461bcd60e51b815260206004820152602b60248201525f80516020620054bc83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff16620004a35760405162461bcd60e51b815260206004820152602b60248201525f80516020620054bc83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b0381168114620004c1575f80fd5b919050565b5f8060408385031215620004d8575f80fd5b620004e383620004aa565b9150620004f360208401620004aa565b90509250929050565b614fb2806200050a5f395ff3fe60806040526004361061035b575f3560e01c806383ea2358116101bd578063bb7306bf116100f2578063deacde2b11610092578063ebb5c1741161006d578063ebb5c17414610a64578063f7c0918914610a90578063f90b083814610aa5578063f9c4dda414610ac4575f80fd5b8063deacde2b146109fe578063e0bf8b5314610a11578063e0d7d0e914610a3e575f80fd5b8063c8a00e7a116100cd578063c8a00e7a14610964578063cac8b30614610994578063d547741f146109c0578063d5e1e5ce146109df575f80fd5b8063bb7306bf146108f1578063bc4a3ad51461090c578063c34ade5c14610938575f80fd5b8063998888981161015d578063ab3e71eb11610138578063ab3e71eb14610884578063af533aa814610899578063b01db078146108b8578063b8d2f06c146108d2575f80fd5b806399888898146108335780639ee804cb14610852578063a217fddf14610871575f80fd5b806384b0fa4c1161019857806384b0fa4c146107aa5780638a25bcec146107c057806391d14854146107df5780639344b242146107fe575f80fd5b806383ea23581461073257806384522a6d1461076a5780638456cb5914610796575f80fd5b806349911bfb116102935780635c2c30a511610233578063683547b81161020e578063683547b8146106c757806374338e6d146106f357806377c359e1146107095780637bd977d91461071e575f80fd5b80635c2c30a5146106595780635c975abb1461069157806360c3cf3f146106a8575f80fd5b806358a994ea1161026e57806358a994ea146105c957806359c3c9b7146105e85780635a1239c1146106075780635ae7f25d1461063a575f80fd5b806349911bfb1461055c5780634f59ed801461057157806350d5d7ab1461058c575f80fd5b80632d1dbd74116102fe57806336514d9f116102d957806336514d9f146104e457806336568abe146105035780633f4ba83a14610522578063490ffa3514610536575f80fd5b80632d1dbd74146104845780632d32924f146104995780632f2ff15d146104c5575f80fd5b8063186d954111610339578063186d9541146103eb578063248a9ca31461040a5780632517cfbf14610446578063264f27f314610465575f80fd5b806301ffc9a71461035f578063044d2fe81461039357806313797bff146103ca575b5f80fd5b34801561036a575f80fd5b5061037e610379366004614344565b610afb565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103b26103ad3660046143d0565b610b31565b6040516001600160a01b03909116815260200161038a565b3480156103d5575f80fd5b506103e96103e4366004614473565b610dc6565b005b3480156103f6575f80fd5b506103e9610405366004614505565b61120d565b348015610415575f80fd5b50610438610424366004614505565b5f9081526065602052604090206001015490565b60405190815260200161038a565b348015610451575f80fd5b506103e961046036600461451c565b6112bd565b348015610470575f80fd5b506103e961047f36600461453d565b61131f565b34801561048f575f80fd5b5061043860fd5481565b3480156104a4575f80fd5b506104b86104b336600461457b565b61156a565b60405161038a919061459b565b3480156104d0575f80fd5b506103e96104df3660046145e7565b61169e565b3480156104ef575f80fd5b5061037e6104fe366004614615565b6116c2565b34801561050e575f80fd5b506103e961051d3660046145e7565b6116ef565b34801561052d575f80fd5b506103e9611772565b348015610541575f80fd5b5060fb546103b290600160501b90046001600160a01b031681565b348015610567575f80fd5b5061043860ff5481565b34801561057c575f80fd5b50610438673782dace9d90000081565b348015610597575f80fd5b5060fb546105b1906201000090046001600160401b031681565b6040516001600160401b03909116815260200161038a565b3480156105d4575f80fd5b506103e96105e3366004614647565b61179a565b3480156105f3575f80fd5b506103e9610602366004614505565b611918565b348015610612575f80fd5b50610626610621366004614505565b6119b8565b60405161038a98979695949392919061471a565b348015610645575f80fd5b506103e9610654366004614505565b611b9a565b348015610664575f80fd5b506104386106733660046147a7565b80516020818301810180516101038252928201919093012091525481565b34801561069c575f80fd5b5060975460ff1661037e565b3480156106b3575f80fd5b506103e96106c2366004614851565b611d01565b3480156106d2575f80fd5b506106e66106e1366004614877565b611d7b565b60405161038a91906148a9565b3480156106fe575f80fd5b506104386101005481565b348015610714575f80fd5b5061010154610438565b348015610729575f80fd5b50610438612132565b34801561073d575f80fd5b506103b261074c366004614505565b5f90815261010560205260409020600201546001600160a01b031690565b348015610775575f80fd5b50610438610784366004614505565b6101086020525f908152604090205481565b3480156107a1575f80fd5b506103e9612149565b3480156107b5575f80fd5b506104386101015481565b3480156107cb575f80fd5b506105b16107da366004614877565b61216f565b3480156107ea575f80fd5b5061037e6107f93660046145e7565b61223a565b348015610809575f80fd5b506103b2610818366004614505565b6101096020525f90815260409020546001600160a01b031681565b34801561083e575f80fd5b506106e661084d36600461457b565b612264565b34801561085d575f80fd5b506103e961086c366004614993565b6125af565b34801561087c575f80fd5b506104385f81565b34801561088f575f80fd5b5061043860fc5481565b3480156108a4575f80fd5b506103e96108b3366004614505565b612638565b3480156108c3575f80fd5b50673782dace9d900000610438565b3480156108dd575f80fd5b506103e96108ec366004614505565b61268b565b3480156108fc575f80fd5b506104386729a2241af62c000081565b348015610917575f80fd5b50610438610926366004614505565b6101046020525f908152604090205481565b348015610943575f80fd5b50610438610952366004614505565b5f908152610107602052604090205490565b34801561096f575f80fd5b5061098361097e366004614505565b612716565b60405161038a9594939291906149ae565b34801561099f575f80fd5b506104386109ae366004614993565b6101066020525f908152604090205481565b3480156109cb575f80fd5b506103e96109da3660046145e7565b6127df565b3480156109ea575f80fd5b506104386109f936600461457b565b612803565b6103e9610a0c366004614473565b61282f565b348015610a1c575f80fd5b5060fb54610a2b9061ffff1681565b60405161ffff909116815260200161038a565b348015610a49575f80fd5b50610a52600181565b60405160ff909116815260200161038a565b348015610a6f575f80fd5b50610438610a7e366004614505565b5f908152610108602052604090205490565b348015610a9b575f80fd5b5061043860fe5481565b348015610ab0575f80fd5b506103b2610abf3660046149f2565b612f12565b348015610acf575f80fd5b5061037e610ade366004614993565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b2b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b3a61317b565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb09190614a0d565b604051639f7053f560e01b81529091506001600160a01b03821690639f7053f590610be19088908890600401614a50565b5f604051808303815f87803b158015610bf8575f80fd5b505af1158015610c0a573d5f803e3d5ffd5b50505050610c17836131c1565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c8d9190614a0d565b60fd54604051636a0b688160e01b81526001600482015260248101919091526001600160a01b039190911690636a0b6881906044016020604051808303815f875af1158015610cde573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d029190614a0d565b60fd545f9081526101096020526040902080546001600160a01b0319166001600160a01b038316179055905086610d395780610dae565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dae9190614a0d565b9250610dbc878787876131e8565b5050949350505050565b610dce613376565b610dd661317b565b60fb5460408051633871d0f160e01b81529051610e54923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610e2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4f9190614a6b565b6133cf565b60fc5485908490839081610e688486614a96565b610e729190614a96565b1115610e915760405163525e3de760e01b815260040160405180910390fd5b5f5b83811015610f5a575f6101038b8b84818110610eb157610eb1614aa9565b9050602002810190610ec39190614abd565b604051610ed1929190614aff565b9081526020016040518091039020549050610eeb8161345b565b610ef4816134a7565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b84818110610f2757610f27614aa9565b9050602002810190610f399190614abd565b83604051610f4993929190614b0e565b60405180910390a150600101610e93565b5081156110375760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fb2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd69190614a0d565b6001600160a01b0316638d0d8cb6610ff66729a2241af62c000085614b31565b6040518263ffffffff1660e01b81526004015f604051808303818588803b15801561101f575f80fd5b505af1158015611031573d5f803e3d5ffd5b50505050505b5f5b8281101561112d575f61010389898481811061105757611057614aa9565b90506020028101906110699190614abd565b604051611077929190614aff565b90815260200160405180910390205490506110918161345b565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b834668989848181106110fa576110fa614aa9565b905060200281019061110c9190614abd565b8360405161111c93929190614b0e565b60405180910390a150600101611039565b505f5b818110156111f7575f61010387878481811061114e5761114e614aa9565b90506020028101906111609190614abd565b60405161116e929190614aff565b90815260200160405180910390205490506111888161345b565b611191816134e8565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f8787848181106111c4576111c4614aa9565b90506020028101906111d69190614abd565b836040516111e693929190614b0e565b60405180910390a150600101611130565b50505050611205600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b81529051611262923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610e2b573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb546112db903390600160501b90046001600160a01b0316613677565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c36906020016112b2565b60fb5460408051633871d0f160e01b81529051611374923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610e2b573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa1580156113c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e69190614a6b565b81111561140657604051639519af4360e01b815260040160405180910390fd5b5f5b8181101561155b575f61010385858481811061142657611426614aa9565b90506020028101906114389190614abd565b604051611446929190614aff565b9081526020016040518091039020549050611460816136fc565b61147d576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b1580156114df575f80fd5b505af11580156114f1573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf7985858481811061152857611528614aa9565b905060200281019061153a9190614abd565b8360405161154a93929190614b0e565b60405180910390a150600101611408565b5061156581613947565b505050565b6060825f0361158c576040516334d6e01560e01b815260040160405180910390fd5b5f82611599600186614b48565b6115a39190614b31565b6115ae906001614a96565b90505f6115bb8483614a96565b905060fd5481116115cc57806115d0565b60fd545b90505f8282116115e0575f6115ea565b6115ea8383614b48565b6001600160401b0381111561160157611601614793565b60405190808252806020026020018201604052801561162a578160200160208202803683370190505b509050825b82811015611694575f81815261010960205260409020546001600160a01b03168261165a8684614b48565b8151811061166a5761166a614aa9565b6001600160a01b03909216602092830291909101909101528061168c81614b5b565b91505061162f565b5095945050505050565b5f828152606560205260409020600101546116b881613992565b611565838361399c565b5f61010383836040516116d6929190614aff565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146117645760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61176e8282613a21565b5050565b60fb54611790903390600160501b90046001600160a01b0316613a87565b611798613b0c565b565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180f9190614a0d565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b815260040161183c929190614a50565b5f604051808303815f87803b158015611853575f80fd5b505af1158015611865573d5f803e3d5ffd5b50505050611872816131c1565b61187b33613b5e565b50335f90815261010660209081526040808320548084526101059092529091206001016118a9848683614bf0565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d872697779061190a90879087908790614cab565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b8152905161196d923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610e2b573d5f803e3d5ffd5b806101015f82825461197f9190614a96565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f2906020016112b2565b6101026020525f90815260409020805460018201805460ff90921692916119de90614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0a90614b73565b8015611a555780601f10611a2c57610100808354040283529160200191611a55565b820191905f5260205f20905b815481529060010190602001808311611a3857829003601f168201915b505050505090806002018054611a6a90614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9690614b73565b8015611ae15780601f10611ab857610100808354040283529160200191611ae1565b820191905f5260205f20905b815481529060010190602001808311611ac457829003601f168201915b505050505090806003018054611af690614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2290614b73565b8015611b6d5780601f10611b4457610100808354040283529160200191611b6d565b820191905f5260205f20905b815481529060010190602001808311611b5057829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611ba2613376565b60fb5460408051637a87fa0b60e01b81529051611bf7923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610e2b573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c6c9190614a0d565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611ca4575f80fd5b505af1158015611cb6573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a81604051611cec91815260200190565b60405180910390a1611cfe600160c955565b50565b60fb54611d1f903390600160501b90046001600160a01b0316613a87565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a2906020016112b2565b6060825f03611d9d576040516334d6e01560e01b815260040160405180910390fd5b5f82611daa600186614b48565b611db49190614b31565b90505f611dc18483614a96565b6001600160a01b0387165f9081526101066020526040812054919250819003611dfd5760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311611e195782611e1b565b805b92505f848411611e2b575f611e35565b611e358585614b48565b6001600160401b03811115611e4c57611e4c614793565b604051908082528060200260200182016040528015611e8557816020015b611e726142fa565b815260200190600190039081611e6a5790505b509050845b84811015612125575f84815261010760205260408120805483908110611eb257611eb2614aa9565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff166005811115611ef457611ef4614699565b6005811115611f0557611f05614699565b8152602001600182018054611f1990614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054611f4590614b73565b8015611f905780601f10611f6757610100808354040283529160200191611f90565b820191905f5260205f20905b815481529060010190602001808311611f7357829003601f168201915b50505050508152602001600282018054611fa990614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd590614b73565b80156120205780601f10611ff757610100808354040283529160200191612020565b820191905f5260205f20905b81548152906001019060200180831161200357829003601f168201915b5050505050815260200160038201805461203990614b73565b80601f016020809104026020016040519081016040528092919081815260200182805461206590614b73565b80156120b05780601f10612087576101008083540402835291602001916120b0565b820191905f5260205f20905b81548152906001019060200180831161209357829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152836120f68985614b48565b8151811061210657612106614aa9565b602002602001018190525050808061211d90614b5b565b915050611e8a565b5098975050505050505050565b5f6101005460ff546121449190614b48565b905090565b60fb54612167903390600160501b90046001600160a01b0316613a87565b611798613bcc565b5f818311156121915760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f9081526101066020526040812054906121c1825f908152610107602052604090205490565b90508084116121d057836121d2565b805b93505f855b8581101561222f575f848152610107602052604081208054839081106121ff576121ff614aa9565b905f5260205f200154905061221381613c09565b15612226578261222281614cd6565b9350505b506001016121d7565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f03612286576040516334d6e01560e01b815260040160405180910390fd5b5f82612293600186614b48565b61229d9190614b31565b6122a8906001614a96565b90505f6122b58483614a96565b905060fe5481116122c657806122ca565b60fe545b90505f846001600160401b038111156122e5576122e5614793565b60405190808252806020026020018201604052801561231e57816020015b61230b6142fa565b8152602001906001900390816123035790505b5090505f835b838110156125a357612335816136fc565b15612591575f818152610102602052604090819020815161010081019092528054829060ff16600581111561236c5761236c614699565b600581111561237d5761237d614699565b815260200160018201805461239190614b73565b80601f01602080910402602001604051908101604052809291908181526020018280546123bd90614b73565b80156124085780601f106123df57610100808354040283529160200191612408565b820191905f5260205f20905b8154815290600101906020018083116123eb57829003601f168201915b5050505050815260200160028201805461242190614b73565b80601f016020809104026020016040519081016040528092919081815260200182805461244d90614b73565b80156124985780601f1061246f57610100808354040283529160200191612498565b820191905f5260205f20905b81548152906001019060200180831161247b57829003601f168201915b505050505081526020016003820180546124b190614b73565b80601f01602080910402602001604051908101604052809291908181526020018280546124dd90614b73565b80156125285780601f106124ff57610100808354040283529160200191612528565b820191905f5260205f20905b81548152906001019060200180831161250b57829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152835184908490811061257757612577614aa9565b6020026020010181905250818061258d90614b5b565b9250505b8061259b81614b5b565b915050612324565b50815295945050505050565b5f6125b981613992565b6125c2826131c1565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb54612656903390600160501b90046001600160a01b0316613677565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b4906020016112b2565b60fb5460408051637a87fa0b60e01b815290516126e0923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610e2b573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da9906020016112b2565b6101056020525f90815260409020805460018201805460ff808416946101009094041692919061274590614b73565b80601f016020809104026020016040519081016040528092919081815260200182805461277190614b73565b80156127bc5780601f10612793576101008083540402835291602001916127bc565b820191905f5260205f20905b81548152906001019060200180831161279f57829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f828152606560205260409020600101546127f981613992565b6115658383613a21565b610107602052815f5260405f20818154811061281d575f80fd5b905f5260205f20015f91509150505481565b612837613376565b61283f61317b565b5f61284933613b5e565b90505f8061285988878686613e8f565b915091505f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d39190614a0d565b90505f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612927573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061294b9190614a0d565b90505f5b84811015612daa57816001600160a01b0316639f55941b8d8d8481811061297857612978614aa9565b905060200281019061298a9190614abd565b8d8d8681811061299c5761299c614aa9565b90506020028101906129ae9190614abd565b8d8d888181106129c0576129c0614aa9565b90506020028101906129d29190614abd565b6040518763ffffffff1660e01b81526004016129f396959493929190614cfb565b5f604051808303815f87803b158015612a0a575f80fd5b505af1158015612a1c573d5f803e3d5ffd5b505050505f836001600160a01b0316637f70ce0d6001898589612a3f9190614a96565b60fe546040516001600160e01b031960e087901b16815260ff90941660048501526024840192909252604483015260648201526084016020604051808303815f875af1158015612a91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ab59190614a0d565b604080516101008101909152909150805f81526020018e8e85818110612add57612add614aa9565b9050602002810190612aef9190614abd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018c8c85818110612b3a57612b3a614aa9565b9050602002810190612b4c9190614abd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018a8a85818110612b9757612b97614aa9565b9050602002810190612ba99190614abd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b03841660208084019190915260408084018c905260608401839052608090930182905260fe54825261010290522081518154829060ff19166001836005811115612c3157612c31614699565b021790555060208201516001820190612c4a9082614d43565b5060408201516002820190612c5f9082614d43565b5060608201516003820190612c749082614d43565b5060808201516004820180546001600160a01b0319166001600160a01b0390921691909117905560a0820151600582015560c0820151600682015560e09091015160079091015560fe546101038e8e85818110612cd357612cd3614aa9565b9050602002810190612ce59190614abd565b604051612cf3929190614aff565b9081526040805160209281900383019020929092555f898152610107825291822060fe5481546001810183559184529190922090910155337fab5128638b64e6216e80dfafa70d3cb6d54913a536dc41e76eb4a04cfbe979cf8e8e85818110612d5e57612d5e614aa9565b9050602002810190612d709190614abd565b60fe54604051612d8293929190614b0e565b60405180910390a260fe8054905f612d9983614b5b565b91905055508160010191505061294f565b5060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dfc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e209190614a0d565b6001600160a01b031663eda0ae128560fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ea49190614a6b565b612eae9190614b31565b8d8d8d8d8b8a6040518863ffffffff1660e01b8152600401612ed596959493929190614e8a565b5f604051808303818588803b158015612eec575f80fd5b505af1158015612efe573d5f803e3d5ffd5b50505050505050505050611205600160c955565b5f80612f1d33613b5e565b5f818152610105602052604090205490915083151561010090910460ff16151503612f5b57604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fac573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fd09190614a6b565b5f8281526101086020526040902054612fe99190614a96565b4310156130095760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b031691508215613100576001600160a01b038216311561308857816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613071575f80fd5b505af1158015613083573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130fd9190614a0d565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff16156117985760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161175b565b6001600160a01b038116611cfe5760405163d92e233d60e01b815260040160405180910390fd5b6040518060a00160405280600115158152602001851515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b0384166020808401919091523360409384015260fd548252610105815290829020835181549285015161ffff1990931690151561ff001916176101009215159290920291909117815590820151600182019061329e9082614d43565b5060608201516002820180546001600160a01b03199081166001600160a01b039384161790915560809093015160039092018054909316911617905560fd8054335f9081526101066020908152604080832084905592825261010890529081204390558154919061330e83614b5b565b9190505550336001600160a01b03167f55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd482600160fd5461334e9190614b48565b604080516001600160a01b03909316835260208301919091528715159082015260600161190a565b600260c954036133c85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161175b565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa15801561341a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061343e9190614ec6565b6115655760405163168dfea160e01b815260040160405180910390fd5b80158061348957505f818152610102602052604081205460ff16600581111561348657613486614699565b14155b15611cfe576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff8054845261010490925282208390558054916134e083614b5b565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa158015613565573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135899190614a0d565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061360c9190614a6b565b61361e90673782dace9d900000614b48565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b15801561365b575f80fd5b505af115801561366d573d5f803e3d5ffd5b5050505050505050565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa1580156136bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136df9190614ec6565b61176e5760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff16600581111561373157613731614699565b600581111561374257613742614699565b815260200160018201805461375690614b73565b80601f016020809104026020016040519081016040528092919081815260200182805461378290614b73565b80156137cd5780601f106137a4576101008083540402835291602001916137cd565b820191905f5260205f20905b8154815290600101906020018083116137b057829003601f168201915b505050505081526020016002820180546137e690614b73565b80601f016020809104026020016040519081016040528092919081815260200182805461381290614b73565b801561385d5780601f106138345761010080835404028352916020019161385d565b820191905f5260205f20905b81548152906001019060200180831161384057829003601f168201915b5050505050815260200160038201805461387690614b73565b80601f01602080910402602001604051908101604052809291908181526020018280546138a290614b73565b80156138ed5780601f106138c4576101008083540402835291602001916138ed565b820191905f5260205f20905b8154815290600101906020018083116138d057829003601f168201915b50505091835250506004828101546001600160a01b0316602083015260058301546040830152600683015460608301526007909201546080909101529091508151600581111561393f5761393f614699565b149392505050565b806101015f8282546139599190614b48565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece3906020016112b2565b611cfe81336140aa565b6139a6828261223a565b61176e575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556139dd3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b613a2b828261223a565b1561176e575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015613acb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613aef9190614ec6565b61176e5760405163c4230ae360e01b815260040160405180910390fd5b613b14614103565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381165f908152610106602052604081205490819003613b985760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff16613bc75760405163c11cb1df60e01b815260040160405180910390fd5b919050565b613bd461317b565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613b413390565b5f818152610102602052604080822081516101008101909252805483929190829060ff166005811115613c3e57613c3e614699565b6005811115613c4f57613c4f614699565b8152602001600182018054613c6390614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054613c8f90614b73565b8015613cda5780601f10613cb157610100808354040283529160200191613cda565b820191905f5260205f20905b815481529060010190602001808311613cbd57829003601f168201915b50505050508152602001600282018054613cf390614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054613d1f90614b73565b8015613d6a5780601f10613d4157610100808354040283529160200191613d6a565b820191905f5260205f20905b815481529060010190602001808311613d4d57829003601f168201915b50505050508152602001600382018054613d8390614b73565b80601f0160208091040260200160405190810160405280929190818152602001828054613daf90614b73565b8015613dfa5780601f10613dd157610100808354040283529160200191613dfa565b820191905f5260205f20905b815481529060010190602001808311613ddd57829003601f168201915b505050918352505060048201546001600160a01b0316602082015260058083015460408301526006830154606083015260079092015460809091015290915081516005811115613e4c57613e4c614699565b1480613e6a5750600281516005811115613e6857613e68614699565b145b80613e875750600181516005811115613e8557613e85614699565b145b159392505050565b5f808486141580613ea05750838614155b15613ebe5760405163e5fe884360e01b815260040160405180910390fd5b859150811580613ed3575060fb5461ffff1682115b15613ef1576040516379b348ff60e11b815260040160405180910390fd5b505f828152610107602052604081205490613f0d33828461216f565b60fb546001600160401b03918216925062010000900416613f2e8483614a96565b1115613f4d57604051633e10caad60e21b815260040160405180910390fd5b613f5f673782dace9d90000084614b31565b3414613f7e57604051635aaa2d1f60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b031663aa9537956040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fcf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ff39190614a0d565b6001600160a01b031663b178e38e33600161400e8786614a96565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260ff90911660248301526044820152606401602060405180830381865afa15801561405f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140839190614ec6565b6140a057604051633bf053fd60e11b815260040160405180910390fd5b5094509492505050565b6140b4828261223a565b61176e576140c18161414c565b6140cc83602061415e565b6040516020016140dd929190614ee1565b60408051601f198184030181529082905262461bcd60e51b825261175b91600401614f55565b60975460ff166117985760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161175b565b6060610b2b6001600160a01b03831660145b60605f61416c836002614b31565b614177906002614a96565b6001600160401b0381111561418e5761418e614793565b6040519080825280601f01601f1916602001820160405280156141b8576020820181803683370190505b509050600360fc1b815f815181106141d2576141d2614aa9565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061420057614200614aa9565b60200101906001600160f81b03191690815f1a9053505f614222846002614b31565b61422d906001614a96565b90505b60018111156142a4576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061426157614261614aa9565b1a60f81b82828151811061427757614277614aa9565b60200101906001600160f81b03191690815f1a90535060049490941c9361429d81614f67565b9050614230565b5083156142f35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161175b565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f60208284031215614354575f80fd5b81356001600160e01b0319811681146142f3575f80fd5b8015158114611cfe575f80fd5b5f8083601f840112614388575f80fd5b5081356001600160401b0381111561439e575f80fd5b6020830191508360208285010111156143b5575f80fd5b9250929050565b6001600160a01b0381168114611cfe575f80fd5b5f805f80606085870312156143e3575f80fd5b84356143ee8161436b565b935060208501356001600160401b03811115614408575f80fd5b61441487828801614378565b9094509250506040850135614428816143bc565b939692955090935050565b5f8083601f840112614443575f80fd5b5081356001600160401b03811115614459575f80fd5b6020830191508360208260051b85010111156143b5575f80fd5b5f805f805f8060608789031215614488575f80fd5b86356001600160401b038082111561449e575f80fd5b6144aa8a838b01614433565b909850965060208901359150808211156144c2575f80fd5b6144ce8a838b01614433565b909650945060408901359150808211156144e6575f80fd5b506144f389828a01614433565b979a9699509497509295939492505050565b5f60208284031215614515575f80fd5b5035919050565b5f6020828403121561452c575f80fd5b813561ffff811681146142f3575f80fd5b5f806020838503121561454e575f80fd5b82356001600160401b03811115614563575f80fd5b61456f85828601614433565b90969095509350505050565b5f806040838503121561458c575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b818110156145db5783516001600160a01b0316835292840192918401916001016145b6565b50909695505050505050565b5f80604083850312156145f8575f80fd5b82359150602083013561460a816143bc565b809150509250929050565b5f8060208385031215614626575f80fd5b82356001600160401b0381111561463b575f80fd5b61456f85828601614378565b5f805f60408486031215614659575f80fd5b83356001600160401b0381111561466e575f80fd5b61467a86828701614378565b909450925050602084013561468e816143bc565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b600681106146c957634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b838110156146e75781810151838201526020016146cf565b50505f910152565b5f81518084526147068160208601602086016146cd565b601f01601f19169290920160200192915050565b5f610100614728838c6146ad565b80602084015261473a8184018b6146ef565b9050828103604084015261474e818a6146ef565b9050828103606084015261476281896146ef565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f602082840312156147b7575f80fd5b81356001600160401b03808211156147cd575f80fd5b818401915084601f8301126147e0575f80fd5b8135818111156147f2576147f2614793565b604051601f8201601f19908116603f0116810190838211818310171561481a5761481a614793565b81604052828152876020848701011115614832575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f60208284031215614861575f80fd5b81356001600160401b03811681146142f3575f80fd5b5f805f60608486031215614889575f80fd5b8335614894816143bc565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b8381101561498557603f1989840301855281516101006148ef8583516146ad565b88820151818a870152614904828701826146ef565b915050878201518582038987015261491c82826146ef565b9150506060808301518683038288015261493683826146ef565b92505050608080830151614954828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e091820151919094015293860193908601906001016148ce565b509098975050505050505050565b5f602082840312156149a3575f80fd5b81356142f3816143bc565b8515158152841515602082015260a060408201525f6149d060a08301866146ef565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f60208284031215614a02575f80fd5b81356142f38161436b565b5f60208284031215614a1d575f80fd5b81516142f3816143bc565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f614a63602083018486614a28565b949350505050565b5f60208284031215614a7b575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2b57610b2b614a82565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112614ad2575f80fd5b8301803591506001600160401b03821115614aeb575f80fd5b6020019150368190038213156143b5575f80fd5b818382375f9101908152919050565b604081525f614b21604083018587614a28565b9050826020830152949350505050565b8082028115828204841417610b2b57610b2b614a82565b81810381811115610b2b57610b2b614a82565b5f60018201614b6c57614b6c614a82565b5060010190565b600181811c90821680614b8757607f821691505b602082108103614ba557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115611565575f81815260208120601f850160051c81016020861015614bd15750805b601f850160051c820191505b8181101561120557828155600101614bdd565b6001600160401b03831115614c0757614c07614793565b614c1b83614c158354614b73565b83614bab565b5f601f841160018114614c4c575f8515614c355750838201355b5f19600387901b1c1916600186901b178355614ca4565b5f83815260209020601f19861690835b82811015614c7c5786850135825560209485019460019092019101614c5c565b5086821015614c98575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f614cbe604083018587614a28565b905060018060a01b0383166020830152949350505050565b5f6001600160401b03808316818103614cf157614cf1614a82565b6001019392505050565b606081525f614d0e60608301888a614a28565b8281036020840152614d21818789614a28565b90508281036040840152614d36818587614a28565b9998505050505050505050565b81516001600160401b03811115614d5c57614d5c614793565b614d7081614d6a8454614b73565b84614bab565b602080601f831160018114614da3575f8415614d8c5750858301515b5f19600386901b1c1916600185901b178555611205565b5f85815260208120601f198616915b82811015614dd157888601518255948401946001909101908401614db2565b5085821015614dee57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8183525f6020808501808196508560051b81019150845f5b87811015614e7d5782840389528135601e19883603018112614e36575f80fd5b870185810190356001600160401b03811115614e50575f80fd5b803603821315614e5e575f80fd5b614e69868284614a28565b9a87019a9550505090840190600101614e16565b5091979650505050505050565b608081525f614e9d60808301888a614dfe565b8281036020840152614eb0818789614dfe565b6040840195909552505060600152949350505050565b5f60208284031215614ed6575f80fd5b81516142f38161436b565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351614f188160178501602088016146cd565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614f498160288401602088016146cd565b01602801949350505050565b602081525f6142f360208301846146ef565b5f81614f7557614f75614a82565b505f19019056fea26469706673582212209919b19ae8f93b9076ed967daa469dc7dff46dbd2dc14bd48df335b2ce89a79f64736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + Bin: "0x608060405234801562000010575f80fd5b506040516200524a3803806200524a8339810160408190526200003391620004c6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001f1565b6200010e82620001f1565b620001186200021c565b6200012262000278565b6200012c620002dc565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff00009091166a01000000000000000000006001600160a01b0386160261ffff1916171762010000600160501b03191662320000179055603260fc55620001a25f8462000340565b8015620001e8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620004fc565b6001600160a01b038116620002195760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002765760405162461bcd60e51b815260206004820152602b60248201525f805160206200522a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002d25760405162461bcd60e51b815260206004820152602b60248201525f805160206200522a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b62000276620003e3565b5f54610100900460ff16620003365760405162461bcd60e51b815260206004820152602b60248201525f805160206200522a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200027662000449565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16620003df575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200039e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff166200043d5760405162461bcd60e51b815260206004820152602b60248201525f805160206200522a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff16620004a35760405162461bcd60e51b815260206004820152602b60248201525f805160206200522a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b0381168114620004c1575f80fd5b919050565b5f8060408385031215620004d8575f80fd5b620004e383620004aa565b9150620004f360208401620004aa565b90509250929050565b614d20806200050a5f395ff3fe60806040526004361061035b575f3560e01c806383ea2358116101bd578063bb7306bf116100f2578063deacde2b11610092578063ebb5c1741161006d578063ebb5c17414610a64578063f7c0918914610a90578063f90b083814610aa5578063f9c4dda414610ac4575f80fd5b8063deacde2b146109fe578063e0bf8b5314610a11578063e0d7d0e914610a3e575f80fd5b8063c8a00e7a116100cd578063c8a00e7a14610964578063cac8b30614610994578063d547741f146109c0578063d5e1e5ce146109df575f80fd5b8063bb7306bf146108f1578063bc4a3ad51461090c578063c34ade5c14610938575f80fd5b8063998888981161015d578063ab3e71eb11610138578063ab3e71eb14610884578063af533aa814610899578063b01db078146108b8578063b8d2f06c146108d2575f80fd5b806399888898146108335780639ee804cb14610852578063a217fddf14610871575f80fd5b806384b0fa4c1161019857806384b0fa4c146107aa5780638a25bcec146107c057806391d14854146107df5780639344b242146107fe575f80fd5b806383ea23581461073257806384522a6d1461076a5780638456cb5914610796575f80fd5b806349911bfb116102935780635c2c30a511610233578063683547b81161020e578063683547b8146106c757806374338e6d146106f357806377c359e1146107095780637bd977d91461071e575f80fd5b80635c2c30a5146106595780635c975abb1461069157806360c3cf3f146106a8575f80fd5b806358a994ea1161026e57806358a994ea146105c957806359c3c9b7146105e85780635a1239c1146106075780635ae7f25d1461063a575f80fd5b806349911bfb1461055c5780634f59ed801461057157806350d5d7ab1461058c575f80fd5b80632d1dbd74116102fe57806336514d9f116102d957806336514d9f146104e457806336568abe146105035780633f4ba83a14610522578063490ffa3514610536575f80fd5b80632d1dbd74146104845780632d32924f146104995780632f2ff15d146104c5575f80fd5b8063186d954111610339578063186d9541146103eb578063248a9ca31461040a5780632517cfbf14610446578063264f27f314610465575f80fd5b806301ffc9a71461035f578063044d2fe81461039357806313797bff146103ca575b5f80fd5b34801561036a575f80fd5b5061037e6103793660046140b2565b610afb565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103b26103ad36600461413e565b610b31565b6040516001600160a01b03909116815260200161038a565b3480156103d5575f80fd5b506103e96103e43660046141e1565b610cc2565b005b3480156103f6575f80fd5b506103e9610405366004614273565b611109565b348015610415575f80fd5b50610438610424366004614273565b5f9081526065602052604090206001015490565b60405190815260200161038a565b348015610451575f80fd5b506103e961046036600461428a565b6111b9565b348015610470575f80fd5b506103e961047f3660046142ab565b61121b565b34801561048f575f80fd5b5061043860fd5481565b3480156104a4575f80fd5b506104b86104b33660046142e9565b611466565b60405161038a9190614309565b3480156104d0575f80fd5b506103e96104df366004614355565b61159a565b3480156104ef575f80fd5b5061037e6104fe366004614383565b6115be565b34801561050e575f80fd5b506103e961051d366004614355565b6115eb565b34801561052d575f80fd5b506103e961166e565b348015610541575f80fd5b5060fb546103b290600160501b90046001600160a01b031681565b348015610567575f80fd5b5061043860ff5481565b34801561057c575f80fd5b50610438673782dace9d90000081565b348015610597575f80fd5b5060fb546105b1906201000090046001600160401b031681565b6040516001600160401b03909116815260200161038a565b3480156105d4575f80fd5b506103e96105e33660046143b5565b611696565b3480156105f3575f80fd5b506103e9610602366004614273565b611814565b348015610612575f80fd5b50610626610621366004614273565b6118b4565b60405161038a989796959493929190614488565b348015610645575f80fd5b506103e9610654366004614273565b611a96565b348015610664575f80fd5b50610438610673366004614515565b80516020818301810180516101038252928201919093012091525481565b34801561069c575f80fd5b5060975460ff1661037e565b3480156106b3575f80fd5b506103e96106c23660046145bf565b611bfd565b3480156106d2575f80fd5b506106e66106e13660046145e5565b611c77565b60405161038a9190614617565b3480156106fe575f80fd5b506104386101005481565b348015610714575f80fd5b5061010154610438565b348015610729575f80fd5b5061043861202e565b34801561073d575f80fd5b506103b261074c366004614273565b5f90815261010560205260409020600201546001600160a01b031690565b348015610775575f80fd5b50610438610784366004614273565b6101086020525f908152604090205481565b3480156107a1575f80fd5b506103e9612045565b3480156107b5575f80fd5b506104386101015481565b3480156107cb575f80fd5b506105b16107da3660046145e5565b61206b565b3480156107ea575f80fd5b5061037e6107f9366004614355565b612136565b348015610809575f80fd5b506103b2610818366004614273565b6101096020525f90815260409020546001600160a01b031681565b34801561083e575f80fd5b506106e661084d3660046142e9565b612160565b34801561085d575f80fd5b506103e961086c366004614701565b6124ab565b34801561087c575f80fd5b506104385f81565b34801561088f575f80fd5b5061043860fc5481565b3480156108a4575f80fd5b506103e96108b3366004614273565b612534565b3480156108c3575f80fd5b50673782dace9d900000610438565b3480156108dd575f80fd5b506103e96108ec366004614273565b612587565b3480156108fc575f80fd5b506104386729a2241af62c000081565b348015610917575f80fd5b50610438610926366004614273565b6101046020525f908152604090205481565b348015610943575f80fd5b50610438610952366004614273565b5f908152610107602052604090205490565b34801561096f575f80fd5b5061098361097e366004614273565b612612565b60405161038a95949392919061471c565b34801561099f575f80fd5b506104386109ae366004614701565b6101066020525f908152604090205481565b3480156109cb575f80fd5b506103e96109da366004614355565b6126db565b3480156109ea575f80fd5b506104386109f93660046142e9565b6126ff565b6103e9610a0c3660046141e1565b61272b565b348015610a1c575f80fd5b5060fb54610a2b9061ffff1681565b60405161ffff909116815260200161038a565b348015610a49575f80fd5b50610a52600181565b60405160ff909116815260200161038a565b348015610a6f575f80fd5b50610438610a7e366004614273565b5f908152610108602052604090205490565b348015610a9b575f80fd5b5061043860fe5481565b348015610ab0575f80fd5b506103b2610abf366004614760565b612e0e565b348015610acf575f80fd5b5061037e610ade366004614701565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b2b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b3a613077565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb0919061477b565b905060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c27919061477b565b604051636fc4c27f60e11b8152600160048201526001600160a01b039182169183169063df8984fe90602401602060405180830381865afa158015610c6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c92919061477b565b6001600160a01b031614610cb9576040516303b8ffef60e41b815260040160405180910390fd5b95945050505050565b610cca6130bd565b610cd2613077565b60fb5460408051633871d0f160e01b81529051610d50923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610d27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4b9190614796565b613116565b60fc5485908490839081610d6484866147c1565b610d6e91906147c1565b1115610d8d5760405163525e3de760e01b815260040160405180910390fd5b5f5b83811015610e56575f6101038b8b84818110610dad57610dad6147d4565b9050602002810190610dbf91906147e8565b604051610dcd92919061482a565b9081526020016040518091039020549050610de7816131a2565b610df0816131ee565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b84818110610e2357610e236147d4565b9050602002810190610e3591906147e8565b83604051610e4593929190614861565b60405180910390a150600101610d8f565b508115610f335760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ed2919061477b565b6001600160a01b0316638d0d8cb6610ef26729a2241af62c000085614884565b6040518263ffffffff1660e01b81526004015f604051808303818588803b158015610f1b575f80fd5b505af1158015610f2d573d5f803e3d5ffd5b50505050505b5f5b82811015611029575f610103898984818110610f5357610f536147d4565b9050602002810190610f6591906147e8565b604051610f7392919061482a565b9081526020016040518091039020549050610f8d816131a2565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b83466898984818110610ff657610ff66147d4565b905060200281019061100891906147e8565b8360405161101893929190614861565b60405180910390a150600101610f35565b505f5b818110156110f3575f61010387878481811061104a5761104a6147d4565b905060200281019061105c91906147e8565b60405161106a92919061482a565b9081526020016040518091039020549050611084816131a2565b61108d8161322f565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f8787848181106110c0576110c06147d4565b90506020028101906110d291906147e8565b836040516110e293929190614861565b60405180910390a15060010161102c565b50505050611101600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b8152905161115e923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610d27573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb546111d7903390600160501b90046001600160a01b03166133be565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c36906020016111ae565b60fb5460408051633871d0f160e01b81529051611270923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610d27573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa1580156112be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e29190614796565b81111561130257604051639519af4360e01b815260040160405180910390fd5b5f5b81811015611457575f610103858584818110611322576113226147d4565b905060200281019061133491906147e8565b60405161134292919061482a565b908152602001604051809103902054905061135c81613443565b611379576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b1580156113db575f80fd5b505af11580156113ed573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf79858584818110611424576114246147d4565b905060200281019061143691906147e8565b8360405161144693929190614861565b60405180910390a150600101611304565b506114618161368e565b505050565b6060825f03611488576040516334d6e01560e01b815260040160405180910390fd5b5f8261149560018661489b565b61149f9190614884565b6114aa9060016147c1565b90505f6114b784836147c1565b905060fd5481116114c857806114cc565b60fd545b90505f8282116114dc575f6114e6565b6114e6838361489b565b6001600160401b038111156114fd576114fd614501565b604051908082528060200260200182016040528015611526578160200160208202803683370190505b509050825b82811015611590575f81815261010960205260409020546001600160a01b031682611556868461489b565b81518110611566576115666147d4565b6001600160a01b039092166020928302919091019091015280611588816148ae565b91505061152b565b5095945050505050565b5f828152606560205260409020600101546115b4816136d9565b61146183836136e3565b5f61010383836040516115d292919061482a565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146116605760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61166a8282613768565b5050565b60fb5461168c903390600160501b90046001600160a01b03166137ce565b611694613853565b565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170b919061477b565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b81526004016117389291906148c6565b5f604051808303815f87803b15801561174f575f80fd5b505af1158015611761573d5f803e3d5ffd5b5050505061176e816138a5565b611777336138cc565b50335f90815261010660209081526040808320548084526101059092529091206001016117a584868361495e565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d872697779061180690879087908790614a19565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b81529051611869923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610d27573d5f803e3d5ffd5b806101015f82825461187b91906147c1565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f2906020016111ae565b6101026020525f90815260409020805460018201805460ff90921692916118da906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611906906148e1565b80156119515780601f1061192857610100808354040283529160200191611951565b820191905f5260205f20905b81548152906001019060200180831161193457829003601f168201915b505050505090806002018054611966906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611992906148e1565b80156119dd5780601f106119b4576101008083540402835291602001916119dd565b820191905f5260205f20905b8154815290600101906020018083116119c057829003601f168201915b5050505050908060030180546119f2906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1e906148e1565b8015611a695780601f10611a4057610100808354040283529160200191611a69565b820191905f5260205f20905b815481529060010190602001808311611a4c57829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611a9e6130bd565b60fb5460408051637a87fa0b60e01b81529051611af3923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610d27573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b68919061477b565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611ba0575f80fd5b505af1158015611bb2573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a81604051611be891815260200190565b60405180910390a1611bfa600160c955565b50565b60fb54611c1b903390600160501b90046001600160a01b03166137ce565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a2906020016111ae565b6060825f03611c99576040516334d6e01560e01b815260040160405180910390fd5b5f82611ca660018661489b565b611cb09190614884565b90505f611cbd84836147c1565b6001600160a01b0387165f9081526101066020526040812054919250819003611cf95760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311611d155782611d17565b805b92505f848411611d27575f611d31565b611d31858561489b565b6001600160401b03811115611d4857611d48614501565b604051908082528060200260200182016040528015611d8157816020015b611d6e614068565b815260200190600190039081611d665790505b509050845b84811015612021575f84815261010760205260408120805483908110611dae57611dae6147d4565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff166005811115611df057611df0614407565b6005811115611e0157611e01614407565b8152602001600182018054611e15906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e41906148e1565b8015611e8c5780601f10611e6357610100808354040283529160200191611e8c565b820191905f5260205f20905b815481529060010190602001808311611e6f57829003601f168201915b50505050508152602001600282018054611ea5906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611ed1906148e1565b8015611f1c5780601f10611ef357610100808354040283529160200191611f1c565b820191905f5260205f20905b815481529060010190602001808311611eff57829003601f168201915b50505050508152602001600382018054611f35906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f61906148e1565b8015611fac5780601f10611f8357610100808354040283529160200191611fac565b820191905f5260205f20905b815481529060010190602001808311611f8f57829003601f168201915b505050918352505060048201546001600160a01b03166020820152600582015460408201526006820154606082015260079091015460809091015283611ff2898561489b565b81518110612002576120026147d4565b6020026020010181905250508080612019906148ae565b915050611d86565b5098975050505050505050565b5f6101005460ff54612040919061489b565b905090565b60fb54612063903390600160501b90046001600160a01b03166137ce565b61169461393a565b5f8183111561208d5760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f9081526101066020526040812054906120bd825f908152610107602052604090205490565b90508084116120cc57836120ce565b805b93505f855b8581101561212b575f848152610107602052604081208054839081106120fb576120fb6147d4565b905f5260205f200154905061210f81613977565b15612122578261211e81614a44565b9350505b506001016120d3565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f03612182576040516334d6e01560e01b815260040160405180910390fd5b5f8261218f60018661489b565b6121999190614884565b6121a49060016147c1565b90505f6121b184836147c1565b905060fe5481116121c257806121c6565b60fe545b90505f846001600160401b038111156121e1576121e1614501565b60405190808252806020026020018201604052801561221a57816020015b612207614068565b8152602001906001900390816121ff5790505b5090505f835b8381101561249f5761223181613443565b1561248d575f818152610102602052604090819020815161010081019092528054829060ff16600581111561226857612268614407565b600581111561227957612279614407565b815260200160018201805461228d906148e1565b80601f01602080910402602001604051908101604052809291908181526020018280546122b9906148e1565b80156123045780601f106122db57610100808354040283529160200191612304565b820191905f5260205f20905b8154815290600101906020018083116122e757829003601f168201915b5050505050815260200160028201805461231d906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054612349906148e1565b80156123945780601f1061236b57610100808354040283529160200191612394565b820191905f5260205f20905b81548152906001019060200180831161237757829003601f168201915b505050505081526020016003820180546123ad906148e1565b80601f01602080910402602001604051908101604052809291908181526020018280546123d9906148e1565b80156124245780601f106123fb57610100808354040283529160200191612424565b820191905f5260205f20905b81548152906001019060200180831161240757829003601f168201915b505050918352505060048201546001600160a01b0316602082015260058201546040820152600682015460608201526007909101546080909101528351849084908110612473576124736147d4565b60200260200101819052508180612489906148ae565b9250505b80612497816148ae565b915050612220565b50815295945050505050565b5f6124b5816136d9565b6124be826138a5565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb54612552903390600160501b90046001600160a01b03166133be565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b4906020016111ae565b60fb5460408051637a87fa0b60e01b815290516125dc923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610d27573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da9906020016111ae565b6101056020525f90815260409020805460018201805460ff8084169461010090940416929190612641906148e1565b80601f016020809104026020016040519081016040528092919081815260200182805461266d906148e1565b80156126b85780601f1061268f576101008083540402835291602001916126b8565b820191905f5260205f20905b81548152906001019060200180831161269b57829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f828152606560205260409020600101546126f5816136d9565b6114618383613768565b610107602052815f5260405f208181548110612719575f80fd5b905f5260205f20015f91509150505481565b6127336130bd565b61273b613077565b5f612745336138cc565b90505f8061275588878686613bfd565b915091505f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127ab573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127cf919061477b565b90505f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612823573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612847919061477b565b90505f5b84811015612ca657816001600160a01b0316639f55941b8d8d84818110612874576128746147d4565b905060200281019061288691906147e8565b8d8d86818110612898576128986147d4565b90506020028101906128aa91906147e8565b8d8d888181106128bc576128bc6147d4565b90506020028101906128ce91906147e8565b6040518763ffffffff1660e01b81526004016128ef96959493929190614a69565b5f604051808303815f87803b158015612906575f80fd5b505af1158015612918573d5f803e3d5ffd5b505050505f836001600160a01b0316637f70ce0d600189858961293b91906147c1565b60fe546040516001600160e01b031960e087901b16815260ff90941660048501526024840192909252604483015260648201526084016020604051808303815f875af115801561298d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129b1919061477b565b604080516101008101909152909150805f81526020018e8e858181106129d9576129d96147d4565b90506020028101906129eb91906147e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018c8c85818110612a3657612a366147d4565b9050602002810190612a4891906147e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018a8a85818110612a9357612a936147d4565b9050602002810190612aa591906147e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b03841660208084019190915260408084018c905260608401839052608090930182905260fe54825261010290522081518154829060ff19166001836005811115612b2d57612b2d614407565b021790555060208201516001820190612b469082614ab1565b5060408201516002820190612b5b9082614ab1565b5060608201516003820190612b709082614ab1565b5060808201516004820180546001600160a01b0319166001600160a01b0390921691909117905560a0820151600582015560c0820151600682015560e09091015160079091015560fe546101038e8e85818110612bcf57612bcf6147d4565b9050602002810190612be191906147e8565b604051612bef92919061482a565b9081526040805160209281900383019020929092555f898152610107825291822060fe5481546001810183559184529190922090910155337fab5128638b64e6216e80dfafa70d3cb6d54913a536dc41e76eb4a04cfbe979cf8e8e85818110612c5a57612c5a6147d4565b9050602002810190612c6c91906147e8565b60fe54604051612c7e93929190614861565b60405180910390a260fe8054905f612c95836148ae565b91905055508160010191505061284b565b5060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cf8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d1c919061477b565b6001600160a01b031663eda0ae128560fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612da09190614796565b612daa9190614884565b8d8d8d8d8b8a6040518863ffffffff1660e01b8152600401612dd196959493929190614bf8565b5f604051808303818588803b158015612de8575f80fd5b505af1158015612dfa573d5f803e3d5ffd5b50505050505050505050611101600160c955565b5f80612e19336138cc565b5f818152610105602052604090205490915083151561010090910460ff16151503612e5757604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ecc9190614796565b5f8281526101086020526040902054612ee591906147c1565b431015612f055760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b031691508215612ffc576001600160a01b0382163115612f8457816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612f6d575f80fd5b505af1158015612f7f573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ff9919061477b565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff16156116945760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401611657565b600260c9540361310f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611657565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa158015613161573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131859190614c34565b6114615760405163168dfea160e01b815260040160405180910390fd5b8015806131d057505f818152610102602052604081205460ff1660058111156131cd576131cd614407565b14155b15611bfa576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff805484526101049092528220839055805491613227836148ae565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa1580156132ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132d0919061477b565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561332f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133539190614796565b61336590673782dace9d90000061489b565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b1580156133a2575f80fd5b505af11580156133b4573d5f803e3d5ffd5b5050505050505050565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa158015613402573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134269190614c34565b61166a5760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff16600581111561347857613478614407565b600581111561348957613489614407565b815260200160018201805461349d906148e1565b80601f01602080910402602001604051908101604052809291908181526020018280546134c9906148e1565b80156135145780601f106134eb57610100808354040283529160200191613514565b820191905f5260205f20905b8154815290600101906020018083116134f757829003601f168201915b5050505050815260200160028201805461352d906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054613559906148e1565b80156135a45780601f1061357b576101008083540402835291602001916135a4565b820191905f5260205f20905b81548152906001019060200180831161358757829003601f168201915b505050505081526020016003820180546135bd906148e1565b80601f01602080910402602001604051908101604052809291908181526020018280546135e9906148e1565b80156136345780601f1061360b57610100808354040283529160200191613634565b820191905f5260205f20905b81548152906001019060200180831161361757829003601f168201915b50505091835250506004828101546001600160a01b0316602083015260058301546040830152600683015460608301526007909201546080909101529091508151600581111561368657613686614407565b149392505050565b806101015f8282546136a0919061489b565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece3906020016111ae565b611bfa8133613e18565b6136ed8282612136565b61166a575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556137243390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6137728282612136565b1561166a575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015613812573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138369190614c34565b61166a5760405163c4230ae360e01b815260040160405180910390fd5b61385b613e71565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038116611bfa5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526101066020526040812054908190036139065760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff166139355760405163c11cb1df60e01b815260040160405180910390fd5b919050565b613942613077565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586138883390565b5f818152610102602052604080822081516101008101909252805483929190829060ff1660058111156139ac576139ac614407565b60058111156139bd576139bd614407565b81526020016001820180546139d1906148e1565b80601f01602080910402602001604051908101604052809291908181526020018280546139fd906148e1565b8015613a485780601f10613a1f57610100808354040283529160200191613a48565b820191905f5260205f20905b815481529060010190602001808311613a2b57829003601f168201915b50505050508152602001600282018054613a61906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054613a8d906148e1565b8015613ad85780601f10613aaf57610100808354040283529160200191613ad8565b820191905f5260205f20905b815481529060010190602001808311613abb57829003601f168201915b50505050508152602001600382018054613af1906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054613b1d906148e1565b8015613b685780601f10613b3f57610100808354040283529160200191613b68565b820191905f5260205f20905b815481529060010190602001808311613b4b57829003601f168201915b505050918352505060048201546001600160a01b0316602082015260058083015460408301526006830154606083015260079092015460809091015290915081516005811115613bba57613bba614407565b1480613bd85750600281516005811115613bd657613bd6614407565b145b80613bf55750600181516005811115613bf357613bf3614407565b145b159392505050565b5f808486141580613c0e5750838614155b15613c2c5760405163e5fe884360e01b815260040160405180910390fd5b859150811580613c41575060fb5461ffff1682115b15613c5f576040516379b348ff60e11b815260040160405180910390fd5b505f828152610107602052604081205490613c7b33828461206b565b60fb546001600160401b03918216925062010000900416613c9c84836147c1565b1115613cbb57604051633e10caad60e21b815260040160405180910390fd5b613ccd673782dace9d90000084614884565b3414613cec57604051635aaa2d1f60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b031663aa9537956040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d3d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d61919061477b565b6001600160a01b031663b178e38e336001613d7c87866147c1565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260ff90911660248301526044820152606401602060405180830381865afa158015613dcd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613df19190614c34565b613e0e57604051633bf053fd60e11b815260040160405180910390fd5b5094509492505050565b613e228282612136565b61166a57613e2f81613eba565b613e3a836020613ecc565b604051602001613e4b929190614c4f565b60408051601f198184030181529082905262461bcd60e51b825261165791600401614cc3565b60975460ff166116945760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401611657565b6060610b2b6001600160a01b03831660145b60605f613eda836002614884565b613ee59060026147c1565b6001600160401b03811115613efc57613efc614501565b6040519080825280601f01601f191660200182016040528015613f26576020820181803683370190505b509050600360fc1b815f81518110613f4057613f406147d4565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110613f6e57613f6e6147d4565b60200101906001600160f81b03191690815f1a9053505f613f90846002614884565b613f9b9060016147c1565b90505b6001811115614012576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613fcf57613fcf6147d4565b1a60f81b828281518110613fe557613fe56147d4565b60200101906001600160f81b03191690815f1a90535060049490941c9361400b81614cd5565b9050613f9e565b5083156140615760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401611657565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f602082840312156140c2575f80fd5b81356001600160e01b031981168114614061575f80fd5b8015158114611bfa575f80fd5b5f8083601f8401126140f6575f80fd5b5081356001600160401b0381111561410c575f80fd5b602083019150836020828501011115614123575f80fd5b9250929050565b6001600160a01b0381168114611bfa575f80fd5b5f805f8060608587031215614151575f80fd5b843561415c816140d9565b935060208501356001600160401b03811115614176575f80fd5b614182878288016140e6565b90945092505060408501356141968161412a565b939692955090935050565b5f8083601f8401126141b1575f80fd5b5081356001600160401b038111156141c7575f80fd5b6020830191508360208260051b8501011115614123575f80fd5b5f805f805f80606087890312156141f6575f80fd5b86356001600160401b038082111561420c575f80fd5b6142188a838b016141a1565b90985096506020890135915080821115614230575f80fd5b61423c8a838b016141a1565b90965094506040890135915080821115614254575f80fd5b5061426189828a016141a1565b979a9699509497509295939492505050565b5f60208284031215614283575f80fd5b5035919050565b5f6020828403121561429a575f80fd5b813561ffff81168114614061575f80fd5b5f80602083850312156142bc575f80fd5b82356001600160401b038111156142d1575f80fd5b6142dd858286016141a1565b90969095509350505050565b5f80604083850312156142fa575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b818110156143495783516001600160a01b031683529284019291840191600101614324565b50909695505050505050565b5f8060408385031215614366575f80fd5b8235915060208301356143788161412a565b809150509250929050565b5f8060208385031215614394575f80fd5b82356001600160401b038111156143a9575f80fd5b6142dd858286016140e6565b5f805f604084860312156143c7575f80fd5b83356001600160401b038111156143dc575f80fd5b6143e8868287016140e6565b90945092505060208401356143fc8161412a565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b6006811061443757634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b8381101561445557818101518382015260200161443d565b50505f910152565b5f815180845261447481602086016020860161443b565b601f01601f19169290920160200192915050565b5f610100614496838c61441b565b8060208401526144a88184018b61445d565b905082810360408401526144bc818a61445d565b905082810360608401526144d0818961445d565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215614525575f80fd5b81356001600160401b038082111561453b575f80fd5b818401915084601f83011261454e575f80fd5b81358181111561456057614560614501565b604051601f8201601f19908116603f0116810190838211818310171561458857614588614501565b816040528281528760208487010111156145a0575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f602082840312156145cf575f80fd5b81356001600160401b0381168114614061575f80fd5b5f805f606084860312156145f7575f80fd5b83356146028161412a565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b838110156146f357603f19898403018552815161010061465d85835161441b565b88820151818a8701526146728287018261445d565b915050878201518582038987015261468a828261445d565b915050606080830151868303828801526146a4838261445d565b925050506080808301516146c2828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e0918201519190940152938601939086019060010161463c565b509098975050505050505050565b5f60208284031215614711575f80fd5b81356140618161412a565b8515158152841515602082015260a060408201525f61473e60a083018661445d565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f60208284031215614770575f80fd5b8135614061816140d9565b5f6020828403121561478b575f80fd5b81516140618161412a565b5f602082840312156147a6575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2b57610b2b6147ad565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e198436030181126147fd575f80fd5b8301803591506001600160401b03821115614816575f80fd5b602001915036819003821315614123575f80fd5b818382375f9101908152919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f614874604083018587614839565b9050826020830152949350505050565b8082028115828204841417610b2b57610b2b6147ad565b81810381811115610b2b57610b2b6147ad565b5f600182016148bf576148bf6147ad565b5060010190565b602081525f6148d9602083018486614839565b949350505050565b600181811c908216806148f557607f821691505b60208210810361491357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115611461575f81815260208120601f850160051c8101602086101561493f5750805b601f850160051c820191505b818110156111015782815560010161494b565b6001600160401b0383111561497557614975614501565b6149898361498383546148e1565b83614919565b5f601f8411600181146149ba575f85156149a35750838201355b5f19600387901b1c1916600186901b178355614a12565b5f83815260209020601f19861690835b828110156149ea57868501358255602094850194600190920191016149ca565b5086821015614a06575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f614a2c604083018587614839565b905060018060a01b0383166020830152949350505050565b5f6001600160401b03808316818103614a5f57614a5f6147ad565b6001019392505050565b606081525f614a7c60608301888a614839565b8281036020840152614a8f818789614839565b90508281036040840152614aa4818587614839565b9998505050505050505050565b81516001600160401b03811115614aca57614aca614501565b614ade81614ad884546148e1565b84614919565b602080601f831160018114614b11575f8415614afa5750858301515b5f19600386901b1c1916600185901b178555611101565b5f85815260208120601f198616915b82811015614b3f57888601518255948401946001909101908401614b20565b5085821015614b5c57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8183525f6020808501808196508560051b81019150845f5b87811015614beb5782840389528135601e19883603018112614ba4575f80fd5b870185810190356001600160401b03811115614bbe575f80fd5b803603821315614bcc575f80fd5b614bd7868284614839565b9a87019a9550505090840190600101614b84565b5091979650505050505050565b608081525f614c0b60808301888a614b6c565b8281036020840152614c1e818789614b6c565b6040840195909552505060600152949350505050565b5f60208284031215614c44575f80fd5b8151614061816140d9565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351614c8681601785016020880161443b565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614cb781602884016020880161443b565b01602801949350505050565b602081525f614061602083018461445d565b5f81614ce357614ce36147ad565b505f19019056fea26469706673582212203d63ea88a46117dfe9b23a5ef9d7cf1b2f03879d270d8c0ea3f37fefbe69ccaf64736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // PermissionlessNodeRegistryABI is the input ABI used to generate the binding from. diff --git a/testing/contracts/PoolUtils.go b/testing/contracts/PoolUtils.go new file mode 100644 index 000000000..6852f3a16 --- /dev/null +++ b/testing/contracts/PoolUtils.go @@ -0,0 +1,2463 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contracts + +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 +) + +// PoolUtilsMetaData contains all meta data concerning the PoolUtils contract. +var PoolUtilsMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyNameString\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExistingOrMismatchingPoolId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLengthOfPubkey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLengthOfSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NameCrossedMaxLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorIsNotOnboarded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolIdNotPresent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PubkeyAlreadyExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PubkeyDoesNotExit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"poolAddress\",\"type\":\"address\"}],\"name\":\"DeactivatedPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"}],\"name\":\"ExitValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"poolAddress\",\"type\":\"address\"}],\"name\":\"PoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"poolAddress\",\"type\":\"address\"}],\"name\":\"PoolAddressUpdated\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"_poolAddress\",\"type\":\"address\"}],\"name\":\"addNewPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_totalRewards\",\"type\":\"uint256\"}],\"name\":\"calculateRewardShare\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"userShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"operatorShare\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolShare\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"}],\"name\":\"getActiveValidatorCountByPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"}],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"}],\"name\":\"getNodeRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"}],\"name\":\"getOperatorFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"getOperatorPoolId\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolIdArray\",\"outputs\":[{\"internalType\":\"uint8[]\",\"name\":\"\",\"type\":\"uint8[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"}],\"name\":\"getProtocolFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"}],\"name\":\"getQueuedValidatorCountByPool\",\"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\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"}],\"name\":\"getSocializingPoolAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"getValidatorPoolId\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"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\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"}],\"name\":\"isExistingPoolId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_depositSignature\",\"type\":\"bytes\"}],\"name\":\"onlyValidKeys\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"onlyValidName\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"poolAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"poolIdArray\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"processValidatorExitList\",\"outputs\":[],\"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\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"_newPoolAddress\",\"type\":\"address\"}],\"name\":\"updatePoolAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b50604051620023d9380380620023d98339810160408190526200003391620002e6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b62000103836200018e565b6200010e826200018e565b62000118620001b9565b609780546001600160a01b0319166001600160a01b0384161790556200013f5f8462000227565b801562000185575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050506200031c565b6001600160a01b038116620001b65760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002255760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16620002c6575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620002853390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b80516001600160a01b0381168114620002e1575f80fd5b919050565b5f8060408385031215620002f8575f80fd5b6200030383620002ca565b91506200031360208401620002ca565b90509250929050565b6120af806200032a5f395ff3fe608060405234801561000f575f80fd5b50600436106101e7575f3560e01c806399d055c811610109578063b7b32d4b1161009e578063df8984fe1161006e578063df8984fe14610463578063ef7bba861461048b578063f9c4dda41461049e578063ff6bceec146104b1575f80fd5b8063b7b32d4b14610417578063bda0bc891461042a578063d547741f1461043d578063d97ac84714610450575f80fd5b8063a217fddf116100d9578063a217fddf146103ba578063a92e1faf146103c1578063afc2afba146103d6578063b0ef1e1814610404575f80fd5b806399d055c81461036e5780639ee804cb146103815780639f55941b146103945780639f7053f5146103a7575f80fd5b80635d713ec31161017f57806377c359e11161014f57806377c359e11461031b5780638465bef5146103235780638e43c53a1461034857806391d148541461035b575f80fd5b80635d713ec3146102cf57806363d0d5c0146102e25780636cdf1252146102f55780637526d42914610308575f80fd5b80632f2ff15d116101ba5780632f2ff15d1461026957806336514d9f1461027e57806336568abe14610291578063490ffa35146102a4575f80fd5b806301ffc9a7146101eb5780631ec2db3c14610213578063248a9ca314610234578063261d41f514610256575b5f80fd5b6101fe6101f9366004611abf565b6104c4565b60405190151581526020015b60405180910390f35b610226610221366004611af4565b6104fa565b60405190815260200161020a565b610226610242366004611b0f565b5f9081526065602052604090206001015490565b610226610264366004611af4565b610596565b61027c610277366004611b3a565b61063e565b005b6101fe61028c366004611bad565b610667565b61027c61029f366004611b3a565b610756565b6097546102b7906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b6102266102dd366004611bec565b6107d9565b61027c6102f0366004611c2f565b61089a565b6101fe610303366004611af4565b610971565b6102b7610316366004611af4565b6109e8565b610226610a89565b610336610331366004611b0f565b610b00565b60405160ff909116815260200161020a565b610336610356366004611c5b565b610b31565b6101fe610369366004611b3a565b610c38565b6102b761037c366004611af4565b610c62565b61027c61038f366004611c5b565b610cdf565b61027c6103a2366004611c76565b610d47565b61027c6103b5366004611bad565b610dda565b6102265f81565b6103c9610e8f565b60405161020a9190611d09565b6103e96103e4366004611d4f565b610f02565b6040805193845260208401929092529082015260600161020a565b610226610412366004611af4565b61111e565b610226610425366004611af4565b61119b565b610336610438366004611bad565b61120b565b61027c61044b366004611b3a565b611319565b61027c61045e366004611c2f565b61133d565b6102b7610471366004611af4565b60986020525f90815260409020546001600160a01b031681565b610226610499366004611af4565b6113e8565b6101fe6104ac366004611c5b565b611458565b61027c6104bf366004611d79565b611515565b5f6001600160e01b03198216637965db0b60e01b14806104f457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f8161050581610971565b61052257604051636c7cd82760e01b815260040160405180910390fd5b5f61052c84610c62565b9050806001600160a01b03166377c359e16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561056a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058e9190611de8565b949350505050565b5f816105a181610971565b6105be57604051636c7cd82760e01b815260040160405180910390fd5b60ff83165f908152609860209081526040918290205482516358710f4560e11b815292516001600160a01b039091169263b0e21e8a9260048083019391928290030181865afa158015610613573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106379190611de8565b9392505050565b5f82815260656020526040902060010154610658816115a0565b61066283836115ad565b505050565b5f8061067260995490565b90505f5b8181101561074c575f6106b86099838154811061069557610695611dff565b905f5260205f2090602091828204019190069054906101000a900460ff16610c62565b6040516336514d9f60e01b81529091506001600160a01b038216906336514d9f906106e99089908990600401611e13565b602060405180830381865afa158015610704573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107289190611e41565b1561073957600193505050506104f4565b508061074481611e74565b915050610676565b505f949350505050565b6001600160a01b03811633146107cb5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107d58282611632565b5050565b5f846107e481610971565b61080157604051636c7cd82760e01b815260040160405180910390fd5b5f61080b87610c62565b6040516322896f3b60e21b81526001600160a01b038881166004830152602482018890526044820187905291925090821690638a25bcec90606401602060405180830381865afa158015610861573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108859190611e8c565b67ffffffffffffffff16979650505050505050565b6097546108b19033906001600160a01b0316611698565b6108ba8161171d565b6108c48282611744565b609980546001810190915560208082047f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d0001805460ff868116601f9095166101000a8581029102199091161790555f8281526098825260409081902080546001600160a01b0386166001600160a01b0319909116811790915590519081527f697362d5a2939aff718fb2db4145cb1b4ffc68872c82b2e64d805d8e94845af1910160405180910390a25050565b5f8061097c60995490565b90505f5b818110156109df578360ff166099828154811061099f5761099f611dff565b5f9182526020918290209181049091015460ff601f9092166101000a900416036109cd575060019392505050565b806109d781611e74565b915050610980565b505f9392505050565b5f816109f381610971565b610a1057604051636c7cd82760e01b815260040160405180910390fd5b60ff83165f9081526098602090815260409182902054825163f74b4cd160e01b815292516001600160a01b039091169263f74b4cd19260048083019391928290030181865afa158015610a65573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106379190611eb3565b5f805f610a9560995490565b90505f5b81811015610af857610ada60998281548110610ab757610ab7611dff565b905f5260205f2090602091828204019190069054906101000a900460ff166104fa565b610ae49084611ece565b925080610af081611e74565b915050610a99565b509092915050565b60998181548110610b0f575f80fd5b905f5260205f209060209182820401919006915054906101000a900460ff1681565b5f80610b3c60995490565b90505f5b81811015610c1e575f610b5f6099838154811061069557610695611dff565b604051633e71376960e21b81526001600160a01b0387811660048301529192509082169063f9c4dda490602401602060405180830381865afa158015610ba7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bcb9190611e41565b15610c0b5760998281548110610be357610be3611dff565b905f5260205f2090602091828204019190069054906101000a900460ff169350505050919050565b5080610c1681611e74565b915050610b40565b50604051633e945e6d60e21b815260040160405180910390fd5b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f81610c6d81610971565b610c8a57604051636c7cd82760e01b815260040160405180910390fd5b60ff83165f90815260986020908152604091829020548251632dbecfeb60e21b815292516001600160a01b039091169263b6fb3fac9260048083019391928290030181865afa158015610a65573d5f803e3d5ffd5b5f610ce9816115a0565b610cf28261171d565b609780546001600160a01b0319166001600160a01b0384169081179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60308514610d6857604051636eeda58f60e11b815260040160405180910390fd5b60608314610d895760405163a52467c160e01b815260040160405180910390fd5b60608114610daa5760405163a52467c160e01b815260040160405180910390fd5b610db48686610667565b15610dd25760405163c7de6d2b60e01b815260040160405180910390fd5b505050505050565b5f819003610dfb57604051630f35201760e41b815260040160405180910390fd5b60975f9054906101000a90046001600160a01b03166001600160a01b03166310deba2b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6f9190611de8565b8111156107d557604051630ea0087f60e11b815260040160405180910390fd5b60606099805480602002602001604051908101604052809291908181526020018280548015610ef857602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610ec95790505b5050505050905090565b5f805f8060975f9054906101000a90046001600160a01b03166001600160a01b031663ff387f3a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7a9190611de8565b90505f610f86876113e8565b90505f610f938284611ee1565b90505f610f9f89610596565b90505f610fab8a61111e565b90505f85610fb9858c611ef4565b610fc39190611f0b565b905060975f9054906101000a90046001600160a01b03166001600160a01b0316637ae316d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611015573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110399190611de8565b6110438285611ef4565b61104d9190611f0b565b96508561105a868c611ef4565b6110649190611f0b565b975060975f9054906101000a90046001600160a01b03166001600160a01b0316637ae316d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110da9190611de8565b6110e48284611ef4565b6110ee9190611f0b565b6110f89089611ece565b975087611105888c611ee1565b61110f9190611ee1565b98505050505050509250925092565b5f8161112981610971565b61114657604051636c7cd82760e01b815260040160405180910390fd5b60ff83165f908152609860209081526040918290205482516389afc0f160e01b815292516001600160a01b03909116926389afc0f19260048083019391928290030181865afa158015610613573d5f803e3d5ffd5b5f816111a681610971565b6111c357604051636c7cd82760e01b815260040160405180910390fd5b5f6111cd84610c62565b9050806001600160a01b0316637bd977d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561056a573d5f803e3d5ffd5b5f8061121660995490565b90505f5b818110156112fc575f6112396099838154811061069557610695611dff565b6040516336514d9f60e01b81529091506001600160a01b038216906336514d9f9061126a9089908990600401611e13565b602060405180830381865afa158015611285573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112a99190611e41565b156112e957609982815481106112c1576112c1611dff565b905f5260205f2090602091828204019190069054906101000a900460ff1693505050506104f4565b50806112f481611e74565b91505061121a565b506040516001623899b360e11b0319815260040160405180910390fd5b5f82815260656020526040902060010154611333816115a0565b6106628383611632565b8161134781610971565b61136457604051636c7cd82760e01b815260040160405180910390fd5b5f61136e816115a0565b6113778361171d565b6113818484611744565b60ff84165f8181526098602090815260409182902080546001600160a01b0319166001600160a01b03881690811790915591519182527ff732deab68331ad20834cfc15d686fed4bac945cf3af5d7f729205c9bf846199910160405180910390a250505050565b5f816113f381610971565b61141057604051636c7cd82760e01b815260040160405180910390fd5b5f61141a84610c62565b9050806001600160a01b031663b01db0786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561056a573d5f803e3d5ffd5b5f8061146360995490565b90505f5b818110156109df575f6114866099838154811061069557610695611dff565b604051633e71376960e21b81526001600160a01b0387811660048301529192509082169063f9c4dda490602401602060405180830381865afa1580156114ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f29190611e41565b1561150257506001949350505050565b508061150d81611e74565b915050611467565b60975461152c9033906001600160a01b0316611839565b805f5b8181101561159a577fce4931e23262c5aa14c3b95b5e67c07bb38447fda706a4e5e4019e4f7014281284848381811061156a5761156a611dff565b905060200281019061157c9190611f2a565b60405161158a929190611e13565b60405180910390a160010161152f565b50505050565b6115aa81336118be565b50565b6115b78282610c38565b6107d5575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556115ee3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61163c8282610c38565b156107d5575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa1580156116dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117009190611e41565b6107d55760405163c4230ae360e01b815260040160405180910390fd5b6001600160a01b0381166115aa5760405163d92e233d60e01b815260040160405180910390fd5b8160ff16816001600160a01b031663b6fb3fac6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611784573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a89190611eb3565b6001600160a01b031663e0d7d0e96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118079190611f6d565b60ff1614158061181b575061181b82610971565b156107d55760405163870a828560e01b815260040160405180910390fd5b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa15801561187d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118a19190611e41565b6107d55760405163a5523ee560e01b815260040160405180910390fd5b6118c88282610c38565b6107d5576118d581611917565b6118e0836020611929565b6040516020016118f1929190611faa565b60408051601f198184030181529082905262461bcd60e51b82526107c29160040161201e565b60606104f46001600160a01b03831660145b60605f611937836002611ef4565b611942906002611ece565b67ffffffffffffffff81111561195a5761195a612050565b6040519080825280601f01601f191660200182016040528015611984576020820181803683370190505b509050600360fc1b815f8151811061199e5761199e611dff565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106119cc576119cc611dff565b60200101906001600160f81b03191690815f1a9053505f6119ee846002611ef4565b6119f9906001611ece565b90505b6001811115611a70576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a2d57611a2d611dff565b1a60f81b828281518110611a4357611a43611dff565b60200101906001600160f81b03191690815f1a90535060049490941c93611a6981612064565b90506119fc565b5083156106375760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107c2565b5f60208284031215611acf575f80fd5b81356001600160e01b031981168114610637575f80fd5b60ff811681146115aa575f80fd5b5f60208284031215611b04575f80fd5b813561063781611ae6565b5f60208284031215611b1f575f80fd5b5035919050565b6001600160a01b03811681146115aa575f80fd5b5f8060408385031215611b4b575f80fd5b823591506020830135611b5d81611b26565b809150509250929050565b5f8083601f840112611b78575f80fd5b50813567ffffffffffffffff811115611b8f575f80fd5b602083019150836020828501011115611ba6575f80fd5b9250929050565b5f8060208385031215611bbe575f80fd5b823567ffffffffffffffff811115611bd4575f80fd5b611be085828601611b68565b90969095509350505050565b5f805f8060808587031215611bff575f80fd5b8435611c0a81611ae6565b93506020850135611c1a81611b26565b93969395505050506040820135916060013590565b5f8060408385031215611c40575f80fd5b8235611c4b81611ae6565b91506020830135611b5d81611b26565b5f60208284031215611c6b575f80fd5b813561063781611b26565b5f805f805f8060608789031215611c8b575f80fd5b863567ffffffffffffffff80821115611ca2575f80fd5b611cae8a838b01611b68565b90985096506020890135915080821115611cc6575f80fd5b611cd28a838b01611b68565b90965094506040890135915080821115611cea575f80fd5b50611cf789828a01611b68565b979a9699509497509295939492505050565b602080825282518282018190525f9190848201906040850190845b81811015611d4357835160ff1683529284019291840191600101611d24565b50909695505050505050565b5f8060408385031215611d60575f80fd5b8235611d6b81611ae6565b946020939093013593505050565b5f8060208385031215611d8a575f80fd5b823567ffffffffffffffff80821115611da1575f80fd5b818501915085601f830112611db4575f80fd5b813581811115611dc2575f80fd5b8660208260051b8501011115611dd6575f80fd5b60209290920196919550909350505050565b5f60208284031215611df8575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60208284031215611e51575f80fd5b81518015158114610637575f80fd5b634e487b7160e01b5f52601160045260245ffd5b5f60018201611e8557611e85611e60565b5060010190565b5f60208284031215611e9c575f80fd5b815167ffffffffffffffff81168114610637575f80fd5b5f60208284031215611ec3575f80fd5b815161063781611b26565b808201808211156104f4576104f4611e60565b818103818111156104f4576104f4611e60565b80820281158282048414176104f4576104f4611e60565b5f82611f2557634e487b7160e01b5f52601260045260245ffd5b500490565b5f808335601e19843603018112611f3f575f80fd5b83018035915067ffffffffffffffff821115611f59575f80fd5b602001915036819003821315611ba6575f80fd5b5f60208284031215611f7d575f80fd5b815161063781611ae6565b5f5b83811015611fa2578181015183820152602001611f8a565b50505f910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351611fe1816017850160208801611f88565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612012816028840160208801611f88565b01602801949350505050565b602081525f825180602084015261203c816040850160208701611f88565b601f01601f19169190910160400192915050565b634e487b7160e01b5f52604160045260245ffd5b5f8161207257612072611e60565b505f19019056fea2646970667358221220ca3f28d91dac665c1dc4418c1eb9875829632fc125e9aecaa4590b6ebee23f3264736f6c63430008140033", +} + +// PoolUtilsABI is the input ABI used to generate the binding from. +// Deprecated: Use PoolUtilsMetaData.ABI instead. +var PoolUtilsABI = PoolUtilsMetaData.ABI + +// PoolUtilsBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use PoolUtilsMetaData.Bin instead. +var PoolUtilsBin = PoolUtilsMetaData.Bin + +// DeployPoolUtils deploys a new Ethereum contract, binding an instance of PoolUtils to it. +func DeployPoolUtils(auth *bind.TransactOpts, backend bind.ContractBackend, _admin common.Address, _staderConfig common.Address) (common.Address, *types.Transaction, *PoolUtils, error) { + parsed, err := PoolUtilsMetaData.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(PoolUtilsBin), backend, _admin, _staderConfig) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &PoolUtils{PoolUtilsCaller: PoolUtilsCaller{contract: contract}, PoolUtilsTransactor: PoolUtilsTransactor{contract: contract}, PoolUtilsFilterer: PoolUtilsFilterer{contract: contract}}, nil +} + +// PoolUtils is an auto generated Go binding around an Ethereum contract. +type PoolUtils struct { + PoolUtilsCaller // Read-only binding to the contract + PoolUtilsTransactor // Write-only binding to the contract + PoolUtilsFilterer // Log filterer for contract events +} + +// PoolUtilsCaller is an auto generated read-only Go binding around an Ethereum contract. +type PoolUtilsCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PoolUtilsTransactor is an auto generated write-only Go binding around an Ethereum contract. +type PoolUtilsTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PoolUtilsFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type PoolUtilsFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PoolUtilsSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type PoolUtilsSession struct { + Contract *PoolUtils // 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 +} + +// PoolUtilsCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type PoolUtilsCallerSession struct { + Contract *PoolUtilsCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// PoolUtilsTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type PoolUtilsTransactorSession struct { + Contract *PoolUtilsTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// PoolUtilsRaw is an auto generated low-level Go binding around an Ethereum contract. +type PoolUtilsRaw struct { + Contract *PoolUtils // Generic contract binding to access the raw methods on +} + +// PoolUtilsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type PoolUtilsCallerRaw struct { + Contract *PoolUtilsCaller // Generic read-only contract binding to access the raw methods on +} + +// PoolUtilsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type PoolUtilsTransactorRaw struct { + Contract *PoolUtilsTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewPoolUtils creates a new instance of PoolUtils, bound to a specific deployed contract. +func NewPoolUtils(address common.Address, backend bind.ContractBackend) (*PoolUtils, error) { + contract, err := bindPoolUtils(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &PoolUtils{PoolUtilsCaller: PoolUtilsCaller{contract: contract}, PoolUtilsTransactor: PoolUtilsTransactor{contract: contract}, PoolUtilsFilterer: PoolUtilsFilterer{contract: contract}}, nil +} + +// NewPoolUtilsCaller creates a new read-only instance of PoolUtils, bound to a specific deployed contract. +func NewPoolUtilsCaller(address common.Address, caller bind.ContractCaller) (*PoolUtilsCaller, error) { + contract, err := bindPoolUtils(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &PoolUtilsCaller{contract: contract}, nil +} + +// NewPoolUtilsTransactor creates a new write-only instance of PoolUtils, bound to a specific deployed contract. +func NewPoolUtilsTransactor(address common.Address, transactor bind.ContractTransactor) (*PoolUtilsTransactor, error) { + contract, err := bindPoolUtils(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &PoolUtilsTransactor{contract: contract}, nil +} + +// NewPoolUtilsFilterer creates a new log filterer instance of PoolUtils, bound to a specific deployed contract. +func NewPoolUtilsFilterer(address common.Address, filterer bind.ContractFilterer) (*PoolUtilsFilterer, error) { + contract, err := bindPoolUtils(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &PoolUtilsFilterer{contract: contract}, nil +} + +// bindPoolUtils binds a generic wrapper to an already deployed contract. +func bindPoolUtils(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := PoolUtilsMetaData.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 (_PoolUtils *PoolUtilsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _PoolUtils.Contract.PoolUtilsCaller.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 (_PoolUtils *PoolUtilsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PoolUtils.Contract.PoolUtilsTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_PoolUtils *PoolUtilsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PoolUtils.Contract.PoolUtilsTransactor.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 (_PoolUtils *PoolUtilsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _PoolUtils.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 (_PoolUtils *PoolUtilsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PoolUtils.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_PoolUtils *PoolUtilsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PoolUtils.Contract.contract.Transact(opts, method, params...) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_PoolUtils *PoolUtilsCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_PoolUtils *PoolUtilsSession) DEFAULTADMINROLE() ([32]byte, error) { + return _PoolUtils.Contract.DEFAULTADMINROLE(&_PoolUtils.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_PoolUtils *PoolUtilsCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _PoolUtils.Contract.DEFAULTADMINROLE(&_PoolUtils.CallOpts) +} + +// CalculateRewardShare is a free data retrieval call binding the contract method 0xafc2afba. +// +// Solidity: function calculateRewardShare(uint8 _poolId, uint256 _totalRewards) view returns(uint256 userShare, uint256 operatorShare, uint256 protocolShare) +func (_PoolUtils *PoolUtilsCaller) CalculateRewardShare(opts *bind.CallOpts, _poolId uint8, _totalRewards *big.Int) (struct { + UserShare *big.Int + OperatorShare *big.Int + ProtocolShare *big.Int +}, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "calculateRewardShare", _poolId, _totalRewards) + + outstruct := new(struct { + UserShare *big.Int + OperatorShare *big.Int + ProtocolShare *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.UserShare = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.OperatorShare = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.ProtocolShare = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// CalculateRewardShare is a free data retrieval call binding the contract method 0xafc2afba. +// +// Solidity: function calculateRewardShare(uint8 _poolId, uint256 _totalRewards) view returns(uint256 userShare, uint256 operatorShare, uint256 protocolShare) +func (_PoolUtils *PoolUtilsSession) CalculateRewardShare(_poolId uint8, _totalRewards *big.Int) (struct { + UserShare *big.Int + OperatorShare *big.Int + ProtocolShare *big.Int +}, error) { + return _PoolUtils.Contract.CalculateRewardShare(&_PoolUtils.CallOpts, _poolId, _totalRewards) +} + +// CalculateRewardShare is a free data retrieval call binding the contract method 0xafc2afba. +// +// Solidity: function calculateRewardShare(uint8 _poolId, uint256 _totalRewards) view returns(uint256 userShare, uint256 operatorShare, uint256 protocolShare) +func (_PoolUtils *PoolUtilsCallerSession) CalculateRewardShare(_poolId uint8, _totalRewards *big.Int) (struct { + UserShare *big.Int + OperatorShare *big.Int + ProtocolShare *big.Int +}, error) { + return _PoolUtils.Contract.CalculateRewardShare(&_PoolUtils.CallOpts, _poolId, _totalRewards) +} + +// GetActiveValidatorCountByPool is a free data retrieval call binding the contract method 0x1ec2db3c. +// +// Solidity: function getActiveValidatorCountByPool(uint8 _poolId) view returns(uint256) +func (_PoolUtils *PoolUtilsCaller) GetActiveValidatorCountByPool(opts *bind.CallOpts, _poolId uint8) (*big.Int, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "getActiveValidatorCountByPool", _poolId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetActiveValidatorCountByPool is a free data retrieval call binding the contract method 0x1ec2db3c. +// +// Solidity: function getActiveValidatorCountByPool(uint8 _poolId) view returns(uint256) +func (_PoolUtils *PoolUtilsSession) GetActiveValidatorCountByPool(_poolId uint8) (*big.Int, error) { + return _PoolUtils.Contract.GetActiveValidatorCountByPool(&_PoolUtils.CallOpts, _poolId) +} + +// GetActiveValidatorCountByPool is a free data retrieval call binding the contract method 0x1ec2db3c. +// +// Solidity: function getActiveValidatorCountByPool(uint8 _poolId) view returns(uint256) +func (_PoolUtils *PoolUtilsCallerSession) GetActiveValidatorCountByPool(_poolId uint8) (*big.Int, error) { + return _PoolUtils.Contract.GetActiveValidatorCountByPool(&_PoolUtils.CallOpts, _poolId) +} + +// GetCollateralETH is a free data retrieval call binding the contract method 0xef7bba86. +// +// Solidity: function getCollateralETH(uint8 _poolId) view returns(uint256) +func (_PoolUtils *PoolUtilsCaller) GetCollateralETH(opts *bind.CallOpts, _poolId uint8) (*big.Int, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "getCollateralETH", _poolId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetCollateralETH is a free data retrieval call binding the contract method 0xef7bba86. +// +// Solidity: function getCollateralETH(uint8 _poolId) view returns(uint256) +func (_PoolUtils *PoolUtilsSession) GetCollateralETH(_poolId uint8) (*big.Int, error) { + return _PoolUtils.Contract.GetCollateralETH(&_PoolUtils.CallOpts, _poolId) +} + +// GetCollateralETH is a free data retrieval call binding the contract method 0xef7bba86. +// +// Solidity: function getCollateralETH(uint8 _poolId) view returns(uint256) +func (_PoolUtils *PoolUtilsCallerSession) GetCollateralETH(_poolId uint8) (*big.Int, error) { + return _PoolUtils.Contract.GetCollateralETH(&_PoolUtils.CallOpts, _poolId) +} + +// GetNodeRegistry is a free data retrieval call binding the contract method 0x99d055c8. +// +// Solidity: function getNodeRegistry(uint8 _poolId) view returns(address) +func (_PoolUtils *PoolUtilsCaller) GetNodeRegistry(opts *bind.CallOpts, _poolId uint8) (common.Address, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "getNodeRegistry", _poolId) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetNodeRegistry is a free data retrieval call binding the contract method 0x99d055c8. +// +// Solidity: function getNodeRegistry(uint8 _poolId) view returns(address) +func (_PoolUtils *PoolUtilsSession) GetNodeRegistry(_poolId uint8) (common.Address, error) { + return _PoolUtils.Contract.GetNodeRegistry(&_PoolUtils.CallOpts, _poolId) +} + +// GetNodeRegistry is a free data retrieval call binding the contract method 0x99d055c8. +// +// Solidity: function getNodeRegistry(uint8 _poolId) view returns(address) +func (_PoolUtils *PoolUtilsCallerSession) GetNodeRegistry(_poolId uint8) (common.Address, error) { + return _PoolUtils.Contract.GetNodeRegistry(&_PoolUtils.CallOpts, _poolId) +} + +// GetOperatorFee is a free data retrieval call binding the contract method 0xb0ef1e18. +// +// Solidity: function getOperatorFee(uint8 _poolId) view returns(uint256) +func (_PoolUtils *PoolUtilsCaller) GetOperatorFee(opts *bind.CallOpts, _poolId uint8) (*big.Int, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "getOperatorFee", _poolId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetOperatorFee is a free data retrieval call binding the contract method 0xb0ef1e18. +// +// Solidity: function getOperatorFee(uint8 _poolId) view returns(uint256) +func (_PoolUtils *PoolUtilsSession) GetOperatorFee(_poolId uint8) (*big.Int, error) { + return _PoolUtils.Contract.GetOperatorFee(&_PoolUtils.CallOpts, _poolId) +} + +// GetOperatorFee is a free data retrieval call binding the contract method 0xb0ef1e18. +// +// Solidity: function getOperatorFee(uint8 _poolId) view returns(uint256) +func (_PoolUtils *PoolUtilsCallerSession) GetOperatorFee(_poolId uint8) (*big.Int, error) { + return _PoolUtils.Contract.GetOperatorFee(&_PoolUtils.CallOpts, _poolId) +} + +// GetOperatorPoolId is a free data retrieval call binding the contract method 0x8e43c53a. +// +// Solidity: function getOperatorPoolId(address _operAddr) view returns(uint8) +func (_PoolUtils *PoolUtilsCaller) GetOperatorPoolId(opts *bind.CallOpts, _operAddr common.Address) (uint8, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "getOperatorPoolId", _operAddr) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// GetOperatorPoolId is a free data retrieval call binding the contract method 0x8e43c53a. +// +// Solidity: function getOperatorPoolId(address _operAddr) view returns(uint8) +func (_PoolUtils *PoolUtilsSession) GetOperatorPoolId(_operAddr common.Address) (uint8, error) { + return _PoolUtils.Contract.GetOperatorPoolId(&_PoolUtils.CallOpts, _operAddr) +} + +// GetOperatorPoolId is a free data retrieval call binding the contract method 0x8e43c53a. +// +// Solidity: function getOperatorPoolId(address _operAddr) view returns(uint8) +func (_PoolUtils *PoolUtilsCallerSession) GetOperatorPoolId(_operAddr common.Address) (uint8, error) { + return _PoolUtils.Contract.GetOperatorPoolId(&_PoolUtils.CallOpts, _operAddr) +} + +// GetOperatorTotalNonTerminalKeys is a free data retrieval call binding the contract method 0x5d713ec3. +// +// Solidity: function getOperatorTotalNonTerminalKeys(uint8 _poolId, address _nodeOperator, uint256 _startIndex, uint256 _endIndex) view returns(uint256) +func (_PoolUtils *PoolUtilsCaller) GetOperatorTotalNonTerminalKeys(opts *bind.CallOpts, _poolId uint8, _nodeOperator common.Address, _startIndex *big.Int, _endIndex *big.Int) (*big.Int, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "getOperatorTotalNonTerminalKeys", _poolId, _nodeOperator, _startIndex, _endIndex) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetOperatorTotalNonTerminalKeys is a free data retrieval call binding the contract method 0x5d713ec3. +// +// Solidity: function getOperatorTotalNonTerminalKeys(uint8 _poolId, address _nodeOperator, uint256 _startIndex, uint256 _endIndex) view returns(uint256) +func (_PoolUtils *PoolUtilsSession) GetOperatorTotalNonTerminalKeys(_poolId uint8, _nodeOperator common.Address, _startIndex *big.Int, _endIndex *big.Int) (*big.Int, error) { + return _PoolUtils.Contract.GetOperatorTotalNonTerminalKeys(&_PoolUtils.CallOpts, _poolId, _nodeOperator, _startIndex, _endIndex) +} + +// GetOperatorTotalNonTerminalKeys is a free data retrieval call binding the contract method 0x5d713ec3. +// +// Solidity: function getOperatorTotalNonTerminalKeys(uint8 _poolId, address _nodeOperator, uint256 _startIndex, uint256 _endIndex) view returns(uint256) +func (_PoolUtils *PoolUtilsCallerSession) GetOperatorTotalNonTerminalKeys(_poolId uint8, _nodeOperator common.Address, _startIndex *big.Int, _endIndex *big.Int) (*big.Int, error) { + return _PoolUtils.Contract.GetOperatorTotalNonTerminalKeys(&_PoolUtils.CallOpts, _poolId, _nodeOperator, _startIndex, _endIndex) +} + +// GetPoolIdArray is a free data retrieval call binding the contract method 0xa92e1faf. +// +// Solidity: function getPoolIdArray() view returns(uint8[]) +func (_PoolUtils *PoolUtilsCaller) GetPoolIdArray(opts *bind.CallOpts) ([]uint8, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "getPoolIdArray") + + if err != nil { + return *new([]uint8), err + } + + out0 := *abi.ConvertType(out[0], new([]uint8)).(*[]uint8) + + return out0, err + +} + +// GetPoolIdArray is a free data retrieval call binding the contract method 0xa92e1faf. +// +// Solidity: function getPoolIdArray() view returns(uint8[]) +func (_PoolUtils *PoolUtilsSession) GetPoolIdArray() ([]uint8, error) { + return _PoolUtils.Contract.GetPoolIdArray(&_PoolUtils.CallOpts) +} + +// GetPoolIdArray is a free data retrieval call binding the contract method 0xa92e1faf. +// +// Solidity: function getPoolIdArray() view returns(uint8[]) +func (_PoolUtils *PoolUtilsCallerSession) GetPoolIdArray() ([]uint8, error) { + return _PoolUtils.Contract.GetPoolIdArray(&_PoolUtils.CallOpts) +} + +// GetProtocolFee is a free data retrieval call binding the contract method 0x261d41f5. +// +// Solidity: function getProtocolFee(uint8 _poolId) view returns(uint256) +func (_PoolUtils *PoolUtilsCaller) GetProtocolFee(opts *bind.CallOpts, _poolId uint8) (*big.Int, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "getProtocolFee", _poolId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetProtocolFee is a free data retrieval call binding the contract method 0x261d41f5. +// +// Solidity: function getProtocolFee(uint8 _poolId) view returns(uint256) +func (_PoolUtils *PoolUtilsSession) GetProtocolFee(_poolId uint8) (*big.Int, error) { + return _PoolUtils.Contract.GetProtocolFee(&_PoolUtils.CallOpts, _poolId) +} + +// GetProtocolFee is a free data retrieval call binding the contract method 0x261d41f5. +// +// Solidity: function getProtocolFee(uint8 _poolId) view returns(uint256) +func (_PoolUtils *PoolUtilsCallerSession) GetProtocolFee(_poolId uint8) (*big.Int, error) { + return _PoolUtils.Contract.GetProtocolFee(&_PoolUtils.CallOpts, _poolId) +} + +// GetQueuedValidatorCountByPool is a free data retrieval call binding the contract method 0xb7b32d4b. +// +// Solidity: function getQueuedValidatorCountByPool(uint8 _poolId) view returns(uint256) +func (_PoolUtils *PoolUtilsCaller) GetQueuedValidatorCountByPool(opts *bind.CallOpts, _poolId uint8) (*big.Int, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "getQueuedValidatorCountByPool", _poolId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetQueuedValidatorCountByPool is a free data retrieval call binding the contract method 0xb7b32d4b. +// +// Solidity: function getQueuedValidatorCountByPool(uint8 _poolId) view returns(uint256) +func (_PoolUtils *PoolUtilsSession) GetQueuedValidatorCountByPool(_poolId uint8) (*big.Int, error) { + return _PoolUtils.Contract.GetQueuedValidatorCountByPool(&_PoolUtils.CallOpts, _poolId) +} + +// GetQueuedValidatorCountByPool is a free data retrieval call binding the contract method 0xb7b32d4b. +// +// Solidity: function getQueuedValidatorCountByPool(uint8 _poolId) view returns(uint256) +func (_PoolUtils *PoolUtilsCallerSession) GetQueuedValidatorCountByPool(_poolId uint8) (*big.Int, error) { + return _PoolUtils.Contract.GetQueuedValidatorCountByPool(&_PoolUtils.CallOpts, _poolId) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_PoolUtils *PoolUtilsCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_PoolUtils *PoolUtilsSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _PoolUtils.Contract.GetRoleAdmin(&_PoolUtils.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_PoolUtils *PoolUtilsCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _PoolUtils.Contract.GetRoleAdmin(&_PoolUtils.CallOpts, role) +} + +// GetSocializingPoolAddress is a free data retrieval call binding the contract method 0x7526d429. +// +// Solidity: function getSocializingPoolAddress(uint8 _poolId) view returns(address) +func (_PoolUtils *PoolUtilsCaller) GetSocializingPoolAddress(opts *bind.CallOpts, _poolId uint8) (common.Address, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "getSocializingPoolAddress", _poolId) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetSocializingPoolAddress is a free data retrieval call binding the contract method 0x7526d429. +// +// Solidity: function getSocializingPoolAddress(uint8 _poolId) view returns(address) +func (_PoolUtils *PoolUtilsSession) GetSocializingPoolAddress(_poolId uint8) (common.Address, error) { + return _PoolUtils.Contract.GetSocializingPoolAddress(&_PoolUtils.CallOpts, _poolId) +} + +// GetSocializingPoolAddress is a free data retrieval call binding the contract method 0x7526d429. +// +// Solidity: function getSocializingPoolAddress(uint8 _poolId) view returns(address) +func (_PoolUtils *PoolUtilsCallerSession) GetSocializingPoolAddress(_poolId uint8) (common.Address, error) { + return _PoolUtils.Contract.GetSocializingPoolAddress(&_PoolUtils.CallOpts, _poolId) +} + +// GetTotalActiveValidatorCount is a free data retrieval call binding the contract method 0x77c359e1. +// +// Solidity: function getTotalActiveValidatorCount() view returns(uint256) +func (_PoolUtils *PoolUtilsCaller) GetTotalActiveValidatorCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "getTotalActiveValidatorCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetTotalActiveValidatorCount is a free data retrieval call binding the contract method 0x77c359e1. +// +// Solidity: function getTotalActiveValidatorCount() view returns(uint256) +func (_PoolUtils *PoolUtilsSession) GetTotalActiveValidatorCount() (*big.Int, error) { + return _PoolUtils.Contract.GetTotalActiveValidatorCount(&_PoolUtils.CallOpts) +} + +// GetTotalActiveValidatorCount is a free data retrieval call binding the contract method 0x77c359e1. +// +// Solidity: function getTotalActiveValidatorCount() view returns(uint256) +func (_PoolUtils *PoolUtilsCallerSession) GetTotalActiveValidatorCount() (*big.Int, error) { + return _PoolUtils.Contract.GetTotalActiveValidatorCount(&_PoolUtils.CallOpts) +} + +// GetValidatorPoolId is a free data retrieval call binding the contract method 0xbda0bc89. +// +// Solidity: function getValidatorPoolId(bytes _pubkey) view returns(uint8) +func (_PoolUtils *PoolUtilsCaller) GetValidatorPoolId(opts *bind.CallOpts, _pubkey []byte) (uint8, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "getValidatorPoolId", _pubkey) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// GetValidatorPoolId is a free data retrieval call binding the contract method 0xbda0bc89. +// +// Solidity: function getValidatorPoolId(bytes _pubkey) view returns(uint8) +func (_PoolUtils *PoolUtilsSession) GetValidatorPoolId(_pubkey []byte) (uint8, error) { + return _PoolUtils.Contract.GetValidatorPoolId(&_PoolUtils.CallOpts, _pubkey) +} + +// GetValidatorPoolId is a free data retrieval call binding the contract method 0xbda0bc89. +// +// Solidity: function getValidatorPoolId(bytes _pubkey) view returns(uint8) +func (_PoolUtils *PoolUtilsCallerSession) GetValidatorPoolId(_pubkey []byte) (uint8, error) { + return _PoolUtils.Contract.GetValidatorPoolId(&_PoolUtils.CallOpts, _pubkey) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_PoolUtils *PoolUtilsCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_PoolUtils *PoolUtilsSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _PoolUtils.Contract.HasRole(&_PoolUtils.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_PoolUtils *PoolUtilsCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _PoolUtils.Contract.HasRole(&_PoolUtils.CallOpts, role, account) +} + +// IsExistingOperator is a free data retrieval call binding the contract method 0xf9c4dda4. +// +// Solidity: function isExistingOperator(address _operAddr) view returns(bool) +func (_PoolUtils *PoolUtilsCaller) IsExistingOperator(opts *bind.CallOpts, _operAddr common.Address) (bool, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "isExistingOperator", _operAddr) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsExistingOperator is a free data retrieval call binding the contract method 0xf9c4dda4. +// +// Solidity: function isExistingOperator(address _operAddr) view returns(bool) +func (_PoolUtils *PoolUtilsSession) IsExistingOperator(_operAddr common.Address) (bool, error) { + return _PoolUtils.Contract.IsExistingOperator(&_PoolUtils.CallOpts, _operAddr) +} + +// IsExistingOperator is a free data retrieval call binding the contract method 0xf9c4dda4. +// +// Solidity: function isExistingOperator(address _operAddr) view returns(bool) +func (_PoolUtils *PoolUtilsCallerSession) IsExistingOperator(_operAddr common.Address) (bool, error) { + return _PoolUtils.Contract.IsExistingOperator(&_PoolUtils.CallOpts, _operAddr) +} + +// IsExistingPoolId is a free data retrieval call binding the contract method 0x6cdf1252. +// +// Solidity: function isExistingPoolId(uint8 _poolId) view returns(bool) +func (_PoolUtils *PoolUtilsCaller) IsExistingPoolId(opts *bind.CallOpts, _poolId uint8) (bool, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "isExistingPoolId", _poolId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsExistingPoolId is a free data retrieval call binding the contract method 0x6cdf1252. +// +// Solidity: function isExistingPoolId(uint8 _poolId) view returns(bool) +func (_PoolUtils *PoolUtilsSession) IsExistingPoolId(_poolId uint8) (bool, error) { + return _PoolUtils.Contract.IsExistingPoolId(&_PoolUtils.CallOpts, _poolId) +} + +// IsExistingPoolId is a free data retrieval call binding the contract method 0x6cdf1252. +// +// Solidity: function isExistingPoolId(uint8 _poolId) view returns(bool) +func (_PoolUtils *PoolUtilsCallerSession) IsExistingPoolId(_poolId uint8) (bool, error) { + return _PoolUtils.Contract.IsExistingPoolId(&_PoolUtils.CallOpts, _poolId) +} + +// IsExistingPubkey is a free data retrieval call binding the contract method 0x36514d9f. +// +// Solidity: function isExistingPubkey(bytes _pubkey) view returns(bool) +func (_PoolUtils *PoolUtilsCaller) IsExistingPubkey(opts *bind.CallOpts, _pubkey []byte) (bool, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "isExistingPubkey", _pubkey) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsExistingPubkey is a free data retrieval call binding the contract method 0x36514d9f. +// +// Solidity: function isExistingPubkey(bytes _pubkey) view returns(bool) +func (_PoolUtils *PoolUtilsSession) IsExistingPubkey(_pubkey []byte) (bool, error) { + return _PoolUtils.Contract.IsExistingPubkey(&_PoolUtils.CallOpts, _pubkey) +} + +// IsExistingPubkey is a free data retrieval call binding the contract method 0x36514d9f. +// +// Solidity: function isExistingPubkey(bytes _pubkey) view returns(bool) +func (_PoolUtils *PoolUtilsCallerSession) IsExistingPubkey(_pubkey []byte) (bool, error) { + return _PoolUtils.Contract.IsExistingPubkey(&_PoolUtils.CallOpts, _pubkey) +} + +// OnlyValidKeys is a free data retrieval call binding the contract method 0x9f55941b. +// +// Solidity: function onlyValidKeys(bytes _pubkey, bytes _preDepositSignature, bytes _depositSignature) view returns() +func (_PoolUtils *PoolUtilsCaller) OnlyValidKeys(opts *bind.CallOpts, _pubkey []byte, _preDepositSignature []byte, _depositSignature []byte) error { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "onlyValidKeys", _pubkey, _preDepositSignature, _depositSignature) + + if err != nil { + return err + } + + return err + +} + +// OnlyValidKeys is a free data retrieval call binding the contract method 0x9f55941b. +// +// Solidity: function onlyValidKeys(bytes _pubkey, bytes _preDepositSignature, bytes _depositSignature) view returns() +func (_PoolUtils *PoolUtilsSession) OnlyValidKeys(_pubkey []byte, _preDepositSignature []byte, _depositSignature []byte) error { + return _PoolUtils.Contract.OnlyValidKeys(&_PoolUtils.CallOpts, _pubkey, _preDepositSignature, _depositSignature) +} + +// OnlyValidKeys is a free data retrieval call binding the contract method 0x9f55941b. +// +// Solidity: function onlyValidKeys(bytes _pubkey, bytes _preDepositSignature, bytes _depositSignature) view returns() +func (_PoolUtils *PoolUtilsCallerSession) OnlyValidKeys(_pubkey []byte, _preDepositSignature []byte, _depositSignature []byte) error { + return _PoolUtils.Contract.OnlyValidKeys(&_PoolUtils.CallOpts, _pubkey, _preDepositSignature, _depositSignature) +} + +// OnlyValidName is a free data retrieval call binding the contract method 0x9f7053f5. +// +// Solidity: function onlyValidName(string _name) view returns() +func (_PoolUtils *PoolUtilsCaller) OnlyValidName(opts *bind.CallOpts, _name string) error { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "onlyValidName", _name) + + if err != nil { + return err + } + + return err + +} + +// OnlyValidName is a free data retrieval call binding the contract method 0x9f7053f5. +// +// Solidity: function onlyValidName(string _name) view returns() +func (_PoolUtils *PoolUtilsSession) OnlyValidName(_name string) error { + return _PoolUtils.Contract.OnlyValidName(&_PoolUtils.CallOpts, _name) +} + +// OnlyValidName is a free data retrieval call binding the contract method 0x9f7053f5. +// +// Solidity: function onlyValidName(string _name) view returns() +func (_PoolUtils *PoolUtilsCallerSession) OnlyValidName(_name string) error { + return _PoolUtils.Contract.OnlyValidName(&_PoolUtils.CallOpts, _name) +} + +// PoolAddressById is a free data retrieval call binding the contract method 0xdf8984fe. +// +// Solidity: function poolAddressById(uint8 ) view returns(address) +func (_PoolUtils *PoolUtilsCaller) PoolAddressById(opts *bind.CallOpts, arg0 uint8) (common.Address, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "poolAddressById", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PoolAddressById is a free data retrieval call binding the contract method 0xdf8984fe. +// +// Solidity: function poolAddressById(uint8 ) view returns(address) +func (_PoolUtils *PoolUtilsSession) PoolAddressById(arg0 uint8) (common.Address, error) { + return _PoolUtils.Contract.PoolAddressById(&_PoolUtils.CallOpts, arg0) +} + +// PoolAddressById is a free data retrieval call binding the contract method 0xdf8984fe. +// +// Solidity: function poolAddressById(uint8 ) view returns(address) +func (_PoolUtils *PoolUtilsCallerSession) PoolAddressById(arg0 uint8) (common.Address, error) { + return _PoolUtils.Contract.PoolAddressById(&_PoolUtils.CallOpts, arg0) +} + +// PoolIdArray is a free data retrieval call binding the contract method 0x8465bef5. +// +// Solidity: function poolIdArray(uint256 ) view returns(uint8) +func (_PoolUtils *PoolUtilsCaller) PoolIdArray(opts *bind.CallOpts, arg0 *big.Int) (uint8, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "poolIdArray", arg0) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// PoolIdArray is a free data retrieval call binding the contract method 0x8465bef5. +// +// Solidity: function poolIdArray(uint256 ) view returns(uint8) +func (_PoolUtils *PoolUtilsSession) PoolIdArray(arg0 *big.Int) (uint8, error) { + return _PoolUtils.Contract.PoolIdArray(&_PoolUtils.CallOpts, arg0) +} + +// PoolIdArray is a free data retrieval call binding the contract method 0x8465bef5. +// +// Solidity: function poolIdArray(uint256 ) view returns(uint8) +func (_PoolUtils *PoolUtilsCallerSession) PoolIdArray(arg0 *big.Int) (uint8, error) { + return _PoolUtils.Contract.PoolIdArray(&_PoolUtils.CallOpts, arg0) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_PoolUtils *PoolUtilsCaller) StaderConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _PoolUtils.contract.Call(opts, &out, "staderConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_PoolUtils *PoolUtilsSession) StaderConfig() (common.Address, error) { + return _PoolUtils.Contract.StaderConfig(&_PoolUtils.CallOpts) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_PoolUtils *PoolUtilsCallerSession) StaderConfig() (common.Address, error) { + return _PoolUtils.Contract.StaderConfig(&_PoolUtils.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_PoolUtils *PoolUtilsCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _PoolUtils.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 (_PoolUtils *PoolUtilsSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _PoolUtils.Contract.SupportsInterface(&_PoolUtils.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_PoolUtils *PoolUtilsCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _PoolUtils.Contract.SupportsInterface(&_PoolUtils.CallOpts, interfaceId) +} + +// AddNewPool is a paid mutator transaction binding the contract method 0x63d0d5c0. +// +// Solidity: function addNewPool(uint8 _poolId, address _poolAddress) returns() +func (_PoolUtils *PoolUtilsTransactor) AddNewPool(opts *bind.TransactOpts, _poolId uint8, _poolAddress common.Address) (*types.Transaction, error) { + return _PoolUtils.contract.Transact(opts, "addNewPool", _poolId, _poolAddress) +} + +// AddNewPool is a paid mutator transaction binding the contract method 0x63d0d5c0. +// +// Solidity: function addNewPool(uint8 _poolId, address _poolAddress) returns() +func (_PoolUtils *PoolUtilsSession) AddNewPool(_poolId uint8, _poolAddress common.Address) (*types.Transaction, error) { + return _PoolUtils.Contract.AddNewPool(&_PoolUtils.TransactOpts, _poolId, _poolAddress) +} + +// AddNewPool is a paid mutator transaction binding the contract method 0x63d0d5c0. +// +// Solidity: function addNewPool(uint8 _poolId, address _poolAddress) returns() +func (_PoolUtils *PoolUtilsTransactorSession) AddNewPool(_poolId uint8, _poolAddress common.Address) (*types.Transaction, error) { + return _PoolUtils.Contract.AddNewPool(&_PoolUtils.TransactOpts, _poolId, _poolAddress) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_PoolUtils *PoolUtilsTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _PoolUtils.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_PoolUtils *PoolUtilsSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PoolUtils.Contract.GrantRole(&_PoolUtils.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_PoolUtils *PoolUtilsTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PoolUtils.Contract.GrantRole(&_PoolUtils.TransactOpts, role, account) +} + +// ProcessValidatorExitList is a paid mutator transaction binding the contract method 0xff6bceec. +// +// Solidity: function processValidatorExitList(bytes[] _pubkeys) returns() +func (_PoolUtils *PoolUtilsTransactor) ProcessValidatorExitList(opts *bind.TransactOpts, _pubkeys [][]byte) (*types.Transaction, error) { + return _PoolUtils.contract.Transact(opts, "processValidatorExitList", _pubkeys) +} + +// ProcessValidatorExitList is a paid mutator transaction binding the contract method 0xff6bceec. +// +// Solidity: function processValidatorExitList(bytes[] _pubkeys) returns() +func (_PoolUtils *PoolUtilsSession) ProcessValidatorExitList(_pubkeys [][]byte) (*types.Transaction, error) { + return _PoolUtils.Contract.ProcessValidatorExitList(&_PoolUtils.TransactOpts, _pubkeys) +} + +// ProcessValidatorExitList is a paid mutator transaction binding the contract method 0xff6bceec. +// +// Solidity: function processValidatorExitList(bytes[] _pubkeys) returns() +func (_PoolUtils *PoolUtilsTransactorSession) ProcessValidatorExitList(_pubkeys [][]byte) (*types.Transaction, error) { + return _PoolUtils.Contract.ProcessValidatorExitList(&_PoolUtils.TransactOpts, _pubkeys) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_PoolUtils *PoolUtilsTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _PoolUtils.contract.Transact(opts, "renounceRole", role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_PoolUtils *PoolUtilsSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PoolUtils.Contract.RenounceRole(&_PoolUtils.TransactOpts, role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_PoolUtils *PoolUtilsTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PoolUtils.Contract.RenounceRole(&_PoolUtils.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_PoolUtils *PoolUtilsTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _PoolUtils.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_PoolUtils *PoolUtilsSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PoolUtils.Contract.RevokeRole(&_PoolUtils.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_PoolUtils *PoolUtilsTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _PoolUtils.Contract.RevokeRole(&_PoolUtils.TransactOpts, role, account) +} + +// UpdatePoolAddress is a paid mutator transaction binding the contract method 0xd97ac847. +// +// Solidity: function updatePoolAddress(uint8 _poolId, address _newPoolAddress) returns() +func (_PoolUtils *PoolUtilsTransactor) UpdatePoolAddress(opts *bind.TransactOpts, _poolId uint8, _newPoolAddress common.Address) (*types.Transaction, error) { + return _PoolUtils.contract.Transact(opts, "updatePoolAddress", _poolId, _newPoolAddress) +} + +// UpdatePoolAddress is a paid mutator transaction binding the contract method 0xd97ac847. +// +// Solidity: function updatePoolAddress(uint8 _poolId, address _newPoolAddress) returns() +func (_PoolUtils *PoolUtilsSession) UpdatePoolAddress(_poolId uint8, _newPoolAddress common.Address) (*types.Transaction, error) { + return _PoolUtils.Contract.UpdatePoolAddress(&_PoolUtils.TransactOpts, _poolId, _newPoolAddress) +} + +// UpdatePoolAddress is a paid mutator transaction binding the contract method 0xd97ac847. +// +// Solidity: function updatePoolAddress(uint8 _poolId, address _newPoolAddress) returns() +func (_PoolUtils *PoolUtilsTransactorSession) UpdatePoolAddress(_poolId uint8, _newPoolAddress common.Address) (*types.Transaction, error) { + return _PoolUtils.Contract.UpdatePoolAddress(&_PoolUtils.TransactOpts, _poolId, _newPoolAddress) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_PoolUtils *PoolUtilsTransactor) UpdateStaderConfig(opts *bind.TransactOpts, _staderConfig common.Address) (*types.Transaction, error) { + return _PoolUtils.contract.Transact(opts, "updateStaderConfig", _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_PoolUtils *PoolUtilsSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _PoolUtils.Contract.UpdateStaderConfig(&_PoolUtils.TransactOpts, _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_PoolUtils *PoolUtilsTransactorSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _PoolUtils.Contract.UpdateStaderConfig(&_PoolUtils.TransactOpts, _staderConfig) +} + +// PoolUtilsDeactivatedPoolIterator is returned from FilterDeactivatedPool and is used to iterate over the raw logs and unpacked data for DeactivatedPool events raised by the PoolUtils contract. +type PoolUtilsDeactivatedPoolIterator struct { + Event *PoolUtilsDeactivatedPool // 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 *PoolUtilsDeactivatedPoolIterator) 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(PoolUtilsDeactivatedPool) + if err := 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(PoolUtilsDeactivatedPool) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PoolUtilsDeactivatedPoolIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PoolUtilsDeactivatedPoolIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PoolUtilsDeactivatedPool represents a DeactivatedPool event raised by the PoolUtils contract. +type PoolUtilsDeactivatedPool struct { + PoolId uint8 + PoolAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeactivatedPool is a free log retrieval operation binding the contract event 0xf711845001a9a7fade2a40e12b1fb02c31952a41f7c999ae1f84a283d32671f6. +// +// Solidity: event DeactivatedPool(uint8 indexed poolId, address poolAddress) +func (_PoolUtils *PoolUtilsFilterer) FilterDeactivatedPool(opts *bind.FilterOpts, poolId []uint8) (*PoolUtilsDeactivatedPoolIterator, error) { + + var poolIdRule []interface{} + for _, poolIdItem := range poolId { + poolIdRule = append(poolIdRule, poolIdItem) + } + + logs, sub, err := _PoolUtils.contract.FilterLogs(opts, "DeactivatedPool", poolIdRule) + if err != nil { + return nil, err + } + return &PoolUtilsDeactivatedPoolIterator{contract: _PoolUtils.contract, event: "DeactivatedPool", logs: logs, sub: sub}, nil +} + +// WatchDeactivatedPool is a free log subscription operation binding the contract event 0xf711845001a9a7fade2a40e12b1fb02c31952a41f7c999ae1f84a283d32671f6. +// +// Solidity: event DeactivatedPool(uint8 indexed poolId, address poolAddress) +func (_PoolUtils *PoolUtilsFilterer) WatchDeactivatedPool(opts *bind.WatchOpts, sink chan<- *PoolUtilsDeactivatedPool, poolId []uint8) (event.Subscription, error) { + + var poolIdRule []interface{} + for _, poolIdItem := range poolId { + poolIdRule = append(poolIdRule, poolIdItem) + } + + logs, sub, err := _PoolUtils.contract.WatchLogs(opts, "DeactivatedPool", poolIdRule) + 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(PoolUtilsDeactivatedPool) + if err := _PoolUtils.contract.UnpackLog(event, "DeactivatedPool", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseDeactivatedPool is a log parse operation binding the contract event 0xf711845001a9a7fade2a40e12b1fb02c31952a41f7c999ae1f84a283d32671f6. +// +// Solidity: event DeactivatedPool(uint8 indexed poolId, address poolAddress) +func (_PoolUtils *PoolUtilsFilterer) ParseDeactivatedPool(log types.Log) (*PoolUtilsDeactivatedPool, error) { + event := new(PoolUtilsDeactivatedPool) + if err := _PoolUtils.contract.UnpackLog(event, "DeactivatedPool", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PoolUtilsExitValidatorIterator is returned from FilterExitValidator and is used to iterate over the raw logs and unpacked data for ExitValidator events raised by the PoolUtils contract. +type PoolUtilsExitValidatorIterator struct { + Event *PoolUtilsExitValidator // 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 *PoolUtilsExitValidatorIterator) 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(PoolUtilsExitValidator) + if err := 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(PoolUtilsExitValidator) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PoolUtilsExitValidatorIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PoolUtilsExitValidatorIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PoolUtilsExitValidator represents a ExitValidator event raised by the PoolUtils contract. +type PoolUtilsExitValidator struct { + Pubkey []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExitValidator is a free log retrieval operation binding the contract event 0xce4931e23262c5aa14c3b95b5e67c07bb38447fda706a4e5e4019e4f70142812. +// +// Solidity: event ExitValidator(bytes pubkey) +func (_PoolUtils *PoolUtilsFilterer) FilterExitValidator(opts *bind.FilterOpts) (*PoolUtilsExitValidatorIterator, error) { + + logs, sub, err := _PoolUtils.contract.FilterLogs(opts, "ExitValidator") + if err != nil { + return nil, err + } + return &PoolUtilsExitValidatorIterator{contract: _PoolUtils.contract, event: "ExitValidator", logs: logs, sub: sub}, nil +} + +// WatchExitValidator is a free log subscription operation binding the contract event 0xce4931e23262c5aa14c3b95b5e67c07bb38447fda706a4e5e4019e4f70142812. +// +// Solidity: event ExitValidator(bytes pubkey) +func (_PoolUtils *PoolUtilsFilterer) WatchExitValidator(opts *bind.WatchOpts, sink chan<- *PoolUtilsExitValidator) (event.Subscription, error) { + + logs, sub, err := _PoolUtils.contract.WatchLogs(opts, "ExitValidator") + 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(PoolUtilsExitValidator) + if err := _PoolUtils.contract.UnpackLog(event, "ExitValidator", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseExitValidator is a log parse operation binding the contract event 0xce4931e23262c5aa14c3b95b5e67c07bb38447fda706a4e5e4019e4f70142812. +// +// Solidity: event ExitValidator(bytes pubkey) +func (_PoolUtils *PoolUtilsFilterer) ParseExitValidator(log types.Log) (*PoolUtilsExitValidator, error) { + event := new(PoolUtilsExitValidator) + if err := _PoolUtils.contract.UnpackLog(event, "ExitValidator", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PoolUtilsInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the PoolUtils contract. +type PoolUtilsInitializedIterator struct { + Event *PoolUtilsInitialized // 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 *PoolUtilsInitializedIterator) 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(PoolUtilsInitialized) + if err := 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(PoolUtilsInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PoolUtilsInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PoolUtilsInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PoolUtilsInitialized represents a Initialized event raised by the PoolUtils contract. +type PoolUtilsInitialized 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 (_PoolUtils *PoolUtilsFilterer) FilterInitialized(opts *bind.FilterOpts) (*PoolUtilsInitializedIterator, error) { + + logs, sub, err := _PoolUtils.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &PoolUtilsInitializedIterator{contract: _PoolUtils.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 (_PoolUtils *PoolUtilsFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *PoolUtilsInitialized) (event.Subscription, error) { + + logs, sub, err := _PoolUtils.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(PoolUtilsInitialized) + if err := _PoolUtils.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 (_PoolUtils *PoolUtilsFilterer) ParseInitialized(log types.Log) (*PoolUtilsInitialized, error) { + event := new(PoolUtilsInitialized) + if err := _PoolUtils.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PoolUtilsPoolAddedIterator is returned from FilterPoolAdded and is used to iterate over the raw logs and unpacked data for PoolAdded events raised by the PoolUtils contract. +type PoolUtilsPoolAddedIterator struct { + Event *PoolUtilsPoolAdded // 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 *PoolUtilsPoolAddedIterator) 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(PoolUtilsPoolAdded) + if err := 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(PoolUtilsPoolAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PoolUtilsPoolAddedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PoolUtilsPoolAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PoolUtilsPoolAdded represents a PoolAdded event raised by the PoolUtils contract. +type PoolUtilsPoolAdded struct { + PoolId uint8 + PoolAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPoolAdded is a free log retrieval operation binding the contract event 0x697362d5a2939aff718fb2db4145cb1b4ffc68872c82b2e64d805d8e94845af1. +// +// Solidity: event PoolAdded(uint8 indexed poolId, address poolAddress) +func (_PoolUtils *PoolUtilsFilterer) FilterPoolAdded(opts *bind.FilterOpts, poolId []uint8) (*PoolUtilsPoolAddedIterator, error) { + + var poolIdRule []interface{} + for _, poolIdItem := range poolId { + poolIdRule = append(poolIdRule, poolIdItem) + } + + logs, sub, err := _PoolUtils.contract.FilterLogs(opts, "PoolAdded", poolIdRule) + if err != nil { + return nil, err + } + return &PoolUtilsPoolAddedIterator{contract: _PoolUtils.contract, event: "PoolAdded", logs: logs, sub: sub}, nil +} + +// WatchPoolAdded is a free log subscription operation binding the contract event 0x697362d5a2939aff718fb2db4145cb1b4ffc68872c82b2e64d805d8e94845af1. +// +// Solidity: event PoolAdded(uint8 indexed poolId, address poolAddress) +func (_PoolUtils *PoolUtilsFilterer) WatchPoolAdded(opts *bind.WatchOpts, sink chan<- *PoolUtilsPoolAdded, poolId []uint8) (event.Subscription, error) { + + var poolIdRule []interface{} + for _, poolIdItem := range poolId { + poolIdRule = append(poolIdRule, poolIdItem) + } + + logs, sub, err := _PoolUtils.contract.WatchLogs(opts, "PoolAdded", poolIdRule) + 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(PoolUtilsPoolAdded) + if err := _PoolUtils.contract.UnpackLog(event, "PoolAdded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParsePoolAdded is a log parse operation binding the contract event 0x697362d5a2939aff718fb2db4145cb1b4ffc68872c82b2e64d805d8e94845af1. +// +// Solidity: event PoolAdded(uint8 indexed poolId, address poolAddress) +func (_PoolUtils *PoolUtilsFilterer) ParsePoolAdded(log types.Log) (*PoolUtilsPoolAdded, error) { + event := new(PoolUtilsPoolAdded) + if err := _PoolUtils.contract.UnpackLog(event, "PoolAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PoolUtilsPoolAddressUpdatedIterator is returned from FilterPoolAddressUpdated and is used to iterate over the raw logs and unpacked data for PoolAddressUpdated events raised by the PoolUtils contract. +type PoolUtilsPoolAddressUpdatedIterator struct { + Event *PoolUtilsPoolAddressUpdated // 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 *PoolUtilsPoolAddressUpdatedIterator) 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(PoolUtilsPoolAddressUpdated) + if err := 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(PoolUtilsPoolAddressUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PoolUtilsPoolAddressUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PoolUtilsPoolAddressUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PoolUtilsPoolAddressUpdated represents a PoolAddressUpdated event raised by the PoolUtils contract. +type PoolUtilsPoolAddressUpdated struct { + PoolId uint8 + PoolAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPoolAddressUpdated is a free log retrieval operation binding the contract event 0xf732deab68331ad20834cfc15d686fed4bac945cf3af5d7f729205c9bf846199. +// +// Solidity: event PoolAddressUpdated(uint8 indexed poolId, address poolAddress) +func (_PoolUtils *PoolUtilsFilterer) FilterPoolAddressUpdated(opts *bind.FilterOpts, poolId []uint8) (*PoolUtilsPoolAddressUpdatedIterator, error) { + + var poolIdRule []interface{} + for _, poolIdItem := range poolId { + poolIdRule = append(poolIdRule, poolIdItem) + } + + logs, sub, err := _PoolUtils.contract.FilterLogs(opts, "PoolAddressUpdated", poolIdRule) + if err != nil { + return nil, err + } + return &PoolUtilsPoolAddressUpdatedIterator{contract: _PoolUtils.contract, event: "PoolAddressUpdated", logs: logs, sub: sub}, nil +} + +// WatchPoolAddressUpdated is a free log subscription operation binding the contract event 0xf732deab68331ad20834cfc15d686fed4bac945cf3af5d7f729205c9bf846199. +// +// Solidity: event PoolAddressUpdated(uint8 indexed poolId, address poolAddress) +func (_PoolUtils *PoolUtilsFilterer) WatchPoolAddressUpdated(opts *bind.WatchOpts, sink chan<- *PoolUtilsPoolAddressUpdated, poolId []uint8) (event.Subscription, error) { + + var poolIdRule []interface{} + for _, poolIdItem := range poolId { + poolIdRule = append(poolIdRule, poolIdItem) + } + + logs, sub, err := _PoolUtils.contract.WatchLogs(opts, "PoolAddressUpdated", poolIdRule) + 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(PoolUtilsPoolAddressUpdated) + if err := _PoolUtils.contract.UnpackLog(event, "PoolAddressUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParsePoolAddressUpdated is a log parse operation binding the contract event 0xf732deab68331ad20834cfc15d686fed4bac945cf3af5d7f729205c9bf846199. +// +// Solidity: event PoolAddressUpdated(uint8 indexed poolId, address poolAddress) +func (_PoolUtils *PoolUtilsFilterer) ParsePoolAddressUpdated(log types.Log) (*PoolUtilsPoolAddressUpdated, error) { + event := new(PoolUtilsPoolAddressUpdated) + if err := _PoolUtils.contract.UnpackLog(event, "PoolAddressUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PoolUtilsRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the PoolUtils contract. +type PoolUtilsRoleAdminChangedIterator struct { + Event *PoolUtilsRoleAdminChanged // 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 *PoolUtilsRoleAdminChangedIterator) 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(PoolUtilsRoleAdminChanged) + if err := 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(PoolUtilsRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PoolUtilsRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PoolUtilsRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PoolUtilsRoleAdminChanged represents a RoleAdminChanged event raised by the PoolUtils contract. +type PoolUtilsRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_PoolUtils *PoolUtilsFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*PoolUtilsRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _PoolUtils.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &PoolUtilsRoleAdminChangedIterator{contract: _PoolUtils.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_PoolUtils *PoolUtilsFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *PoolUtilsRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _PoolUtils.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(PoolUtilsRoleAdminChanged) + if err := _PoolUtils.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_PoolUtils *PoolUtilsFilterer) ParseRoleAdminChanged(log types.Log) (*PoolUtilsRoleAdminChanged, error) { + event := new(PoolUtilsRoleAdminChanged) + if err := _PoolUtils.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PoolUtilsRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the PoolUtils contract. +type PoolUtilsRoleGrantedIterator struct { + Event *PoolUtilsRoleGranted // 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 *PoolUtilsRoleGrantedIterator) 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(PoolUtilsRoleGranted) + if err := 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(PoolUtilsRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PoolUtilsRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PoolUtilsRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PoolUtilsRoleGranted represents a RoleGranted event raised by the PoolUtils contract. +type PoolUtilsRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_PoolUtils *PoolUtilsFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*PoolUtilsRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _PoolUtils.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &PoolUtilsRoleGrantedIterator{contract: _PoolUtils.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_PoolUtils *PoolUtilsFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *PoolUtilsRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _PoolUtils.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, 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(PoolUtilsRoleGranted) + if err := _PoolUtils.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_PoolUtils *PoolUtilsFilterer) ParseRoleGranted(log types.Log) (*PoolUtilsRoleGranted, error) { + event := new(PoolUtilsRoleGranted) + if err := _PoolUtils.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PoolUtilsRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the PoolUtils contract. +type PoolUtilsRoleRevokedIterator struct { + Event *PoolUtilsRoleRevoked // 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 *PoolUtilsRoleRevokedIterator) 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(PoolUtilsRoleRevoked) + if err := 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(PoolUtilsRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PoolUtilsRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PoolUtilsRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PoolUtilsRoleRevoked represents a RoleRevoked event raised by the PoolUtils contract. +type PoolUtilsRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_PoolUtils *PoolUtilsFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*PoolUtilsRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _PoolUtils.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &PoolUtilsRoleRevokedIterator{contract: _PoolUtils.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_PoolUtils *PoolUtilsFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *PoolUtilsRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _PoolUtils.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, 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(PoolUtilsRoleRevoked) + if err := _PoolUtils.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_PoolUtils *PoolUtilsFilterer) ParseRoleRevoked(log types.Log) (*PoolUtilsRoleRevoked, error) { + event := new(PoolUtilsRoleRevoked) + if err := _PoolUtils.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// PoolUtilsUpdatedStaderConfigIterator is returned from FilterUpdatedStaderConfig and is used to iterate over the raw logs and unpacked data for UpdatedStaderConfig events raised by the PoolUtils contract. +type PoolUtilsUpdatedStaderConfigIterator struct { + Event *PoolUtilsUpdatedStaderConfig // 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 *PoolUtilsUpdatedStaderConfigIterator) 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(PoolUtilsUpdatedStaderConfig) + if err := 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(PoolUtilsUpdatedStaderConfig) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *PoolUtilsUpdatedStaderConfigIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *PoolUtilsUpdatedStaderConfigIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// PoolUtilsUpdatedStaderConfig represents a UpdatedStaderConfig event raised by the PoolUtils contract. +type PoolUtilsUpdatedStaderConfig struct { + StaderConfig common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedStaderConfig is a free log retrieval operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_PoolUtils *PoolUtilsFilterer) FilterUpdatedStaderConfig(opts *bind.FilterOpts) (*PoolUtilsUpdatedStaderConfigIterator, error) { + + logs, sub, err := _PoolUtils.contract.FilterLogs(opts, "UpdatedStaderConfig") + if err != nil { + return nil, err + } + return &PoolUtilsUpdatedStaderConfigIterator{contract: _PoolUtils.contract, event: "UpdatedStaderConfig", logs: logs, sub: sub}, nil +} + +// WatchUpdatedStaderConfig is a free log subscription operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_PoolUtils *PoolUtilsFilterer) WatchUpdatedStaderConfig(opts *bind.WatchOpts, sink chan<- *PoolUtilsUpdatedStaderConfig) (event.Subscription, error) { + + logs, sub, err := _PoolUtils.contract.WatchLogs(opts, "UpdatedStaderConfig") + 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(PoolUtilsUpdatedStaderConfig) + if err := _PoolUtils.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedStaderConfig is a log parse operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_PoolUtils *PoolUtilsFilterer) ParseUpdatedStaderConfig(log types.Log) (*PoolUtilsUpdatedStaderConfig, error) { + event := new(PoolUtilsUpdatedStaderConfig) + if err := _PoolUtils.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/testing/deployHelper_test.go b/testing/deployHelper_test.go index 4a5d1578d..5e6ed8c1c 100644 --- a/testing/deployHelper_test.go +++ b/testing/deployHelper_test.go @@ -7,12 +7,14 @@ import ( "log" "math/big" "testing" + "time" "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/crypto" "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/rpc" "github.com/stader-labs/stader-node/shared/services" "github.com/stader-labs/stader-node/stader-lib/node" "github.com/stader-labs/stader-node/testing/contracts" @@ -58,6 +60,13 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { fmt.Printf("staderCfAddress %+v", staderCfAddress.Hex()) auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + // Update Node permissionless regis to stader config + mn, _ := stdCfContract.MANAGER(&bind.CallOpts{}) + _, err = stdCfContract.GrantRole(auth, mn, fromAddress) + require.Nil(t, err) + auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + require.Nil(t, err) + // deploy the ethx contract ethXAddr, _, ethxContract, err := contracts.DeployETHX(auth, client, fromAddress, staderCfAddress) require.Nil(t, err) @@ -83,21 +92,38 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { require.Nil(t, err) // Deploy permissionless pool - permissionlessPool, _, _, err := contracts.DeployPermissionlessPool(auth, client, fromAddress, staderCfAddress) + permissionlessPoolAddr, _, _, err := contracts.DeployPermissionlessPool(auth, client, fromAddress, staderCfAddress) require.Nil(t, err) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) // Update Node permissionless pool to stader config - _, err = stdCfContract.UpdatePermissionlessPool(auth, permissionlessPool) + _, err = stdCfContract.UpdatePermissionlessPool(auth, permissionlessPoolAddr) + require.Nil(t, err) + auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + require.Nil(t, err) + + // Deploy permissionless pool + poolUtils, _, poolUtilsContract, err := contracts.DeployPoolUtils(auth, client, fromAddress, staderCfAddress) require.Nil(t, err) + auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + + require.Nil(t, err) + poolUtilsContract.AddNewPool(auth, uint8(1), permissionlessPoolAddr) + + auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + require.Nil(t, err) + + // Update Node poolUtils pool to stader config + _, err = stdCfContract.UpdatePoolUtils(auth, poolUtils) require.Nil(t, err) fmt.Printf("Api contract from %s\n", auth.From.Hex()) fmt.Printf("DeployETHX to %s\n", ethXAddr.Hex()) fmt.Printf("DeployStaderConfig to %s\n", staderCfAddress.Hex()) + fmt.Printf("DeployPoolUtils to %s\n", poolUtils.Hex()) prn, err := services.GetPermissionlessNodeRegistry(c) require.Nil(t, err) @@ -117,8 +143,10 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { require.Nil(t, err) // npr.GetRoleAdmin() - _, err = node.OnboardNodeOperator(prn, true, "stader", acc.Address, auth) + _, err = node.OnboardNodeOperator(prn, true, "nodetesting", acc.Address, auth) require.Nil(t, err) + + time.Sleep(time.Second * 5) } // GetNextTransaction returns the next transaction in the pending transaction queue @@ -180,3 +208,12 @@ func send1EthTransaction(client *ethclient.Client, fmt.Printf("tx sent: %s", signedTx.Hash().Hex()) // tx sent: 0x77006fcb3938f648e2cc65bafd27dec30b9bfbe9df41f78498b9c8b7322a249e } + +func reset(t *testing.T, rawurl string) { + ctx := context.Background() + c, err := rpc.DialContext(ctx, rawurl) + require.Nil(t, err) + + err = c.CallContext(ctx, nil, "anvil_reset") + require.Nil(t, err) +} diff --git a/testing/httptest/http.go b/testing/httptest/http.go new file mode 100644 index 000000000..731d8b527 --- /dev/null +++ b/testing/httptest/http.go @@ -0,0 +1,51 @@ +package http + +import ( + "fmt" + "io/ioutil" + "log" + "net/http" + "net/http/httptest" + "net/url" + "strings" + "testing" +) + +// Req: http://localhost:1234/upper?word=abc +// Res: ABC +func upperCaseHandler(w http.ResponseWriter, r *http.Request) { + query, err := url.ParseQuery(r.URL.RawQuery) + if err != nil { + w.WriteHeader(http.StatusBadRequest) + fmt.Fprintf(w, "invalid request") + return + } + word := query.Get("word") + if len(word) == 0 { + w.WriteHeader(http.StatusBadRequest) + fmt.Fprintf(w, "missing word") + return + } + w.WriteHeader(http.StatusOK) + fmt.Fprintf(w, strings.ToUpper(word)) +} + +func main() { + http.HandleFunc("/upper", upperCaseHandler) + log.Fatal(http.ListenAndServe(":1234", nil)) +} + +func TestUpperCaseHandler(t *testing.T) { + req := httptest.NewRequest(http.MethodGet, "/upper?word=abc", nil) + w := httptest.NewRecorder() + upperCaseHandler(w, req) + res := w.Result() + defer res.Body.Close() + data, err := ioutil.ReadAll(res.Body) + if err != nil { + t.Errorf("expected error to be nil got %v", err) + } + if string(data) != "ABC" { + t.Errorf("expected ABC got %v", string(data)) + } +} diff --git a/testing/node_test.go b/testing/node_test.go index 1c4952503..de1ea375e 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -33,12 +33,15 @@ func TestNodeSuite(t *testing.T) { } func (s *StaderNodeSuite) TestNodeDaemon() { - time.Sleep(time.Second * 20) + time.Sleep(time.Second * 10) } +// func (s *StaderNodeSuite) TestNode2() { +// time.Sleep(time.Second * 20) +// } + // run once, before test suite methods func (s *StaderNodeSuite) SetupSuite() { - removeTestFolder(s.T()) defer func() { r := recover() From ed93106fe6652597db5e2603a7bb0a30fd51966f Mon Sep 17 00:00:00 2001 From: batphonghan Date: Mon, 19 Jun 2023 19:23:54 +0700 Subject: [PATCH 24/90] Add http test server --- shared/services/config/stadernode-config.go | 2 +- testing/httptest/http.go | 66 +++++++++------------ testing/node_test.go | 6 ++ 3 files changed, 35 insertions(+), 39 deletions(-) diff --git a/shared/services/config/stadernode-config.go b/shared/services/config/stadernode-config.go index 4b350da61..260b540e9 100644 --- a/shared/services/config/stadernode-config.go +++ b/shared/services/config/stadernode-config.go @@ -260,7 +260,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Devnet: "https://1r6l0g1nkd.execute-api.us-east-1.amazonaws.com/prod", config.Network_Mainnet: "https://1r6l0g1nkd.execute-api.us-east-1.amazonaws.com/prod", config.Network_Zhejiang: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", - config.Network_Local: "http://localhost:9088", + config.Network_Local: "http://localhost:9989", }, } } diff --git a/testing/httptest/http.go b/testing/httptest/http.go index 731d8b527..2645e9638 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -1,51 +1,41 @@ -package http +package httptest import ( - "fmt" - "io/ioutil" - "log" + "encoding/json" "net/http" - "net/http/httptest" - "net/url" - "strings" "testing" + + stader_backend "github.com/stader-labs/stader-node/shared/types/stader-backend" + "github.com/stretchr/testify/require" ) -// Req: http://localhost:1234/upper?word=abc -// Res: ABC -func upperCaseHandler(w http.ResponseWriter, r *http.Request) { - query, err := url.ParseQuery(r.URL.RawQuery) - if err != nil { - w.WriteHeader(http.StatusBadRequest) - fmt.Fprintf(w, "invalid request") - return - } - word := query.Get("word") - if len(word) == 0 { - w.WriteHeader(http.StatusBadRequest) - fmt.Fprintf(w, "missing word") - return +type StaderHandler struct { + data map[string]interface{} + t *testing.T +} + +func SererHttp(t *testing.T) { + mux := http.NewServeMux() + s := StaderHandler{ + data: make(map[string]interface{}), + t: t, } - w.WriteHeader(http.StatusOK) - fmt.Fprintf(w, strings.ToUpper(word)) + mux.HandleFunc("/presigns", s.presigns) + mux.HandleFunc("/publicKey", s.publicKey) + + err := http.ListenAndServe(":9989", mux) + + require.Nil(t, err) } -func main() { - http.HandleFunc("/upper", upperCaseHandler) - log.Fatal(http.ListenAndServe(":1234", nil)) +func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") } -func TestUpperCaseHandler(t *testing.T) { - req := httptest.NewRequest(http.MethodGet, "/upper?word=abc", nil) - w := httptest.NewRecorder() - upperCaseHandler(w, req) - res := w.Result() - defer res.Body.Close() - data, err := ioutil.ReadAll(res.Body) - if err != nil { - t.Errorf("expected error to be nil got %v", err) - } - if string(data) != "ABC" { - t.Errorf("expected ABC got %v", string(data)) +func (s *StaderHandler) publicKey(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + p := stader_backend.PublicKeyApiResponse{ + Value: "true", } + json.NewEncoder(w).Encode(p) } diff --git a/testing/node_test.go b/testing/node_test.go index de1ea375e..ffb097e3a 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -13,6 +13,8 @@ import ( "github.com/sirupsen/logrus" //stader/register.go + + "github.com/stader-labs/stader-node/testing/httptest" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" @@ -70,6 +72,10 @@ func (s *StaderNodeSuite) SetupSuite() { }) assert.Nil(s.T(), err) }() + + go func() { + httptest.SererHttp(s.T()) + }() } // run once, after test suite methods From 3e876ce61cb4a1523eb9ddd6097e97e15c456b81 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Mon, 19 Jun 2023 21:33:19 +0700 Subject: [PATCH 25/90] Update package --- shared/services/bc-manager.go | 2 - stader/node/node.go | 126 +++++++++++++++++----------------- testing/configHelper_test.go | 29 ++++---- testing/httptest/http.go | 2 +- 4 files changed, 81 insertions(+), 78 deletions(-) diff --git a/shared/services/bc-manager.go b/shared/services/bc-manager.go index 89995f4a4..3b9eac114 100644 --- a/shared/services/bc-manager.go +++ b/shared/services/bc-manager.go @@ -75,8 +75,6 @@ func NewBeaconClientManager(cfg *config.StaderConfig) (*BeaconClientManager, err return nil, fmt.Errorf("Unknown Consensus client mode '%v'", cfg.ConsensusClientMode.Value) } - primaryProvider = "http://127.0.0.1:51799" - // Fallback CC var fallbackProvider string if cfg.UseFallbackClients.Value == true { diff --git a/stader/node/node.go b/stader/node/node.go index 79781a109..b289a83c0 100644 --- a/stader/node/node.go +++ b/stader/node/node.go @@ -112,14 +112,14 @@ func run(c *cli.Context) error { } // Initialize tasks - // manageFeeRecipient, err := newManageFeeRecipient(c, log.NewColorLogger(ManageFeeRecipientColor)) - // if err != nil { - // return err - // } - // merkleProofsDownloader, err := NewMerkleProofsDownloader(c, log.NewColorLogger(MerkleProofsDownloaderColor)) - // if err != nil { - // return err - // } + manageFeeRecipient, err := newManageFeeRecipient(c, log.NewColorLogger(ManageFeeRecipientColor)) + if err != nil { + return err + } + merkleProofsDownloader, err := NewMerkleProofsDownloader(c, log.NewColorLogger(MerkleProofsDownloaderColor)) + if err != nil { + return err + } // Initialize loggers errorLog := log.NewColorLogger(ErrorColor) @@ -141,11 +141,11 @@ func run(c *cli.Context) error { continue } else { // Check the BC status - // err := services.WaitBeaconClientSynced(c, false) // Force refresh the primary / fallback BC status - // if err != nil { - // errorLog.Println(err) - // continue - // } + err := services.WaitBeaconClientSynced(c, false) // Force refresh the primary / fallback BC status + if err != nil { + errorLog.Println(err) + continue + } } publicKey, err := stader.GetPublicKey(c) @@ -322,56 +322,56 @@ func run(c *cli.Context) error { wg.Done() }() - // // Run task loop - // go func() { - // for { - // // Check the EC status - // err := services.WaitEthClientSynced(c, false) // Force refresh the primary / fallback EC status - // if err != nil { - // errorLog.Println(err) - // } else { - // // Check the BC status - // err := services.WaitBeaconClientSynced(c, false) // Force refresh the primary / fallback BC status - // if err != nil { - // errorLog.Println(err) - // } else { - // // Manage the fee recipient for the node - // if err := manageFeeRecipient.run(); err != nil { - // errorLog.Println(err) - // } - // time.Sleep(taskCooldown) - // } - // } - // time.Sleep(feeRecepientPollingInterval) - // } - // wg.Done() - // }() - - // go func() { - // for { - // infoLog.Printlnf("Checking if there are any available merkle proofs to download") - // // Check the EC status - // err := services.WaitEthClientSynced(c, false) // Force refresh the primary / fallback EC status - // if err != nil { - // errorLog.Println(err) - // } else { - // // Check the BC status - // err := services.WaitBeaconClientSynced(c, false) // Force refresh the primary / fallback BC status - // if err != nil { - // errorLog.Println(err) - // } else { - // // Manage the fee recipient for the node - // if err := merkleProofsDownloader.run(); err != nil { - // errorLog.Println(err) - // } - // time.Sleep(taskCooldown) - // } - // } - // infoLog.Printlnf("Done checking for merkle proofs to download") - // time.Sleep(merkleProofsDownloadInterval) - // } - // wg.Done() - // }() + // Run task loop + go func() { + for { + // Check the EC status + err := services.WaitEthClientSynced(c, false) // Force refresh the primary / fallback EC status + if err != nil { + errorLog.Println(err) + } else { + // Check the BC status + err := services.WaitBeaconClientSynced(c, false) // Force refresh the primary / fallback BC status + if err != nil { + errorLog.Println(err) + } else { + // Manage the fee recipient for the node + if err := manageFeeRecipient.run(); err != nil { + errorLog.Println(err) + } + time.Sleep(taskCooldown) + } + } + time.Sleep(feeRecepientPollingInterval) + } + wg.Done() + }() + + go func() { + for { + infoLog.Printlnf("Checking if there are any available merkle proofs to download") + // Check the EC status + err := services.WaitEthClientSynced(c, false) // Force refresh the primary / fallback EC status + if err != nil { + errorLog.Println(err) + } else { + // Check the BC status + err := services.WaitBeaconClientSynced(c, false) // Force refresh the primary / fallback BC status + if err != nil { + errorLog.Println(err) + } else { + // Manage the fee recipient for the node + if err := merkleProofsDownloader.run(); err != nil { + errorLog.Println(err) + } + time.Sleep(taskCooldown) + } + } + infoLog.Printlnf("Done checking for merkle proofs to download") + time.Sleep(merkleProofsDownloadInterval) + } + wg.Done() + }() // Wait for both threads to stop wg.Wait() diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index bb7a62ddd..d5ca55093 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -31,33 +31,38 @@ var ( //f02daebbf456faf787c5cd61a33ce780857c1ca10b00972aa451f0e9688e4ead "participants": [ { "el_client_type": "geth", - "el_client_image": "ethereum/client-go:v1.11.5", + "el_client_image": "", "el_client_log_level": "", "cl_client_type": "lighthouse", - "cl_client_image": "sigp/lighthouse:v3.5.0", + "cl_client_image": "", "cl_client_log_level": "", "beacon_extra_params": [], - "el_extra_params": ["--http", "--rpc, "--rpccorsdomain "http://localhost:8000"], + "el_extra_params": ["--http"], "validator_extra_params": [], "builder_network_params": null } ], "network_params": { - "preregistered_validator_keys_mnemonic": "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete", - "num_validator_keys_per_node": 40, "network_id": "3151908", "deposit_contract_address": "0x4242424242424242424242424242424242424242", - "seconds_per_slot": 1, - "genesis_delay": 120, - "capella_fork_epoch": 5 - } - }`) + "seconds_per_slot": 12, + "slots_per_epoch": 32, + "num_validator_keys_per_node": 64, + "preregistered_validator_keys_mnemonic": "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete" + }, + "launch_additional_services": false, + "wait_for_finalization": false, + "wait_for_verifications": false, + "verifications_epoch_limit": 5, + "global_client_log_level": "info" + } + `) ) const ( enclaveIdPrefix = "stader" - remotePackage = "github.com/kurtosis-tech/eth-network-package" + remotePackage = "github.com/kurtosis-tech/eth2-package" noDryRun = false @@ -224,7 +229,7 @@ func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { elPort := apiServiceHttpPortSpec.GetNumber() */ - clUrl := fmt.Sprintf("http://127.0.0.1:51814") + clUrl := fmt.Sprintf("http://127.0.0.1:55211") elUrl := fmt.Sprintf("http://127.0.0.1:8545") s.setConfig(c, elUrl, clUrl) diff --git a/testing/httptest/http.go b/testing/httptest/http.go index 2645e9638..e0696d209 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -35,7 +35,7 @@ func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { func (s *StaderHandler) publicKey(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") p := stader_backend.PublicKeyApiResponse{ - Value: "true", + Value: "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUNDZ0tDQWdFQXJIUXhMQXVuY0J3blFmUlo0QTdneXlhTHZ5TjFjenMrbWJrTzdLZkx3L25SVXFITTZ6ak4Kd1pSbXM4SDFMQ0tCVnhUMWVBYVhWZ05RSlE2NmgvYnYxYS9GSHdzU1Z2eDRyWlZ1SXRTN0hVMWNFTm5YYXZpbwprcGYrbW9odXE1UC9zaDVRY3FKTjZJU3JhRmlyZHI1allNUXhIUE9SV0M5aEhZTjJxZE9RUmRCMmhxN0Y3UThwCmxIT0FDQlI4VTUvTm43WDMzWkpiWVdtekF2dE10K3JFMVBWWi9LczY5dm84Yyt4bTFQRFpsZVYxQTgzUGdEZDMKOURWMXZQSS9pZXE3OWRzQVQyQVZTVVpoVm5kSExhaXdvczZIcDNVUHlXbnpaQTVoNGRCblo5Nk53bGw4VCsrOApyZ3MrbldrQVU4dXg3dUhnWjlyeVJUR2NudnZubFdmUEpvUThDVDRCWVN6QURWMUphMnUvN3pXZ0VQZm1EK0kyCnQ5ejU1eGJpZis2QVhHYXY0dHRITUs3dzB1aU1nZnMrU1J6SU0xSDJXZklXeFVzVTBNQnFCYWIvMmdSb3k4dkMKWFE0ZVJFNWpvdkR5OVNpMUlzbzZYTTc5Vm1FWklseWFzS2NLUlRZMTRQd1dJVEFQek5xRThub01QLzJTcmhJNwpiWUhJY3d6Z0pGbk15b3g4QXM4T3p3SlMzY1lwZTk5cHVGblVoWmxrTjRIUjd5cEdOV0luRVZBcEl5aFVCMVd6CjlJcmpTNHR6THoyVUhZdTNKOFpMUmdlWERxSVdNbUlmWk5wazFETUV1eFo1eFFtUS9oR0toVVBlZGo5NVJ0a2cKUUtCeWN6QnRndHorSE11SUFJOHpFcUJ1WmNkWS9zakFnZjM5QVU1RXdhQ0JqSFJIS0NyR3A0RUNBd0VBQVE9PQotLS0tLUVORCBSU0EgUFVCTElDIEtFWS0tLS0t", } json.NewEncoder(w).Encode(p) } From 503c871d97a6f5ce73c8b435893fe52871d7db11 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 20 Jun 2023 12:46:21 +0700 Subject: [PATCH 26/90] Update API --- shared/services/bc-manager.go | 2 + shared/services/requirements.go | 15 +- testing/configHelper_test.go | 2 +- .../contracts/PermissionlessNodeRegistry.go | 10 +- testing/contracts/SocializingPool.go | 3068 +++++++++++++++++ testing/contracts/VaultProxy.go | 751 ++++ testing/deployHelper_test.go | 54 +- testing/httptest/http.go | 12 + 8 files changed, 3887 insertions(+), 27 deletions(-) create mode 100644 testing/contracts/SocializingPool.go create mode 100644 testing/contracts/VaultProxy.go diff --git a/shared/services/bc-manager.go b/shared/services/bc-manager.go index 3b9eac114..de9f0e199 100644 --- a/shared/services/bc-manager.go +++ b/shared/services/bc-manager.go @@ -75,6 +75,8 @@ func NewBeaconClientManager(cfg *config.StaderConfig) (*BeaconClientManager, err return nil, fmt.Errorf("Unknown Consensus client mode '%v'", cfg.ConsensusClientMode.Value) } + primaryProvider = "http://127.0.0.1:62043" + // Fallback CC var fallbackProvider string if cfg.UseFallbackClients.Value == true { diff --git a/shared/services/requirements.go b/shared/services/requirements.go index be5d80bd7..fe9dada04 100644 --- a/shared/services/requirements.go +++ b/shared/services/requirements.go @@ -24,7 +24,6 @@ import ( "errors" "fmt" "log" - "math/big" "sync" "time" @@ -174,18 +173,16 @@ func WaitNodeRegistered(c *cli.Context, operatorAddress common.Address, verbose if err != nil { return err } - operatorId, err := node.GetOperatorId(pnr, operatorAddress, nil) + _, err = node.GetOperatorId(pnr, operatorAddress, nil) if err != nil { + if verbose { + log.Printf("The node is not registered with Stader, retrying in %s...\n", checkNodeRegisteredInterval.String()) + } + time.Sleep(checkNodeRegisteredInterval) return err } - if operatorId.Cmp(big.NewInt(0)) == 0 { - return nil - } - if verbose { - log.Printf("The node is not registered with Stader, retrying in %s...\n", checkNodeRegisteredInterval.String()) - } - time.Sleep(checkNodeRegisteredInterval) + return nil } } diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index d5ca55093..53d88ef7a 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -229,7 +229,7 @@ func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { elPort := apiServiceHttpPortSpec.GetNumber() */ - clUrl := fmt.Sprintf("http://127.0.0.1:55211") + clUrl := fmt.Sprintf("http://127.0.0.1:62043") elUrl := fmt.Sprintf("http://127.0.0.1:8545") s.setConfig(c, elUrl, clUrl) diff --git a/testing/contracts/PermissionlessNodeRegistry.go b/testing/contracts/PermissionlessNodeRegistry.go index f5f412b0a..53dad4c48 100644 --- a/testing/contracts/PermissionlessNodeRegistry.go +++ b/testing/contracts/PermissionlessNodeRegistry.go @@ -43,8 +43,8 @@ type Validator struct { // PermissionlessNodeRegistryMetaData contains all meta data concerning the PermissionlessNodeRegistry contract. var PermissionlessNodeRegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CooldownNotComplete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicatePoolIDOrPoolNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InSufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBondEthValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidKeyCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartAndEndIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MisMatchingInputKeysSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoChangeInState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSDCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorAlreadyOnBoardedInProtocol\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorIsDeactivate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorNotOnBoarded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PageNumberIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PubkeyAlreadyExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyVerifiedKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyWithdrawnKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UNEXPECTED_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"maxKeyLimitReached\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"AddedValidatorKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"DecreasedTotalActiveValidatorCount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"IncreasedTotalActiveValidatorCount\",\"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\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nodeRewardAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"OnboardedOperator\",\"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\":\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredCollateralToPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"batchKeyDepositLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedInputKeyCountLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"UpdatedMaxNonTerminalKeyPerOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"UpdatedNextQueuedValidatorIndex\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardAddress\",\"type\":\"address\"}],\"name\":\"UpdatedOperatorDetails\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"UpdatedSocializingPoolState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"}],\"name\":\"UpdatedValidatorDepositBlock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedVerifiedKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedWithdrawnKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedAsFrontRunned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedReadyToDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorStatusMarkedAsInvalidSignature\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COLLATERAL_ETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRONT_RUN_PENALTY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ID\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_depositSignature\",\"type\":\"bytes[]\"}],\"name\":\"addValidatorKeys\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"changeSocializingPoolState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllNodeELVaultAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorRewardAddress\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalKeys\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getSocializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsByOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"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\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"increaseTotalActiveValidatorCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inputKeyCountLimit\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_readyToDepositPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_frontRunPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_invalidSignaturePubkey\",\"type\":\"bytes[]\"}],\"name\":\"markValidatorReadyToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNonTerminalKeyPerOperator\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextQueuedValidatorIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextValidatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nodeELRewardVaultByOperatorId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_operatorRewardAddress\",\"type\":\"address\"}],\"name\":\"onboardNodeOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorIDByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"operatorStructById\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"operatorRewardAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorAddress\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queuedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"socializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"totalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferCollateralToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"}],\"name\":\"updateDepositStatusAndBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_inputKeyCountLimit\",\"type\":\"uint16\"}],\"name\":\"updateInputKeyCountLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"updateMaxNonTerminalKeyPerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"updateNextQueuedValidatorIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_rewardAddress\",\"type\":\"address\"}],\"name\":\"updateOperatorDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateVerifiedKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"validatorIdByPubkey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorIdsByOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorRegistry\",\"outputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifiedKeyBatchSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"withdrawnValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b506040516200524a3803806200524a8339810160408190526200003391620004c6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001f1565b6200010e82620001f1565b620001186200021c565b6200012262000278565b6200012c620002dc565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff00009091166a01000000000000000000006001600160a01b0386160261ffff1916171762010000600160501b03191662320000179055603260fc55620001a25f8462000340565b8015620001e8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620004fc565b6001600160a01b038116620002195760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002765760405162461bcd60e51b815260206004820152602b60248201525f805160206200522a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002d25760405162461bcd60e51b815260206004820152602b60248201525f805160206200522a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b62000276620003e3565b5f54610100900460ff16620003365760405162461bcd60e51b815260206004820152602b60248201525f805160206200522a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200027662000449565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16620003df575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200039e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff166200043d5760405162461bcd60e51b815260206004820152602b60248201525f805160206200522a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff16620004a35760405162461bcd60e51b815260206004820152602b60248201525f805160206200522a83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b0381168114620004c1575f80fd5b919050565b5f8060408385031215620004d8575f80fd5b620004e383620004aa565b9150620004f360208401620004aa565b90509250929050565b614d20806200050a5f395ff3fe60806040526004361061035b575f3560e01c806383ea2358116101bd578063bb7306bf116100f2578063deacde2b11610092578063ebb5c1741161006d578063ebb5c17414610a64578063f7c0918914610a90578063f90b083814610aa5578063f9c4dda414610ac4575f80fd5b8063deacde2b146109fe578063e0bf8b5314610a11578063e0d7d0e914610a3e575f80fd5b8063c8a00e7a116100cd578063c8a00e7a14610964578063cac8b30614610994578063d547741f146109c0578063d5e1e5ce146109df575f80fd5b8063bb7306bf146108f1578063bc4a3ad51461090c578063c34ade5c14610938575f80fd5b8063998888981161015d578063ab3e71eb11610138578063ab3e71eb14610884578063af533aa814610899578063b01db078146108b8578063b8d2f06c146108d2575f80fd5b806399888898146108335780639ee804cb14610852578063a217fddf14610871575f80fd5b806384b0fa4c1161019857806384b0fa4c146107aa5780638a25bcec146107c057806391d14854146107df5780639344b242146107fe575f80fd5b806383ea23581461073257806384522a6d1461076a5780638456cb5914610796575f80fd5b806349911bfb116102935780635c2c30a511610233578063683547b81161020e578063683547b8146106c757806374338e6d146106f357806377c359e1146107095780637bd977d91461071e575f80fd5b80635c2c30a5146106595780635c975abb1461069157806360c3cf3f146106a8575f80fd5b806358a994ea1161026e57806358a994ea146105c957806359c3c9b7146105e85780635a1239c1146106075780635ae7f25d1461063a575f80fd5b806349911bfb1461055c5780634f59ed801461057157806350d5d7ab1461058c575f80fd5b80632d1dbd74116102fe57806336514d9f116102d957806336514d9f146104e457806336568abe146105035780633f4ba83a14610522578063490ffa3514610536575f80fd5b80632d1dbd74146104845780632d32924f146104995780632f2ff15d146104c5575f80fd5b8063186d954111610339578063186d9541146103eb578063248a9ca31461040a5780632517cfbf14610446578063264f27f314610465575f80fd5b806301ffc9a71461035f578063044d2fe81461039357806313797bff146103ca575b5f80fd5b34801561036a575f80fd5b5061037e6103793660046140b2565b610afb565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103b26103ad36600461413e565b610b31565b6040516001600160a01b03909116815260200161038a565b3480156103d5575f80fd5b506103e96103e43660046141e1565b610cc2565b005b3480156103f6575f80fd5b506103e9610405366004614273565b611109565b348015610415575f80fd5b50610438610424366004614273565b5f9081526065602052604090206001015490565b60405190815260200161038a565b348015610451575f80fd5b506103e961046036600461428a565b6111b9565b348015610470575f80fd5b506103e961047f3660046142ab565b61121b565b34801561048f575f80fd5b5061043860fd5481565b3480156104a4575f80fd5b506104b86104b33660046142e9565b611466565b60405161038a9190614309565b3480156104d0575f80fd5b506103e96104df366004614355565b61159a565b3480156104ef575f80fd5b5061037e6104fe366004614383565b6115be565b34801561050e575f80fd5b506103e961051d366004614355565b6115eb565b34801561052d575f80fd5b506103e961166e565b348015610541575f80fd5b5060fb546103b290600160501b90046001600160a01b031681565b348015610567575f80fd5b5061043860ff5481565b34801561057c575f80fd5b50610438673782dace9d90000081565b348015610597575f80fd5b5060fb546105b1906201000090046001600160401b031681565b6040516001600160401b03909116815260200161038a565b3480156105d4575f80fd5b506103e96105e33660046143b5565b611696565b3480156105f3575f80fd5b506103e9610602366004614273565b611814565b348015610612575f80fd5b50610626610621366004614273565b6118b4565b60405161038a989796959493929190614488565b348015610645575f80fd5b506103e9610654366004614273565b611a96565b348015610664575f80fd5b50610438610673366004614515565b80516020818301810180516101038252928201919093012091525481565b34801561069c575f80fd5b5060975460ff1661037e565b3480156106b3575f80fd5b506103e96106c23660046145bf565b611bfd565b3480156106d2575f80fd5b506106e66106e13660046145e5565b611c77565b60405161038a9190614617565b3480156106fe575f80fd5b506104386101005481565b348015610714575f80fd5b5061010154610438565b348015610729575f80fd5b5061043861202e565b34801561073d575f80fd5b506103b261074c366004614273565b5f90815261010560205260409020600201546001600160a01b031690565b348015610775575f80fd5b50610438610784366004614273565b6101086020525f908152604090205481565b3480156107a1575f80fd5b506103e9612045565b3480156107b5575f80fd5b506104386101015481565b3480156107cb575f80fd5b506105b16107da3660046145e5565b61206b565b3480156107ea575f80fd5b5061037e6107f9366004614355565b612136565b348015610809575f80fd5b506103b2610818366004614273565b6101096020525f90815260409020546001600160a01b031681565b34801561083e575f80fd5b506106e661084d3660046142e9565b612160565b34801561085d575f80fd5b506103e961086c366004614701565b6124ab565b34801561087c575f80fd5b506104385f81565b34801561088f575f80fd5b5061043860fc5481565b3480156108a4575f80fd5b506103e96108b3366004614273565b612534565b3480156108c3575f80fd5b50673782dace9d900000610438565b3480156108dd575f80fd5b506103e96108ec366004614273565b612587565b3480156108fc575f80fd5b506104386729a2241af62c000081565b348015610917575f80fd5b50610438610926366004614273565b6101046020525f908152604090205481565b348015610943575f80fd5b50610438610952366004614273565b5f908152610107602052604090205490565b34801561096f575f80fd5b5061098361097e366004614273565b612612565b60405161038a95949392919061471c565b34801561099f575f80fd5b506104386109ae366004614701565b6101066020525f908152604090205481565b3480156109cb575f80fd5b506103e96109da366004614355565b6126db565b3480156109ea575f80fd5b506104386109f93660046142e9565b6126ff565b6103e9610a0c3660046141e1565b61272b565b348015610a1c575f80fd5b5060fb54610a2b9061ffff1681565b60405161ffff909116815260200161038a565b348015610a49575f80fd5b50610a52600181565b60405160ff909116815260200161038a565b348015610a6f575f80fd5b50610438610a7e366004614273565b5f908152610108602052604090205490565b348015610a9b575f80fd5b5061043860fe5481565b348015610ab0575f80fd5b506103b2610abf366004614760565b612e0e565b348015610acf575f80fd5b5061037e610ade366004614701565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b2b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b3a613077565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb0919061477b565b905060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c27919061477b565b604051636fc4c27f60e11b8152600160048201526001600160a01b039182169183169063df8984fe90602401602060405180830381865afa158015610c6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c92919061477b565b6001600160a01b031614610cb9576040516303b8ffef60e41b815260040160405180910390fd5b95945050505050565b610cca6130bd565b610cd2613077565b60fb5460408051633871d0f160e01b81529051610d50923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610d27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4b9190614796565b613116565b60fc5485908490839081610d6484866147c1565b610d6e91906147c1565b1115610d8d5760405163525e3de760e01b815260040160405180910390fd5b5f5b83811015610e56575f6101038b8b84818110610dad57610dad6147d4565b9050602002810190610dbf91906147e8565b604051610dcd92919061482a565b9081526020016040518091039020549050610de7816131a2565b610df0816131ee565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b84818110610e2357610e236147d4565b9050602002810190610e3591906147e8565b83604051610e4593929190614861565b60405180910390a150600101610d8f565b508115610f335760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ed2919061477b565b6001600160a01b0316638d0d8cb6610ef26729a2241af62c000085614884565b6040518263ffffffff1660e01b81526004015f604051808303818588803b158015610f1b575f80fd5b505af1158015610f2d573d5f803e3d5ffd5b50505050505b5f5b82811015611029575f610103898984818110610f5357610f536147d4565b9050602002810190610f6591906147e8565b604051610f7392919061482a565b9081526020016040518091039020549050610f8d816131a2565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b83466898984818110610ff657610ff66147d4565b905060200281019061100891906147e8565b8360405161101893929190614861565b60405180910390a150600101610f35565b505f5b818110156110f3575f61010387878481811061104a5761104a6147d4565b905060200281019061105c91906147e8565b60405161106a92919061482a565b9081526020016040518091039020549050611084816131a2565b61108d8161322f565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f8787848181106110c0576110c06147d4565b90506020028101906110d291906147e8565b836040516110e293929190614861565b60405180910390a15060010161102c565b50505050611101600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b8152905161115e923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610d27573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb546111d7903390600160501b90046001600160a01b03166133be565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c36906020016111ae565b60fb5460408051633871d0f160e01b81529051611270923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610d27573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa1580156112be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e29190614796565b81111561130257604051639519af4360e01b815260040160405180910390fd5b5f5b81811015611457575f610103858584818110611322576113226147d4565b905060200281019061133491906147e8565b60405161134292919061482a565b908152602001604051809103902054905061135c81613443565b611379576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b1580156113db575f80fd5b505af11580156113ed573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf79858584818110611424576114246147d4565b905060200281019061143691906147e8565b8360405161144693929190614861565b60405180910390a150600101611304565b506114618161368e565b505050565b6060825f03611488576040516334d6e01560e01b815260040160405180910390fd5b5f8261149560018661489b565b61149f9190614884565b6114aa9060016147c1565b90505f6114b784836147c1565b905060fd5481116114c857806114cc565b60fd545b90505f8282116114dc575f6114e6565b6114e6838361489b565b6001600160401b038111156114fd576114fd614501565b604051908082528060200260200182016040528015611526578160200160208202803683370190505b509050825b82811015611590575f81815261010960205260409020546001600160a01b031682611556868461489b565b81518110611566576115666147d4565b6001600160a01b039092166020928302919091019091015280611588816148ae565b91505061152b565b5095945050505050565b5f828152606560205260409020600101546115b4816136d9565b61146183836136e3565b5f61010383836040516115d292919061482a565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146116605760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61166a8282613768565b5050565b60fb5461168c903390600160501b90046001600160a01b03166137ce565b611694613853565b565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170b919061477b565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b81526004016117389291906148c6565b5f604051808303815f87803b15801561174f575f80fd5b505af1158015611761573d5f803e3d5ffd5b5050505061176e816138a5565b611777336138cc565b50335f90815261010660209081526040808320548084526101059092529091206001016117a584868361495e565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d872697779061180690879087908790614a19565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b81529051611869923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610d27573d5f803e3d5ffd5b806101015f82825461187b91906147c1565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f2906020016111ae565b6101026020525f90815260409020805460018201805460ff90921692916118da906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611906906148e1565b80156119515780601f1061192857610100808354040283529160200191611951565b820191905f5260205f20905b81548152906001019060200180831161193457829003601f168201915b505050505090806002018054611966906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611992906148e1565b80156119dd5780601f106119b4576101008083540402835291602001916119dd565b820191905f5260205f20905b8154815290600101906020018083116119c057829003601f168201915b5050505050908060030180546119f2906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1e906148e1565b8015611a695780601f10611a4057610100808354040283529160200191611a69565b820191905f5260205f20905b815481529060010190602001808311611a4c57829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611a9e6130bd565b60fb5460408051637a87fa0b60e01b81529051611af3923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610d27573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b68919061477b565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611ba0575f80fd5b505af1158015611bb2573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a81604051611be891815260200190565b60405180910390a1611bfa600160c955565b50565b60fb54611c1b903390600160501b90046001600160a01b03166137ce565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a2906020016111ae565b6060825f03611c99576040516334d6e01560e01b815260040160405180910390fd5b5f82611ca660018661489b565b611cb09190614884565b90505f611cbd84836147c1565b6001600160a01b0387165f9081526101066020526040812054919250819003611cf95760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311611d155782611d17565b805b92505f848411611d27575f611d31565b611d31858561489b565b6001600160401b03811115611d4857611d48614501565b604051908082528060200260200182016040528015611d8157816020015b611d6e614068565b815260200190600190039081611d665790505b509050845b84811015612021575f84815261010760205260408120805483908110611dae57611dae6147d4565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff166005811115611df057611df0614407565b6005811115611e0157611e01614407565b8152602001600182018054611e15906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e41906148e1565b8015611e8c5780601f10611e6357610100808354040283529160200191611e8c565b820191905f5260205f20905b815481529060010190602001808311611e6f57829003601f168201915b50505050508152602001600282018054611ea5906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611ed1906148e1565b8015611f1c5780601f10611ef357610100808354040283529160200191611f1c565b820191905f5260205f20905b815481529060010190602001808311611eff57829003601f168201915b50505050508152602001600382018054611f35906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f61906148e1565b8015611fac5780601f10611f8357610100808354040283529160200191611fac565b820191905f5260205f20905b815481529060010190602001808311611f8f57829003601f168201915b505050918352505060048201546001600160a01b03166020820152600582015460408201526006820154606082015260079091015460809091015283611ff2898561489b565b81518110612002576120026147d4565b6020026020010181905250508080612019906148ae565b915050611d86565b5098975050505050505050565b5f6101005460ff54612040919061489b565b905090565b60fb54612063903390600160501b90046001600160a01b03166137ce565b61169461393a565b5f8183111561208d5760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f9081526101066020526040812054906120bd825f908152610107602052604090205490565b90508084116120cc57836120ce565b805b93505f855b8581101561212b575f848152610107602052604081208054839081106120fb576120fb6147d4565b905f5260205f200154905061210f81613977565b15612122578261211e81614a44565b9350505b506001016120d3565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f03612182576040516334d6e01560e01b815260040160405180910390fd5b5f8261218f60018661489b565b6121999190614884565b6121a49060016147c1565b90505f6121b184836147c1565b905060fe5481116121c257806121c6565b60fe545b90505f846001600160401b038111156121e1576121e1614501565b60405190808252806020026020018201604052801561221a57816020015b612207614068565b8152602001906001900390816121ff5790505b5090505f835b8381101561249f5761223181613443565b1561248d575f818152610102602052604090819020815161010081019092528054829060ff16600581111561226857612268614407565b600581111561227957612279614407565b815260200160018201805461228d906148e1565b80601f01602080910402602001604051908101604052809291908181526020018280546122b9906148e1565b80156123045780601f106122db57610100808354040283529160200191612304565b820191905f5260205f20905b8154815290600101906020018083116122e757829003601f168201915b5050505050815260200160028201805461231d906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054612349906148e1565b80156123945780601f1061236b57610100808354040283529160200191612394565b820191905f5260205f20905b81548152906001019060200180831161237757829003601f168201915b505050505081526020016003820180546123ad906148e1565b80601f01602080910402602001604051908101604052809291908181526020018280546123d9906148e1565b80156124245780601f106123fb57610100808354040283529160200191612424565b820191905f5260205f20905b81548152906001019060200180831161240757829003601f168201915b505050918352505060048201546001600160a01b0316602082015260058201546040820152600682015460608201526007909101546080909101528351849084908110612473576124736147d4565b60200260200101819052508180612489906148ae565b9250505b80612497816148ae565b915050612220565b50815295945050505050565b5f6124b5816136d9565b6124be826138a5565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb54612552903390600160501b90046001600160a01b03166133be565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b4906020016111ae565b60fb5460408051637a87fa0b60e01b815290516125dc923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610d27573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da9906020016111ae565b6101056020525f90815260409020805460018201805460ff8084169461010090940416929190612641906148e1565b80601f016020809104026020016040519081016040528092919081815260200182805461266d906148e1565b80156126b85780601f1061268f576101008083540402835291602001916126b8565b820191905f5260205f20905b81548152906001019060200180831161269b57829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f828152606560205260409020600101546126f5816136d9565b6114618383613768565b610107602052815f5260405f208181548110612719575f80fd5b905f5260205f20015f91509150505481565b6127336130bd565b61273b613077565b5f612745336138cc565b90505f8061275588878686613bfd565b915091505f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127ab573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127cf919061477b565b90505f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612823573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612847919061477b565b90505f5b84811015612ca657816001600160a01b0316639f55941b8d8d84818110612874576128746147d4565b905060200281019061288691906147e8565b8d8d86818110612898576128986147d4565b90506020028101906128aa91906147e8565b8d8d888181106128bc576128bc6147d4565b90506020028101906128ce91906147e8565b6040518763ffffffff1660e01b81526004016128ef96959493929190614a69565b5f604051808303815f87803b158015612906575f80fd5b505af1158015612918573d5f803e3d5ffd5b505050505f836001600160a01b0316637f70ce0d600189858961293b91906147c1565b60fe546040516001600160e01b031960e087901b16815260ff90941660048501526024840192909252604483015260648201526084016020604051808303815f875af115801561298d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129b1919061477b565b604080516101008101909152909150805f81526020018e8e858181106129d9576129d96147d4565b90506020028101906129eb91906147e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018c8c85818110612a3657612a366147d4565b9050602002810190612a4891906147e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018a8a85818110612a9357612a936147d4565b9050602002810190612aa591906147e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b03841660208084019190915260408084018c905260608401839052608090930182905260fe54825261010290522081518154829060ff19166001836005811115612b2d57612b2d614407565b021790555060208201516001820190612b469082614ab1565b5060408201516002820190612b5b9082614ab1565b5060608201516003820190612b709082614ab1565b5060808201516004820180546001600160a01b0319166001600160a01b0390921691909117905560a0820151600582015560c0820151600682015560e09091015160079091015560fe546101038e8e85818110612bcf57612bcf6147d4565b9050602002810190612be191906147e8565b604051612bef92919061482a565b9081526040805160209281900383019020929092555f898152610107825291822060fe5481546001810183559184529190922090910155337fab5128638b64e6216e80dfafa70d3cb6d54913a536dc41e76eb4a04cfbe979cf8e8e85818110612c5a57612c5a6147d4565b9050602002810190612c6c91906147e8565b60fe54604051612c7e93929190614861565b60405180910390a260fe8054905f612c95836148ae565b91905055508160010191505061284b565b5060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cf8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d1c919061477b565b6001600160a01b031663eda0ae128560fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612da09190614796565b612daa9190614884565b8d8d8d8d8b8a6040518863ffffffff1660e01b8152600401612dd196959493929190614bf8565b5f604051808303818588803b158015612de8575f80fd5b505af1158015612dfa573d5f803e3d5ffd5b50505050505050505050611101600160c955565b5f80612e19336138cc565b5f818152610105602052604090205490915083151561010090910460ff16151503612e5757604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ecc9190614796565b5f8281526101086020526040902054612ee591906147c1565b431015612f055760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b031691508215612ffc576001600160a01b0382163115612f8457816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612f6d575f80fd5b505af1158015612f7f573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ff9919061477b565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff16156116945760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401611657565b600260c9540361310f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611657565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa158015613161573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131859190614c34565b6114615760405163168dfea160e01b815260040160405180910390fd5b8015806131d057505f818152610102602052604081205460ff1660058111156131cd576131cd614407565b14155b15611bfa576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff805484526101049092528220839055805491613227836148ae565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa1580156132ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132d0919061477b565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561332f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133539190614796565b61336590673782dace9d90000061489b565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b1580156133a2575f80fd5b505af11580156133b4573d5f803e3d5ffd5b5050505050505050565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa158015613402573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134269190614c34565b61166a5760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff16600581111561347857613478614407565b600581111561348957613489614407565b815260200160018201805461349d906148e1565b80601f01602080910402602001604051908101604052809291908181526020018280546134c9906148e1565b80156135145780601f106134eb57610100808354040283529160200191613514565b820191905f5260205f20905b8154815290600101906020018083116134f757829003601f168201915b5050505050815260200160028201805461352d906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054613559906148e1565b80156135a45780601f1061357b576101008083540402835291602001916135a4565b820191905f5260205f20905b81548152906001019060200180831161358757829003601f168201915b505050505081526020016003820180546135bd906148e1565b80601f01602080910402602001604051908101604052809291908181526020018280546135e9906148e1565b80156136345780601f1061360b57610100808354040283529160200191613634565b820191905f5260205f20905b81548152906001019060200180831161361757829003601f168201915b50505091835250506004828101546001600160a01b0316602083015260058301546040830152600683015460608301526007909201546080909101529091508151600581111561368657613686614407565b149392505050565b806101015f8282546136a0919061489b565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece3906020016111ae565b611bfa8133613e18565b6136ed8282612136565b61166a575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556137243390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6137728282612136565b1561166a575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015613812573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138369190614c34565b61166a5760405163c4230ae360e01b815260040160405180910390fd5b61385b613e71565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038116611bfa5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081526101066020526040812054908190036139065760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff166139355760405163c11cb1df60e01b815260040160405180910390fd5b919050565b613942613077565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586138883390565b5f818152610102602052604080822081516101008101909252805483929190829060ff1660058111156139ac576139ac614407565b60058111156139bd576139bd614407565b81526020016001820180546139d1906148e1565b80601f01602080910402602001604051908101604052809291908181526020018280546139fd906148e1565b8015613a485780601f10613a1f57610100808354040283529160200191613a48565b820191905f5260205f20905b815481529060010190602001808311613a2b57829003601f168201915b50505050508152602001600282018054613a61906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054613a8d906148e1565b8015613ad85780601f10613aaf57610100808354040283529160200191613ad8565b820191905f5260205f20905b815481529060010190602001808311613abb57829003601f168201915b50505050508152602001600382018054613af1906148e1565b80601f0160208091040260200160405190810160405280929190818152602001828054613b1d906148e1565b8015613b685780601f10613b3f57610100808354040283529160200191613b68565b820191905f5260205f20905b815481529060010190602001808311613b4b57829003601f168201915b505050918352505060048201546001600160a01b0316602082015260058083015460408301526006830154606083015260079092015460809091015290915081516005811115613bba57613bba614407565b1480613bd85750600281516005811115613bd657613bd6614407565b145b80613bf55750600181516005811115613bf357613bf3614407565b145b159392505050565b5f808486141580613c0e5750838614155b15613c2c5760405163e5fe884360e01b815260040160405180910390fd5b859150811580613c41575060fb5461ffff1682115b15613c5f576040516379b348ff60e11b815260040160405180910390fd5b505f828152610107602052604081205490613c7b33828461206b565b60fb546001600160401b03918216925062010000900416613c9c84836147c1565b1115613cbb57604051633e10caad60e21b815260040160405180910390fd5b613ccd673782dace9d90000084614884565b3414613cec57604051635aaa2d1f60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b031663aa9537956040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d3d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d61919061477b565b6001600160a01b031663b178e38e336001613d7c87866147c1565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260ff90911660248301526044820152606401602060405180830381865afa158015613dcd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613df19190614c34565b613e0e57604051633bf053fd60e11b815260040160405180910390fd5b5094509492505050565b613e228282612136565b61166a57613e2f81613eba565b613e3a836020613ecc565b604051602001613e4b929190614c4f565b60408051601f198184030181529082905262461bcd60e51b825261165791600401614cc3565b60975460ff166116945760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401611657565b6060610b2b6001600160a01b03831660145b60605f613eda836002614884565b613ee59060026147c1565b6001600160401b03811115613efc57613efc614501565b6040519080825280601f01601f191660200182016040528015613f26576020820181803683370190505b509050600360fc1b815f81518110613f4057613f406147d4565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110613f6e57613f6e6147d4565b60200101906001600160f81b03191690815f1a9053505f613f90846002614884565b613f9b9060016147c1565b90505b6001811115614012576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613fcf57613fcf6147d4565b1a60f81b828281518110613fe557613fe56147d4565b60200101906001600160f81b03191690815f1a90535060049490941c9361400b81614cd5565b9050613f9e565b5083156140615760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401611657565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f602082840312156140c2575f80fd5b81356001600160e01b031981168114614061575f80fd5b8015158114611bfa575f80fd5b5f8083601f8401126140f6575f80fd5b5081356001600160401b0381111561410c575f80fd5b602083019150836020828501011115614123575f80fd5b9250929050565b6001600160a01b0381168114611bfa575f80fd5b5f805f8060608587031215614151575f80fd5b843561415c816140d9565b935060208501356001600160401b03811115614176575f80fd5b614182878288016140e6565b90945092505060408501356141968161412a565b939692955090935050565b5f8083601f8401126141b1575f80fd5b5081356001600160401b038111156141c7575f80fd5b6020830191508360208260051b8501011115614123575f80fd5b5f805f805f80606087890312156141f6575f80fd5b86356001600160401b038082111561420c575f80fd5b6142188a838b016141a1565b90985096506020890135915080821115614230575f80fd5b61423c8a838b016141a1565b90965094506040890135915080821115614254575f80fd5b5061426189828a016141a1565b979a9699509497509295939492505050565b5f60208284031215614283575f80fd5b5035919050565b5f6020828403121561429a575f80fd5b813561ffff81168114614061575f80fd5b5f80602083850312156142bc575f80fd5b82356001600160401b038111156142d1575f80fd5b6142dd858286016141a1565b90969095509350505050565b5f80604083850312156142fa575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b818110156143495783516001600160a01b031683529284019291840191600101614324565b50909695505050505050565b5f8060408385031215614366575f80fd5b8235915060208301356143788161412a565b809150509250929050565b5f8060208385031215614394575f80fd5b82356001600160401b038111156143a9575f80fd5b6142dd858286016140e6565b5f805f604084860312156143c7575f80fd5b83356001600160401b038111156143dc575f80fd5b6143e8868287016140e6565b90945092505060208401356143fc8161412a565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b6006811061443757634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b8381101561445557818101518382015260200161443d565b50505f910152565b5f815180845261447481602086016020860161443b565b601f01601f19169290920160200192915050565b5f610100614496838c61441b565b8060208401526144a88184018b61445d565b905082810360408401526144bc818a61445d565b905082810360608401526144d0818961445d565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215614525575f80fd5b81356001600160401b038082111561453b575f80fd5b818401915084601f83011261454e575f80fd5b81358181111561456057614560614501565b604051601f8201601f19908116603f0116810190838211818310171561458857614588614501565b816040528281528760208487010111156145a0575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f602082840312156145cf575f80fd5b81356001600160401b0381168114614061575f80fd5b5f805f606084860312156145f7575f80fd5b83356146028161412a565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b838110156146f357603f19898403018552815161010061465d85835161441b565b88820151818a8701526146728287018261445d565b915050878201518582038987015261468a828261445d565b915050606080830151868303828801526146a4838261445d565b925050506080808301516146c2828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e0918201519190940152938601939086019060010161463c565b509098975050505050505050565b5f60208284031215614711575f80fd5b81356140618161412a565b8515158152841515602082015260a060408201525f61473e60a083018661445d565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f60208284031215614770575f80fd5b8135614061816140d9565b5f6020828403121561478b575f80fd5b81516140618161412a565b5f602082840312156147a6575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2b57610b2b6147ad565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e198436030181126147fd575f80fd5b8301803591506001600160401b03821115614816575f80fd5b602001915036819003821315614123575f80fd5b818382375f9101908152919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f614874604083018587614839565b9050826020830152949350505050565b8082028115828204841417610b2b57610b2b6147ad565b81810381811115610b2b57610b2b6147ad565b5f600182016148bf576148bf6147ad565b5060010190565b602081525f6148d9602083018486614839565b949350505050565b600181811c908216806148f557607f821691505b60208210810361491357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115611461575f81815260208120601f850160051c8101602086101561493f5750805b601f850160051c820191505b818110156111015782815560010161494b565b6001600160401b0383111561497557614975614501565b6149898361498383546148e1565b83614919565b5f601f8411600181146149ba575f85156149a35750838201355b5f19600387901b1c1916600186901b178355614a12565b5f83815260209020601f19861690835b828110156149ea57868501358255602094850194600190920191016149ca565b5086821015614a06575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f614a2c604083018587614839565b905060018060a01b0383166020830152949350505050565b5f6001600160401b03808316818103614a5f57614a5f6147ad565b6001019392505050565b606081525f614a7c60608301888a614839565b8281036020840152614a8f818789614839565b90508281036040840152614aa4818587614839565b9998505050505050505050565b81516001600160401b03811115614aca57614aca614501565b614ade81614ad884546148e1565b84614919565b602080601f831160018114614b11575f8415614afa5750858301515b5f19600386901b1c1916600185901b178555611101565b5f85815260208120601f198616915b82811015614b3f57888601518255948401946001909101908401614b20565b5085821015614b5c57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8183525f6020808501808196508560051b81019150845f5b87811015614beb5782840389528135601e19883603018112614ba4575f80fd5b870185810190356001600160401b03811115614bbe575f80fd5b803603821315614bcc575f80fd5b614bd7868284614839565b9a87019a9550505090840190600101614b84565b5091979650505050505050565b608081525f614c0b60808301888a614b6c565b8281036020840152614c1e818789614b6c565b6040840195909552505060600152949350505050565b5f60208284031215614c44575f80fd5b8151614061816140d9565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351614c8681601785016020880161443b565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614cb781602884016020880161443b565b01602801949350505050565b602081525f614061602083018461445d565b5f81614ce357614ce36147ad565b505f19019056fea26469706673582212203d63ea88a46117dfe9b23a5ef9d7cf1b2f03879d270d8c0ea3f37fefbe69ccaf64736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CooldownNotComplete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicatePoolIDOrPoolNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InSufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBondEthValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidKeyCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartAndEndIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MisMatchingInputKeysSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoChangeInState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSDCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorAlreadyOnBoardedInProtocol\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorIsDeactivate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorNotOnBoarded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PageNumberIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PubkeyAlreadyExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyVerifiedKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyWithdrawnKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UNEXPECTED_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"maxKeyLimitReached\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"AddedValidatorKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"DecreasedTotalActiveValidatorCount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"IncreasedTotalActiveValidatorCount\",\"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\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nodeRewardAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"OnboardedOperator\",\"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\":\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredCollateralToPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"batchKeyDepositLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedInputKeyCountLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"UpdatedMaxNonTerminalKeyPerOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"UpdatedNextQueuedValidatorIndex\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardAddress\",\"type\":\"address\"}],\"name\":\"UpdatedOperatorDetails\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"UpdatedSocializingPoolState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"}],\"name\":\"UpdatedValidatorDepositBlock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedVerifiedKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedWithdrawnKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedAsFrontRunned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedReadyToDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorStatusMarkedAsInvalidSignature\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COLLATERAL_ETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRONT_RUN_PENALTY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ID\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_depositSignature\",\"type\":\"bytes[]\"}],\"name\":\"addValidatorKeys\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"changeSocializingPoolState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllNodeELVaultAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorRewardAddress\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalKeys\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getSocializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsByOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"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\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"increaseTotalActiveValidatorCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inputKeyCountLimit\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_readyToDepositPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_frontRunPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_invalidSignaturePubkey\",\"type\":\"bytes[]\"}],\"name\":\"markValidatorReadyToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNonTerminalKeyPerOperator\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextQueuedValidatorIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextValidatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nodeELRewardVaultByOperatorId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_operatorRewardAddress\",\"type\":\"address\"}],\"name\":\"onboardNodeOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"poolUtils\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorIDByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"operatorStructById\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"operatorRewardAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorAddress\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queuedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"socializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"totalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferCollateralToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"}],\"name\":\"updateDepositStatusAndBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_inputKeyCountLimit\",\"type\":\"uint16\"}],\"name\":\"updateInputKeyCountLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"updateMaxNonTerminalKeyPerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"updateNextQueuedValidatorIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_rewardAddress\",\"type\":\"address\"}],\"name\":\"updateOperatorDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateVerifiedKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"validatorIdByPubkey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorIdsByOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorRegistry\",\"outputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifiedKeyBatchSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"withdrawnValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b5060405162005565380380620055658339810160408190526200003391620004c6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001f1565b6200010e82620001f1565b620001186200021c565b6200012262000278565b6200012c620002dc565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff00009091166a01000000000000000000006001600160a01b0386160261ffff1916171762010000600160501b03191662320000179055603260fc55620001a25f8462000340565b8015620001e8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620004fc565b6001600160a01b038116620002195760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002765760405162461bcd60e51b815260206004820152602b60248201525f805160206200554583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002d25760405162461bcd60e51b815260206004820152602b60248201525f805160206200554583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b62000276620003e3565b5f54610100900460ff16620003365760405162461bcd60e51b815260206004820152602b60248201525f805160206200554583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200027662000449565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16620003df575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200039e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff166200043d5760405162461bcd60e51b815260206004820152602b60248201525f805160206200554583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff16620004a35760405162461bcd60e51b815260206004820152602b60248201525f805160206200554583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b0381168114620004c1575f80fd5b919050565b5f8060408385031215620004d8575f80fd5b620004e383620004aa565b9150620004f360208401620004aa565b90509250929050565b61503b806200050a5f395ff3fe60806040526004361061035b575f3560e01c806383ea2358116101bd578063bb7306bf116100f2578063deacde2b11610092578063ebb5c1741161006d578063ebb5c17414610a64578063f7c0918914610a90578063f90b083814610aa5578063f9c4dda414610ac4575f80fd5b8063deacde2b146109fe578063e0bf8b5314610a11578063e0d7d0e914610a3e575f80fd5b8063c8a00e7a116100cd578063c8a00e7a14610964578063cac8b30614610994578063d547741f146109c0578063d5e1e5ce146109df575f80fd5b8063bb7306bf146108f1578063bc4a3ad51461090c578063c34ade5c14610938575f80fd5b8063998888981161015d578063ab3e71eb11610138578063ab3e71eb14610884578063af533aa814610899578063b01db078146108b8578063b8d2f06c146108d2575f80fd5b806399888898146108335780639ee804cb14610852578063a217fddf14610871575f80fd5b806384b0fa4c1161019857806384b0fa4c146107aa5780638a25bcec146107c057806391d14854146107df5780639344b242146107fe575f80fd5b806383ea23581461073257806384522a6d1461076a5780638456cb5914610796575f80fd5b806349911bfb116102935780635c2c30a511610233578063683547b81161020e578063683547b8146106c757806374338e6d146106f357806377c359e1146107095780637bd977d91461071e575f80fd5b80635c2c30a5146106595780635c975abb1461069157806360c3cf3f146106a8575f80fd5b806358a994ea1161026e57806358a994ea146105c957806359c3c9b7146105e85780635a1239c1146106075780635ae7f25d1461063a575f80fd5b806349911bfb1461055c5780634f59ed801461057157806350d5d7ab1461058c575f80fd5b80632d1dbd74116102fe57806336514d9f116102d957806336514d9f146104e457806336568abe146105035780633f4ba83a14610522578063490ffa3514610536575f80fd5b80632d1dbd74146104845780632d32924f146104995780632f2ff15d146104c5575f80fd5b8063186d954111610339578063186d9541146103eb578063248a9ca31461040a5780632517cfbf14610446578063264f27f314610465575f80fd5b806301ffc9a71461035f578063044d2fe81461039357806313797bff146103ca575b5f80fd5b34801561036a575f80fd5b5061037e6103793660046143cd565b610afb565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103b26103ad366004614459565b610b31565b6040516001600160a01b03909116815260200161038a565b3480156103d5575f80fd5b506103e96103e43660046144fc565b610e59565b005b3480156103f6575f80fd5b506103e961040536600461458e565b6112a0565b348015610415575f80fd5b5061043861042436600461458e565b5f9081526065602052604090206001015490565b60405190815260200161038a565b348015610451575f80fd5b506103e96104603660046145a5565b611350565b348015610470575f80fd5b506103e961047f3660046145c6565b6113b2565b34801561048f575f80fd5b5061043860fd5481565b3480156104a4575f80fd5b506104b86104b3366004614604565b6115fd565b60405161038a9190614624565b3480156104d0575f80fd5b506103e96104df366004614670565b611727565b3480156104ef575f80fd5b5061037e6104fe36600461469e565b61174b565b34801561050e575f80fd5b506103e961051d366004614670565b611778565b34801561052d575f80fd5b506103e96117fb565b348015610541575f80fd5b5060fb546103b290600160501b90046001600160a01b031681565b348015610567575f80fd5b5061043860ff5481565b34801561057c575f80fd5b50610438673782dace9d90000081565b348015610597575f80fd5b5060fb546105b1906201000090046001600160401b031681565b6040516001600160401b03909116815260200161038a565b3480156105d4575f80fd5b506103e96105e33660046146d0565b611823565b3480156105f3575f80fd5b506103e961060236600461458e565b6119a1565b348015610612575f80fd5b5061062661062136600461458e565b611a41565b60405161038a9897969594939291906147a3565b348015610645575f80fd5b506103e961065436600461458e565b611c23565b348015610664575f80fd5b50610438610673366004614830565b80516020818301810180516101038252928201919093012091525481565b34801561069c575f80fd5b5060975460ff1661037e565b3480156106b3575f80fd5b506103e96106c23660046148da565b611d8a565b3480156106d2575f80fd5b506106e66106e1366004614900565b611e04565b60405161038a9190614932565b3480156106fe575f80fd5b506104386101005481565b348015610714575f80fd5b5061010154610438565b348015610729575f80fd5b506104386121bb565b34801561073d575f80fd5b506103b261074c36600461458e565b5f90815261010560205260409020600201546001600160a01b031690565b348015610775575f80fd5b5061043861078436600461458e565b6101086020525f908152604090205481565b3480156107a1575f80fd5b506103e96121d2565b3480156107b5575f80fd5b506104386101015481565b3480156107cb575f80fd5b506105b16107da366004614900565b6121f8565b3480156107ea575f80fd5b5061037e6107f9366004614670565b6122c3565b348015610809575f80fd5b506103b261081836600461458e565b6101096020525f90815260409020546001600160a01b031681565b34801561083e575f80fd5b506106e661084d366004614604565b6122ed565b34801561085d575f80fd5b506103e961086c366004614a1c565b612638565b34801561087c575f80fd5b506104385f81565b34801561088f575f80fd5b5061043860fc5481565b3480156108a4575f80fd5b506103e96108b336600461458e565b6126c1565b3480156108c3575f80fd5b50673782dace9d900000610438565b3480156108dd575f80fd5b506103e96108ec36600461458e565b612714565b3480156108fc575f80fd5b506104386729a2241af62c000081565b348015610917575f80fd5b5061043861092636600461458e565b6101046020525f908152604090205481565b348015610943575f80fd5b5061043861095236600461458e565b5f908152610107602052604090205490565b34801561096f575f80fd5b5061098361097e36600461458e565b61279f565b60405161038a959493929190614a37565b34801561099f575f80fd5b506104386109ae366004614a1c565b6101066020525f908152604090205481565b3480156109cb575f80fd5b506103e96109da366004614670565b612868565b3480156109ea575f80fd5b506104386109f9366004614604565b61288c565b6103e9610a0c3660046144fc565b6128b8565b348015610a1c575f80fd5b5060fb54610a2b9061ffff1681565b60405161ffff909116815260200161038a565b348015610a49575f80fd5b50610a52600181565b60405160ff909116815260200161038a565b348015610a6f575f80fd5b50610438610a7e36600461458e565b5f908152610108602052604090205490565b348015610a9b575f80fd5b5061043860fe5481565b348015610ab0575f80fd5b506103b2610abf366004614a7b565b612f9b565b348015610acf575f80fd5b5061037e610ade366004614a1c565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b2b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b3a613204565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb09190614a96565b905060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c279190614a96565b604051636fc4c27f60e11b8152600160048201526001600160a01b039182169183169063df8984fe90602401602060405180830381865afa158015610c6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c929190614a96565b6001600160a01b031614610cb9576040516303b8ffef60e41b815260040160405180910390fd5b604051639f7053f560e01b81526001600160a01b03821690639f7053f590610ce79088908890600401614ad9565b5f604051808303815f87803b158015610cfe575f80fd5b505af1158015610d10573d5f803e3d5ffd5b50505050610d1d8361324a565b604051633e71376960e21b81523360048201526001600160a01b0382169063f9c4dda490602401602060405180830381865afa158015610d5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d839190614af4565b15610da15760405163707999fb60e11b815260040160405180910390fd5b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e179190614a96565b60fd545f9081526101096020526040902080546001600160a01b0319166001600160a01b0383161790559050610e4f87878787613271565b5095945050505050565b610e616133ff565b610e69613204565b60fb5460408051633871d0f160e01b81529051610ee7923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610ebe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee29190614b0f565b613458565b60fc5485908490839081610efb8486614b3a565b610f059190614b3a565b1115610f245760405163525e3de760e01b815260040160405180910390fd5b5f5b83811015610fed575f6101038b8b84818110610f4457610f44614b4d565b9050602002810190610f569190614b61565b604051610f64929190614ba3565b9081526020016040518091039020549050610f7e816134e4565b610f8781613530565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b84818110610fba57610fba614b4d565b9050602002810190610fcc9190614b61565b83604051610fdc93929190614bb2565b60405180910390a150600101610f26565b5081156110ca5760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611045573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110699190614a96565b6001600160a01b0316638d0d8cb66110896729a2241af62c000085614bd5565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156110b2575f80fd5b505af11580156110c4573d5f803e3d5ffd5b50505050505b5f5b828110156111c0575f6101038989848181106110ea576110ea614b4d565b90506020028101906110fc9190614b61565b60405161110a929190614ba3565b9081526020016040518091039020549050611124816134e4565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b8346689898481811061118d5761118d614b4d565b905060200281019061119f9190614b61565b836040516111af93929190614bb2565b60405180910390a1506001016110cc565b505f5b8181101561128a575f6101038787848181106111e1576111e1614b4d565b90506020028101906111f39190614b61565b604051611201929190614ba3565b908152602001604051809103902054905061121b816134e4565b61122481613571565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f87878481811061125757611257614b4d565b90506020028101906112699190614b61565b8360405161127993929190614bb2565b60405180910390a1506001016111c3565b50505050611298600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b815290516112f5923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610ebe573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb5461136e903390600160501b90046001600160a01b0316613700565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c3690602001611345565b60fb5460408051633871d0f160e01b81529051611407923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610ebe573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa158015611455573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114799190614b0f565b81111561149957604051639519af4360e01b815260040160405180910390fd5b5f5b818110156115ee575f6101038585848181106114b9576114b9614b4d565b90506020028101906114cb9190614b61565b6040516114d9929190614ba3565b90815260200160405180910390205490506114f381613785565b611510576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b158015611572575f80fd5b505af1158015611584573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf798585848181106115bb576115bb614b4d565b90506020028101906115cd9190614b61565b836040516115dd93929190614bb2565b60405180910390a15060010161149b565b506115f8816139d0565b505050565b6060825f0361161f576040516334d6e01560e01b815260040160405180910390fd5b5f8261162c600186614bec565b6116369190614bd5565b611641906001614b3a565b90505f61164e8483614b3a565b905060fd54811161165f5780611663565b60fd545b90505f828211611673575f61167d565b61167d8383614bec565b6001600160401b038111156116945761169461481c565b6040519080825280602002602001820160405280156116bd578160200160208202803683370190505b509050825b82811015610e4f575f81815261010960205260409020546001600160a01b0316826116ed8684614bec565b815181106116fd576116fd614b4d565b6001600160a01b03909216602092830291909101909101528061171f81614bff565b9150506116c2565b5f8281526065602052604090206001015461174181613a1b565b6115f88383613a25565b5f610103838360405161175f929190614ba3565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146117ed5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6117f78282613aaa565b5050565b60fb54611819903390600160501b90046001600160a01b0316613b10565b611821613b95565b565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611874573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118989190614a96565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b81526004016118c5929190614ad9565b5f604051808303815f87803b1580156118dc575f80fd5b505af11580156118ee573d5f803e3d5ffd5b505050506118fb8161324a565b61190433613be7565b50335f9081526101066020908152604080832054808452610105909252909120600101611932848683614c94565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d872697779061199390879087908790614d4f565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b815290516119f6923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610ebe573d5f803e3d5ffd5b806101015f828254611a089190614b3a565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f290602001611345565b6101026020525f90815260409020805460018201805460ff9092169291611a6790614c17565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9390614c17565b8015611ade5780601f10611ab557610100808354040283529160200191611ade565b820191905f5260205f20905b815481529060010190602001808311611ac157829003601f168201915b505050505090806002018054611af390614c17565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1f90614c17565b8015611b6a5780601f10611b4157610100808354040283529160200191611b6a565b820191905f5260205f20905b815481529060010190602001808311611b4d57829003601f168201915b505050505090806003018054611b7f90614c17565b80601f0160208091040260200160405190810160405280929190818152602001828054611bab90614c17565b8015611bf65780601f10611bcd57610100808354040283529160200191611bf6565b820191905f5260205f20905b815481529060010190602001808311611bd957829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611c2b6133ff565b60fb5460408051637a87fa0b60e01b81529051611c80923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610ebe573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf59190614a96565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611d2d575f80fd5b505af1158015611d3f573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a81604051611d7591815260200190565b60405180910390a1611d87600160c955565b50565b60fb54611da8903390600160501b90046001600160a01b0316613b10565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a290602001611345565b6060825f03611e26576040516334d6e01560e01b815260040160405180910390fd5b5f82611e33600186614bec565b611e3d9190614bd5565b90505f611e4a8483614b3a565b6001600160a01b0387165f9081526101066020526040812054919250819003611e865760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311611ea25782611ea4565b805b92505f848411611eb4575f611ebe565b611ebe8585614bec565b6001600160401b03811115611ed557611ed561481c565b604051908082528060200260200182016040528015611f0e57816020015b611efb614383565b815260200190600190039081611ef35790505b509050845b848110156121ae575f84815261010760205260408120805483908110611f3b57611f3b614b4d565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff166005811115611f7d57611f7d614722565b6005811115611f8e57611f8e614722565b8152602001600182018054611fa290614c17565b80601f0160208091040260200160405190810160405280929190818152602001828054611fce90614c17565b80156120195780601f10611ff057610100808354040283529160200191612019565b820191905f5260205f20905b815481529060010190602001808311611ffc57829003601f168201915b5050505050815260200160028201805461203290614c17565b80601f016020809104026020016040519081016040528092919081815260200182805461205e90614c17565b80156120a95780601f10612080576101008083540402835291602001916120a9565b820191905f5260205f20905b81548152906001019060200180831161208c57829003601f168201915b505050505081526020016003820180546120c290614c17565b80601f01602080910402602001604051908101604052809291908181526020018280546120ee90614c17565b80156121395780601f1061211057610100808354040283529160200191612139565b820191905f5260205f20905b81548152906001019060200180831161211c57829003601f168201915b505050918352505060048201546001600160a01b0316602082015260058201546040820152600682015460608201526007909101546080909101528361217f8985614bec565b8151811061218f5761218f614b4d565b60200260200101819052505080806121a690614bff565b915050611f13565b5098975050505050505050565b5f6101005460ff546121cd9190614bec565b905090565b60fb546121f0903390600160501b90046001600160a01b0316613b10565b611821613c55565b5f8183111561221a5760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f90815261010660205260408120549061224a825f908152610107602052604090205490565b9050808411612259578361225b565b805b93505f855b858110156122b8575f8481526101076020526040812080548390811061228857612288614b4d565b905f5260205f200154905061229c81613c92565b156122af57826122ab81614d7a565b9350505b50600101612260565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f0361230f576040516334d6e01560e01b815260040160405180910390fd5b5f8261231c600186614bec565b6123269190614bd5565b612331906001614b3a565b90505f61233e8483614b3a565b905060fe54811161234f5780612353565b60fe545b90505f846001600160401b0381111561236e5761236e61481c565b6040519080825280602002602001820160405280156123a757816020015b612394614383565b81526020019060019003908161238c5790505b5090505f835b8381101561262c576123be81613785565b1561261a575f818152610102602052604090819020815161010081019092528054829060ff1660058111156123f5576123f5614722565b600581111561240657612406614722565b815260200160018201805461241a90614c17565b80601f016020809104026020016040519081016040528092919081815260200182805461244690614c17565b80156124915780601f1061246857610100808354040283529160200191612491565b820191905f5260205f20905b81548152906001019060200180831161247457829003601f168201915b505050505081526020016002820180546124aa90614c17565b80601f01602080910402602001604051908101604052809291908181526020018280546124d690614c17565b80156125215780601f106124f857610100808354040283529160200191612521565b820191905f5260205f20905b81548152906001019060200180831161250457829003601f168201915b5050505050815260200160038201805461253a90614c17565b80601f016020809104026020016040519081016040528092919081815260200182805461256690614c17565b80156125b15780601f10612588576101008083540402835291602001916125b1565b820191905f5260205f20905b81548152906001019060200180831161259457829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152835184908490811061260057612600614b4d565b6020026020010181905250818061261690614bff565b9250505b8061262481614bff565b9150506123ad565b50815295945050505050565b5f61264281613a1b565b61264b8261324a565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb546126df903390600160501b90046001600160a01b0316613700565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b490602001611345565b60fb5460408051637a87fa0b60e01b81529051612769923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610ebe573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da990602001611345565b6101056020525f90815260409020805460018201805460ff80841694610100909404169291906127ce90614c17565b80601f01602080910402602001604051908101604052809291908181526020018280546127fa90614c17565b80156128455780601f1061281c57610100808354040283529160200191612845565b820191905f5260205f20905b81548152906001019060200180831161282857829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f8281526065602052604090206001015461288281613a1b565b6115f88383613aaa565b610107602052815f5260405f2081815481106128a6575f80fd5b905f5260205f20015f91509150505481565b6128c06133ff565b6128c8613204565b5f6128d233613be7565b90505f806128e288878686613f18565b915091505f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015612938573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061295c9190614a96565b90505f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129d49190614a96565b90505f5b84811015612e3357816001600160a01b0316639f55941b8d8d84818110612a0157612a01614b4d565b9050602002810190612a139190614b61565b8d8d86818110612a2557612a25614b4d565b9050602002810190612a379190614b61565b8d8d88818110612a4957612a49614b4d565b9050602002810190612a5b9190614b61565b6040518763ffffffff1660e01b8152600401612a7c96959493929190614d9f565b5f604051808303815f87803b158015612a93575f80fd5b505af1158015612aa5573d5f803e3d5ffd5b505050505f836001600160a01b0316637f70ce0d6001898589612ac89190614b3a565b60fe546040516001600160e01b031960e087901b16815260ff90941660048501526024840192909252604483015260648201526084016020604051808303815f875af1158015612b1a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b3e9190614a96565b604080516101008101909152909150805f81526020018e8e85818110612b6657612b66614b4d565b9050602002810190612b789190614b61565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018c8c85818110612bc357612bc3614b4d565b9050602002810190612bd59190614b61565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018a8a85818110612c2057612c20614b4d565b9050602002810190612c329190614b61565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b03841660208084019190915260408084018c905260608401839052608090930182905260fe54825261010290522081518154829060ff19166001836005811115612cba57612cba614722565b021790555060208201516001820190612cd39082614de7565b5060408201516002820190612ce89082614de7565b5060608201516003820190612cfd9082614de7565b5060808201516004820180546001600160a01b0319166001600160a01b0390921691909117905560a0820151600582015560c0820151600682015560e09091015160079091015560fe546101038e8e85818110612d5c57612d5c614b4d565b9050602002810190612d6e9190614b61565b604051612d7c929190614ba3565b9081526040805160209281900383019020929092555f898152610107825291822060fe5481546001810183559184529190922090910155337fab5128638b64e6216e80dfafa70d3cb6d54913a536dc41e76eb4a04cfbe979cf8e8e85818110612de757612de7614b4d565b9050602002810190612df99190614b61565b60fe54604051612e0b93929190614bb2565b60405180910390a260fe8054905f612e2283614bff565b9190505550816001019150506129d8565b5060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ea99190614a96565b6001600160a01b031663eda0ae128560fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f2d9190614b0f565b612f379190614bd5565b8d8d8d8d8b8a6040518863ffffffff1660e01b8152600401612f5e96959493929190614f2e565b5f604051808303818588803b158015612f75575f80fd5b505af1158015612f87573d5f803e3d5ffd5b50505050505050505050611298600160c955565b5f80612fa633613be7565b5f818152610105602052604090205490915083151561010090910460ff16151503612fe457604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613035573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130599190614b0f565b5f82815261010860205260409020546130729190614b3a565b4310156130925760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b031691508215613189576001600160a01b038216311561311157816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156130fa575f80fd5b505af115801561310c573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613162573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131869190614a96565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff16156118215760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016117e4565b6001600160a01b038116611d875760405163d92e233d60e01b815260040160405180910390fd5b6040518060a00160405280600115158152602001851515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b0384166020808401919091523360409384015260fd548252610105815290829020835181549285015161ffff1990931690151561ff00191617610100921515929092029190911781559082015160018201906133279082614de7565b5060608201516002820180546001600160a01b03199081166001600160a01b039384161790915560809093015160039092018054909316911617905560fd8054335f9081526101066020908152604080832084905592825261010890529081204390558154919061339783614bff565b9190505550336001600160a01b03167f55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd482600160fd546133d79190614bec565b604080516001600160a01b039093168352602083019190915287151590820152606001611993565b600260c954036134515760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016117e4565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa1580156134a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134c79190614af4565b6115f85760405163168dfea160e01b815260040160405180910390fd5b80158061351257505f818152610102602052604081205460ff16600581111561350f5761350f614722565b14155b15611d87576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff80548452610104909252822083905580549161356983614bff565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa1580156135ee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136129190614a96565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa158015613671573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136959190614b0f565b6136a790673782dace9d900000614bec565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b1580156136e4575f80fd5b505af11580156136f6573d5f803e3d5ffd5b5050505050505050565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa158015613744573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137689190614af4565b6117f75760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff1660058111156137ba576137ba614722565b60058111156137cb576137cb614722565b81526020016001820180546137df90614c17565b80601f016020809104026020016040519081016040528092919081815260200182805461380b90614c17565b80156138565780601f1061382d57610100808354040283529160200191613856565b820191905f5260205f20905b81548152906001019060200180831161383957829003601f168201915b5050505050815260200160028201805461386f90614c17565b80601f016020809104026020016040519081016040528092919081815260200182805461389b90614c17565b80156138e65780601f106138bd576101008083540402835291602001916138e6565b820191905f5260205f20905b8154815290600101906020018083116138c957829003601f168201915b505050505081526020016003820180546138ff90614c17565b80601f016020809104026020016040519081016040528092919081815260200182805461392b90614c17565b80156139765780601f1061394d57610100808354040283529160200191613976565b820191905f5260205f20905b81548152906001019060200180831161395957829003601f168201915b50505091835250506004828101546001600160a01b031660208301526005830154604083015260068301546060830152600790920154608090910152909150815160058111156139c8576139c8614722565b149392505050565b806101015f8282546139e29190614bec565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece390602001611345565b611d878133614133565b613a2f82826122c3565b6117f7575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613a663390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b613ab482826122c3565b156117f7575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015613b54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b789190614af4565b6117f75760405163c4230ae360e01b815260040160405180910390fd5b613b9d61418c565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381165f908152610106602052604081205490819003613c215760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff16613c505760405163c11cb1df60e01b815260040160405180910390fd5b919050565b613c5d613204565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613bca3390565b5f818152610102602052604080822081516101008101909252805483929190829060ff166005811115613cc757613cc7614722565b6005811115613cd857613cd8614722565b8152602001600182018054613cec90614c17565b80601f0160208091040260200160405190810160405280929190818152602001828054613d1890614c17565b8015613d635780601f10613d3a57610100808354040283529160200191613d63565b820191905f5260205f20905b815481529060010190602001808311613d4657829003601f168201915b50505050508152602001600282018054613d7c90614c17565b80601f0160208091040260200160405190810160405280929190818152602001828054613da890614c17565b8015613df35780601f10613dca57610100808354040283529160200191613df3565b820191905f5260205f20905b815481529060010190602001808311613dd657829003601f168201915b50505050508152602001600382018054613e0c90614c17565b80601f0160208091040260200160405190810160405280929190818152602001828054613e3890614c17565b8015613e835780601f10613e5a57610100808354040283529160200191613e83565b820191905f5260205f20905b815481529060010190602001808311613e6657829003601f168201915b505050918352505060048201546001600160a01b0316602082015260058083015460408301526006830154606083015260079092015460809091015290915081516005811115613ed557613ed5614722565b1480613ef35750600281516005811115613ef157613ef1614722565b145b80613f105750600181516005811115613f0e57613f0e614722565b145b159392505050565b5f808486141580613f295750838614155b15613f475760405163e5fe884360e01b815260040160405180910390fd5b859150811580613f5c575060fb5461ffff1682115b15613f7a576040516379b348ff60e11b815260040160405180910390fd5b505f828152610107602052604081205490613f963382846121f8565b60fb546001600160401b03918216925062010000900416613fb78483614b3a565b1115613fd657604051633e10caad60e21b815260040160405180910390fd5b613fe8673782dace9d90000084614bd5565b341461400757604051635aaa2d1f60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b031663aa9537956040518163ffffffff1660e01b8152600401602060405180830381865afa158015614058573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061407c9190614a96565b6001600160a01b031663b178e38e3360016140978786614b3a565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260ff90911660248301526044820152606401602060405180830381865afa1580156140e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061410c9190614af4565b61412957604051633bf053fd60e11b815260040160405180910390fd5b5094509492505050565b61413d82826122c3565b6117f75761414a816141d5565b6141558360206141e7565b604051602001614166929190614f6a565b60408051601f198184030181529082905262461bcd60e51b82526117e491600401614fde565b60975460ff166118215760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016117e4565b6060610b2b6001600160a01b03831660145b60605f6141f5836002614bd5565b614200906002614b3a565b6001600160401b038111156142175761421761481c565b6040519080825280601f01601f191660200182016040528015614241576020820181803683370190505b509050600360fc1b815f8151811061425b5761425b614b4d565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061428957614289614b4d565b60200101906001600160f81b03191690815f1a9053505f6142ab846002614bd5565b6142b6906001614b3a565b90505b600181111561432d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106142ea576142ea614b4d565b1a60f81b82828151811061430057614300614b4d565b60200101906001600160f81b03191690815f1a90535060049490941c9361432681614ff0565b90506142b9565b50831561437c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016117e4565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f602082840312156143dd575f80fd5b81356001600160e01b03198116811461437c575f80fd5b8015158114611d87575f80fd5b5f8083601f840112614411575f80fd5b5081356001600160401b03811115614427575f80fd5b60208301915083602082850101111561443e575f80fd5b9250929050565b6001600160a01b0381168114611d87575f80fd5b5f805f806060858703121561446c575f80fd5b8435614477816143f4565b935060208501356001600160401b03811115614491575f80fd5b61449d87828801614401565b90945092505060408501356144b181614445565b939692955090935050565b5f8083601f8401126144cc575f80fd5b5081356001600160401b038111156144e2575f80fd5b6020830191508360208260051b850101111561443e575f80fd5b5f805f805f8060608789031215614511575f80fd5b86356001600160401b0380821115614527575f80fd5b6145338a838b016144bc565b9098509650602089013591508082111561454b575f80fd5b6145578a838b016144bc565b9096509450604089013591508082111561456f575f80fd5b5061457c89828a016144bc565b979a9699509497509295939492505050565b5f6020828403121561459e575f80fd5b5035919050565b5f602082840312156145b5575f80fd5b813561ffff8116811461437c575f80fd5b5f80602083850312156145d7575f80fd5b82356001600160401b038111156145ec575f80fd5b6145f8858286016144bc565b90969095509350505050565b5f8060408385031215614615575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b818110156146645783516001600160a01b03168352928401929184019160010161463f565b50909695505050505050565b5f8060408385031215614681575f80fd5b82359150602083013561469381614445565b809150509250929050565b5f80602083850312156146af575f80fd5b82356001600160401b038111156146c4575f80fd5b6145f885828601614401565b5f805f604084860312156146e2575f80fd5b83356001600160401b038111156146f7575f80fd5b61470386828701614401565b909450925050602084013561471781614445565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b6006811061475257634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015614770578181015183820152602001614758565b50505f910152565b5f815180845261478f816020860160208601614756565b601f01601f19169290920160200192915050565b5f6101006147b1838c614736565b8060208401526147c38184018b614778565b905082810360408401526147d7818a614778565b905082810360608401526147eb8189614778565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215614840575f80fd5b81356001600160401b0380821115614856575f80fd5b818401915084601f830112614869575f80fd5b81358181111561487b5761487b61481c565b604051601f8201601f19908116603f011681019083821181831017156148a3576148a361481c565b816040528281528760208487010111156148bb575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f602082840312156148ea575f80fd5b81356001600160401b038116811461437c575f80fd5b5f805f60608486031215614912575f80fd5b833561491d81614445565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b83811015614a0e57603f198984030185528151610100614978858351614736565b88820151818a87015261498d82870182614778565b91505087820151858203898701526149a58282614778565b915050606080830151868303828801526149bf8382614778565b925050506080808301516149dd828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e09182015191909401529386019390860190600101614957565b509098975050505050505050565b5f60208284031215614a2c575f80fd5b813561437c81614445565b8515158152841515602082015260a060408201525f614a5960a0830186614778565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f60208284031215614a8b575f80fd5b813561437c816143f4565b5f60208284031215614aa6575f80fd5b815161437c81614445565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f614aec602083018486614ab1565b949350505050565b5f60208284031215614b04575f80fd5b815161437c816143f4565b5f60208284031215614b1f575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2b57610b2b614b26565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112614b76575f80fd5b8301803591506001600160401b03821115614b8f575f80fd5b60200191503681900382131561443e575f80fd5b818382375f9101908152919050565b604081525f614bc5604083018587614ab1565b9050826020830152949350505050565b8082028115828204841417610b2b57610b2b614b26565b81810381811115610b2b57610b2b614b26565b5f60018201614c1057614c10614b26565b5060010190565b600181811c90821680614c2b57607f821691505b602082108103614c4957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156115f8575f81815260208120601f850160051c81016020861015614c755750805b601f850160051c820191505b8181101561129857828155600101614c81565b6001600160401b03831115614cab57614cab61481c565b614cbf83614cb98354614c17565b83614c4f565b5f601f841160018114614cf0575f8515614cd95750838201355b5f19600387901b1c1916600186901b178355614d48565b5f83815260209020601f19861690835b82811015614d205786850135825560209485019460019092019101614d00565b5086821015614d3c575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f614d62604083018587614ab1565b905060018060a01b0383166020830152949350505050565b5f6001600160401b03808316818103614d9557614d95614b26565b6001019392505050565b606081525f614db260608301888a614ab1565b8281036020840152614dc5818789614ab1565b90508281036040840152614dda818587614ab1565b9998505050505050505050565b81516001600160401b03811115614e0057614e0061481c565b614e1481614e0e8454614c17565b84614c4f565b602080601f831160018114614e47575f8415614e305750858301515b5f19600386901b1c1916600185901b178555611298565b5f85815260208120601f198616915b82811015614e7557888601518255948401946001909101908401614e56565b5085821015614e9257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8183525f6020808501808196508560051b81019150845f5b87811015614f215782840389528135601e19883603018112614eda575f80fd5b870185810190356001600160401b03811115614ef4575f80fd5b803603821315614f02575f80fd5b614f0d868284614ab1565b9a87019a9550505090840190600101614eba565b5091979650505050505050565b608081525f614f4160808301888a614ea2565b8281036020840152614f54818789614ea2565b6040840195909552505060600152949350505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351614fa1816017850160208801614756565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614fd2816028840160208801614756565b01602801949350505050565b602081525f61437c6020830184614778565b5f81614ffe57614ffe614b26565b505f19019056fea2646970667358221220c40d1ffd6c13d5b73997805a16431fa2babd5a905d252deff178b96de5d3283664736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // PermissionlessNodeRegistryABI is the input ABI used to generate the binding from. @@ -1541,21 +1541,21 @@ func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) // OnboardNodeOperator is a paid mutator transaction binding the contract method 0x044d2fe8. // -// Solidity: function onboardNodeOperator(bool _optInForSocializingPool, string _operatorName, address _operatorRewardAddress) returns(address feeRecipientAddress) +// Solidity: function onboardNodeOperator(bool _optInForSocializingPool, string _operatorName, address _operatorRewardAddress) returns(address poolUtils) func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) OnboardNodeOperator(opts *bind.TransactOpts, _optInForSocializingPool bool, _operatorName string, _operatorRewardAddress common.Address) (*types.Transaction, error) { return _PermissionlessNodeRegistry.contract.Transact(opts, "onboardNodeOperator", _optInForSocializingPool, _operatorName, _operatorRewardAddress) } // OnboardNodeOperator is a paid mutator transaction binding the contract method 0x044d2fe8. // -// Solidity: function onboardNodeOperator(bool _optInForSocializingPool, string _operatorName, address _operatorRewardAddress) returns(address feeRecipientAddress) +// Solidity: function onboardNodeOperator(bool _optInForSocializingPool, string _operatorName, address _operatorRewardAddress) returns(address poolUtils) func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) OnboardNodeOperator(_optInForSocializingPool bool, _operatorName string, _operatorRewardAddress common.Address) (*types.Transaction, error) { return _PermissionlessNodeRegistry.Contract.OnboardNodeOperator(&_PermissionlessNodeRegistry.TransactOpts, _optInForSocializingPool, _operatorName, _operatorRewardAddress) } // OnboardNodeOperator is a paid mutator transaction binding the contract method 0x044d2fe8. // -// Solidity: function onboardNodeOperator(bool _optInForSocializingPool, string _operatorName, address _operatorRewardAddress) returns(address feeRecipientAddress) +// Solidity: function onboardNodeOperator(bool _optInForSocializingPool, string _operatorName, address _operatorRewardAddress) returns(address poolUtils) func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) OnboardNodeOperator(_optInForSocializingPool bool, _operatorName string, _operatorRewardAddress common.Address) (*types.Transaction, error) { return _PermissionlessNodeRegistry.Contract.OnboardNodeOperator(&_PermissionlessNodeRegistry.TransactOpts, _optInForSocializingPool, _operatorName, _operatorRewardAddress) } diff --git a/testing/contracts/SocializingPool.go b/testing/contracts/SocializingPool.go new file mode 100644 index 000000000..e522af230 --- /dev/null +++ b/testing/contracts/SocializingPool.go @@ -0,0 +1,3068 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contracts + +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 +) + +// RewardsData is an auto generated low-level Go binding around an user-defined struct. +type RewardsData struct { + ReportingBlockNumber *big.Int + Index *big.Int + MerkleRoot [32]byte + PoolId uint8 + OperatorETHRewards *big.Int + UserETHRewards *big.Int + ProtocolETHRewards *big.Int + OperatorSDRewards *big.Int +} + +// SocializingPoolMetaData contains all meta data concerning the SocializingPool contract. +var SocializingPoolMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ETHTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FutureCycleIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientETHRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientSDRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCycleIndex\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cycle\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"cycle\",\"type\":\"uint256\"}],\"name\":\"RewardAlreadyClaimed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RewardAlreadyHandled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SDTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ETHReceived\",\"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\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sdRewards\",\"type\":\"uint256\"}],\"name\":\"OperatorRewardsClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalETHRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sdRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSDRewards\",\"type\":\"uint256\"}],\"name\":\"OperatorRewardsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethRewards\",\"type\":\"uint256\"}],\"name\":\"ProtocolETHRewardsTransferred\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staderOperatorRegistry\",\"type\":\"address\"}],\"name\":\"UpdatedStaderOperatorRegistry\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staderValidatorRegistry\",\"type\":\"address\"}],\"name\":\"UpdatedStaderValidatorRegistry\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethRewards\",\"type\":\"uint256\"}],\"name\":\"UserETHRewardsTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_index\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amountSD\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amountETH\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32[][]\",\"name\":\"_merkleProof\",\"type\":\"bytes32[][]\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimedRewards\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentRewardsIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getRewardCycleDetails\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_startBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardDetails\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentStartBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentEndBlock\",\"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\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"operatorETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"operatorSDRewards\",\"type\":\"uint256\"}],\"internalType\":\"structRewardsData\",\"name\":\"_rewardsData\",\"type\":\"tuple\"}],\"name\":\"handleRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"handledRewards\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":[],\"name\":\"initialBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastReportedRewardsData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"operatorETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"operatorSDRewards\",\"type\":\"uint256\"}],\"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\":[{\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rewardsDataMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"operatorETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"operatorSDRewards\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"totalOperatorETHRewardsRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalOperatorSDRewardsRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountSD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_amountETH\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"_merkleProof\",\"type\":\"bytes32[]\"}],\"name\":\"verifyProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x608060405234801562000010575f80fd5b506040516200261c3803806200261c833981016040819052620000339162000373565b6200003e826200009a565b62000049816200009a565b62000053620000c5565b6200005d62000125565b6200006762000189565b60fb80546001600160a01b0319166001600160a01b0383161790554360fe55620000925f83620001ed565b5050620003a9565b6001600160a01b038116620000c25760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620001235760405162461bcd60e51b815260206004820152602b60248201525f80516020620025fc83398151915260448201526a6e697469616c697a696e6760a81b60648201526084015b60405180910390fd5b565b5f54610100900460ff166200017f5760405162461bcd60e51b815260206004820152602b60248201525f80516020620025fc83398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200011a565b6200012362000290565b5f54610100900460ff16620001e35760405162461bcd60e51b815260206004820152602b60248201525f80516020620025fc83398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200011a565b62000123620002f6565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff166200028c575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200024b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff16620002ea5760405162461bcd60e51b815260206004820152602b60248201525f80516020620025fc83398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200011a565b6097805460ff19169055565b5f54610100900460ff16620003505760405162461bcd60e51b815260206004820152602b60248201525f80516020620025fc83398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200011a565b600160c955565b80516001600160a01b03811681146200036e575f80fd5b919050565b5f806040838503121562000385575f80fd5b620003908362000357565b9150620003a06020840162000357565b90509250929050565b61224580620003b75f395ff3fe608060405260043610610164575f3560e01c80635c975abb116100cd578063d009b3d011610087578063d547741f11610062578063d547741f146104ea578063ebc0f5f714610509578063fb831b9a14610538578063fffbe4591461056f575f80fd5b8063d009b3d014610468578063d0c4027614610487578063d2bff5ed146104b6575f80fd5b80635c975abb146103d75780638456cb59146103ee57806391d14854146104025780639ee804cb14610421578063a217fddf14610440578063c8725d8214610453575f80fd5b80632f2ff15d1161011e5780632f2ff15d146102d857806336568abe146102f75780633f4ba83a1461031657806347675c9e1461032a578063490ffa351461033f5780634a321b7914610376575f80fd5b806301ffc9a7146101a45780630d83e4ed146101d8578063189956a2146101f9578063248a9ca31461021b578063251272e0146102495780632cb15864146102c3575f80fd5b366101a05760405134815233907fbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a9060200160405180910390a2005b5f80fd5b3480156101af575f80fd5b506101c36101be366004611d2f565b61058e565b60405190151581526020015b60405180910390f35b3480156101e3575f80fd5b506101f76101f2366004611d56565b6105c4565b005b348015610204575f80fd5b5061020d610b6c565b6040519081526020016101cf565b348015610226575f80fd5b5061020d610235366004611d6d565b5f9081526065602052604090206001015490565b348015610254575f80fd5b5061010154610102546101035461010454610105546101065461010754610108546102869796959460ff169392919088565b6040805198895260208901979097529587019490945260ff9092166060860152608085015260a084015260c083015260e0820152610100016101cf565b3480156102ce575f80fd5b5061020d60fe5481565b3480156102e3575f80fd5b506101f76102f2366004611d98565b610b82565b348015610302575f80fd5b506101f7610311366004611d98565b610bab565b348015610321575f80fd5b506101f7610c29565b348015610335575f80fd5b5061020d60fd5481565b34801561034a575f80fd5b5060fb5461035e906001600160a01b031681565b6040516001600160a01b0390911681526020016101cf565b348015610381575f80fd5b50610286610390366004611d6d565b6101096020525f90815260409020805460018201546002830154600384015460048501546005860154600687015460079097015495969495939460ff909316939192909188565b3480156103e2575f80fd5b5060975460ff166101c3565b3480156103f9575f80fd5b506101f7610c3b565b34801561040d575f80fd5b506101c361041c366004611d98565b610c5c565b34801561042c575f80fd5b506101f761043b366004611dc6565b610c86565b34801561044b575f80fd5b5061020d5f81565b34801561045e575f80fd5b5061020d60fc5481565b348015610473575f80fd5b506101f7610482366004611e29565b610ce3565b348015610492575f80fd5b5061049b610f39565b604080519384526020840192909252908201526060016101cf565b3480156104c1575f80fd5b506104d56104d0366004611d6d565b610f59565b604080519283526020830191909152016101cf565b3480156104f5575f80fd5b506101f7610504366004611d98565b611103565b348015610514575f80fd5b506101c3610523366004611d6d565b6101006020525f908152604090205460ff1681565b348015610543575f80fd5b506101c3610552366004611ee4565b60ff60208181525f93845260408085209091529183529120541681565b34801561057a575f80fd5b506101c3610589366004611f0e565b611127565b5f6001600160e01b03198216637965db0b60e01b14806105be57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6105cc6111fe565b60fb5460408051633871d0f160e01b815290516106449233926001600160a01b03909116918291633871d0f19160048083019260209291908290030181865afa15801561061b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063f9190611f7c565b611257565b6020808201355f908152610100909152604090205460ff161561067a57604051635841910760e11b815260040160405180910390fd5b60fc546106879047611fa7565b60c082013561069e60a08401356080850135611fba565b6106a89190611fba565b11156106c65760405162908db560e81b815260040160405180910390fd5b60fd5460fb5f9054906101000a90046001600160a01b03166001600160a01b031663e069f7146040518163ffffffff1660e01b8152600401602060405180830381865afa158015610719573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061073d9190611fcd565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610781573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a59190611f7c565b6107af9190611fa7565b8160e0013511156107d357604051631de594e360e01b815260040160405180910390fd5b6020808201355f90815261010090915260408120805460ff1916600117905560fc805460808401359290610808908490611fba565b925050819055508060e0013560fd5f8282546108249190611fba565b909155508190506101016108388282611ff6565b50506020808201355f90815261010990915260409020819061085a8282611ff6565b505060fb54604080516305d8bc0360e31b815290516001600160a01b0390921691632ec5e018916004808201926020929091908290030181865afa1580156108a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c89190611fcd565b6001600160a01b03166333cf0ef08260a001356040518263ffffffff1660e01b81526004015f604051808303818588803b158015610904575f80fd5b505af1158015610916573d5f803e3d5ffd5b50505050505f60fb5f9054906101000a90046001600160a01b03166001600160a01b03166372ce78b06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561096c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109909190611fcd565b6001600160a01b03168260c001356040515f6040518083038185875af1925050503d805f81146109db576040519150601f19603f3d011682016040523d82523d5f602084013e6109e0565b606091505b5050905080610a915760fb5f9054906101000a90046001600160a01b03166001600160a01b03166372ce78b06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a39573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5d9190611fcd565b604051635e0a829b60e01b81526001600160a01b03909116600482015260c083013560248201526044015b60405180910390fd5b7f0e357ad2594fa2d9d8c6dc7c280141cc1b89ba4c9714a96fd3f409f4fded31d0826080013560fc548460e0013560fd54604051610ae8949392919093845260208401929092526040830152606082015260800190565b60405180910390a160405160a083013581527f7083eaccdb1f2834d37a767b05f3b72d54217404ee1cb70aa1b774e4e8a02dda9060200160405180910390a160405160c083013581527f292921846cb4d7dd20ae1c60a15192efacaaa30028f2043998f925c6c10a81509060200160405180910390a150610b69600160c955565b50565b610102545f90610b7d906001611fba565b905090565b5f82815260656020526040902060010154610b9c816112e3565b610ba683836112ed565b505050565b6001600160a01b0381163314610c1b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610a88565b610c258282611372565b5050565b5f610c33816112e3565b610b696113d8565b60fb54610c529033906001600160a01b031661142a565b610c5a6114af565b565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f610c90816112e3565b610c99826114ec565b60fb80546001600160a01b0319166001600160a01b0384169081179091556040517fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a25050565b610ceb6111fe565b610cf3611513565b335f80610d078b8b858c8c8c8c8c8c611559565b60fb5491935091505f90610d259085906001600160a01b03166117d6565b90505f8215610dc5578260fc5f828254610d3f9190611fa7565b90915550506040516001600160a01b0383169084905f81818185875af1925050503d805f8114610d8a576040519150601f19603f3d011682016040523d82523d5f602084013e610d8f565b606091505b50508091505080610dc557604051635e0a829b60e01b81526001600160a01b038316600482015260248101849052604401610a88565b8315610edc578360fd5f828254610ddc9190611fa7565b909155505060fb546040805163381a7dc560e21b815290516001600160a01b039092169163e069f714916004808201926020929091908290030181865afa158015610e29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4d9190611fcd565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201879052919091169063a9059cbb906044016020604051808303815f875af1158015610e9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebf919061205b565b610edc5760405163d3544e3f60e01b815260040160405180910390fd5b60408051848152602081018690526001600160a01b038416917f62bc6d6d870f047ea4dd686d08bfda93e24cac6b8dae0d740f6fa33071f3f0af910160405180910390a25050505050610f2f600160c955565b5050505050505050565b5f805f610f44610b6c565b9250610f4f83610f59565b9394909392509050565b5f80825f03610f7b57604051630b731bb760e21b815260040160405180910390fd5b5f838152610109602052604090205415610fd0576101095f610f9e600186611fa7565b815260208101919091526040015f2054610fb9906001611fba565b5f9384526101096020526040909320549293915050565b60fb5460408051631ca197a560e01b815290515f926001600160a01b031691631ca197a59160048083019260209291908290030181865afa158015611017573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103b9190611f7c565b9050836001036110685760fe5460016110548383611fba565b61105e9190611fa7565b9250925050915091565b6101095f611077600187611fa7565b815260208101919091526040015f2054156110ea576101095f61109b600187611fa7565b815260208101919091526040015f20546110b6906001611fba565b9250806101095f6110c8600188611fa7565b81526020019081526020015f205f01546110e29190611fba565b915050915091565b604051632dc673c360e21b815260040160405180910390fd5b5f8281526065602052604090206001015461111d816112e3565b610ba68383611372565b5f86158061113757506101025487115b1561115557604051630b731bb760e21b815260040160405180910390fd5b5f878152610109602090815260408083206002015490516bffffffffffffffffffffffff1960608b901b1692810192909252603482018890526054820187905291906074016040516020818303038152906040528051906020012090506111f18585808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250869250859150611a519050565b9998505050505050505050565b600260c954036112505760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a88565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa1580156112a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112c6919061205b565b610ba65760405163168dfea160e01b815260040160405180910390fd5b610b698133611a66565b6112f78282610c5c565b610c25575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561132e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61137c8282610c5c565b15610c25575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6113e0611abf565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa15801561146e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611492919061205b565b610c255760405163c4230ae360e01b815260040160405180910390fd5b6114b7611513565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861140d3390565b6001600160a01b038116610b695760405163d92e233d60e01b815260040160405180910390fd5b60975460ff1615610c5a5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a88565b5f8089815b818110156117c6578989828181106115785761157861207a565b905060200201355f1480156115a4575087878281811061159a5761159a61207a565b905060200201355f145b156115c25760405163162908e360e11b815260040160405180910390fd5b6001600160a01b038b165f90815260ff60205260408120908e8e848181106115ec576115ec61207a565b602090810292909201358352508101919091526040015f205460ff1615611653578a8d8d838181106116205761162061207a565b604051630ec8a45560e21b81526001600160a01b0390941660048501526020029190910135602483015250604401610a88565b8989828181106116655761166561207a565b90506020020135846116779190611fba565b935087878281811061168b5761168b61207a565b905060200201358361169d9190611fba565b6001600160a01b038c165f90815260ff60205260408120919450600191908f8f858181106116cd576116cd61207a565b9050602002013581526020019081526020015f205f6101000a81548160ff02191690831515021790555061176a8d8d8381811061170c5761170c61207a565b905060200201358c8c8c858181106117265761172661207a565b905060200201358b8b8681811061173f5761173f61207a565b905060200201358a8a878181106117585761175861207a565b9050602002810190610589919061208e565b6117b4578c8c828181106117805761178061207a565b60405163dab3a3fb60e01b8152602090910292909201356004830152506001600160a01b038c166024820152604401610a88565b806117be816120d4565b91505061155e565b5050995099975050505050505050565b5f80826001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611814573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118389190611fcd565b604051634721e29d60e11b81526001600160a01b0386811660048301529190911690638e43c53a90602401602060405180830381865afa15801561187e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118a291906120ec565b90505f836001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119059190611fcd565b60405163133a0ab960e31b815260ff841660048201526001600160a01b0391909116906399d055c890602401602060405180830381865afa15801561194c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119709190611fcd565b604051636564598360e11b81526001600160a01b0387811660048301529192505f9183169063cac8b30690602401602060405180830381865afa1580156119b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119dd9190611f7c565b60405163107d446b60e31b8152600481018290529091506001600160a01b038316906383ea235890602401602060405180830381865afa158015611a23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a479190611fcd565b9695505050505050565b5f82611a5d8584611b08565b14949350505050565b611a708282610c5c565b610c2557611a7d81611b54565b611a88836020611b66565b604051602001611a99929190612129565b60408051601f198184030181529082905262461bcd60e51b8252610a889160040161219d565b60975460ff16610c5a5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a88565b5f81815b8451811015611b4c57611b3882868381518110611b2b57611b2b61207a565b6020026020010151611d03565b915080611b44816120d4565b915050611b0c565b509392505050565b60606105be6001600160a01b03831660145b60605f611b748360026121cf565b611b7f906002611fba565b67ffffffffffffffff811115611b9757611b976121e6565b6040519080825280601f01601f191660200182016040528015611bc1576020820181803683370190505b509050600360fc1b815f81518110611bdb57611bdb61207a565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611c0957611c0961207a565b60200101906001600160f81b03191690815f1a9053505f611c2b8460026121cf565b611c36906001611fba565b90505b6001811115611cad576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611c6a57611c6a61207a565b1a60f81b828281518110611c8057611c8061207a565b60200101906001600160f81b03191690815f1a90535060049490941c93611ca6816121fa565b9050611c39565b508315611cfc5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a88565b9392505050565b5f818310611d1d575f828152602084905260409020611cfc565b5f838152602083905260409020611cfc565b5f60208284031215611d3f575f80fd5b81356001600160e01b031981168114611cfc575f80fd5b5f6101008284031215611d67575f80fd5b50919050565b5f60208284031215611d7d575f80fd5b5035919050565b6001600160a01b0381168114610b69575f80fd5b5f8060408385031215611da9575f80fd5b823591506020830135611dbb81611d84565b809150509250929050565b5f60208284031215611dd6575f80fd5b8135611cfc81611d84565b5f8083601f840112611df1575f80fd5b50813567ffffffffffffffff811115611e08575f80fd5b6020830191508360208260051b8501011115611e22575f80fd5b9250929050565b5f805f805f805f806080898b031215611e40575f80fd5b883567ffffffffffffffff80821115611e57575f80fd5b611e638c838d01611de1565b909a50985060208b0135915080821115611e7b575f80fd5b611e878c838d01611de1565b909850965060408b0135915080821115611e9f575f80fd5b611eab8c838d01611de1565b909650945060608b0135915080821115611ec3575f80fd5b50611ed08b828c01611de1565b999c989b5096995094979396929594505050565b5f8060408385031215611ef5575f80fd5b8235611f0081611d84565b946020939093013593505050565b5f805f805f8060a08789031215611f23575f80fd5b863595506020870135611f3581611d84565b94506040870135935060608701359250608087013567ffffffffffffffff811115611f5e575f80fd5b611f6a89828a01611de1565b979a9699509497509295939492505050565b5f60208284031215611f8c575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105be576105be611f93565b808201808211156105be576105be611f93565b5f60208284031215611fdd575f80fd5b8151611cfc81611d84565b60ff81168114610b69575f80fd5b81358155602082013560018201556040820135600282015560038101606083013561202081611fe8565b815460ff191660ff919091161790556080820135600482015560a0820135600582015560c0820135600682015560e090910135600790910155565b5f6020828403121561206b575f80fd5b81518015158114611cfc575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f808335601e198436030181126120a3575f80fd5b83018035915067ffffffffffffffff8211156120bd575f80fd5b6020019150600581901b3603821315611e22575f80fd5b5f600182016120e5576120e5611f93565b5060010190565b5f602082840312156120fc575f80fd5b8151611cfc81611fe8565b5f5b83811015612121578181015183820152602001612109565b50505f910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351612160816017850160208801612107565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612191816028840160208801612107565b01602801949350505050565b602081525f82518060208401526121bb816040850160208701612107565b601f01601f19169190910160400192915050565b80820281158282048414176105be576105be611f93565b634e487b7160e01b5f52604160045260245ffd5b5f8161220857612208611f93565b505f19019056fea26469706673582212204176179aa38da33ba1dcba66aafbc1a0d5425cdd9cb827688aa2506ce10ce69164736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", +} + +// SocializingPoolABI is the input ABI used to generate the binding from. +// Deprecated: Use SocializingPoolMetaData.ABI instead. +var SocializingPoolABI = SocializingPoolMetaData.ABI + +// SocializingPoolBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use SocializingPoolMetaData.Bin instead. +var SocializingPoolBin = SocializingPoolMetaData.Bin + +// DeploySocializingPool deploys a new Ethereum contract, binding an instance of SocializingPool to it. +func DeploySocializingPool(auth *bind.TransactOpts, backend bind.ContractBackend, _admin common.Address, _staderConfig common.Address) (common.Address, *types.Transaction, *SocializingPool, error) { + parsed, err := SocializingPoolMetaData.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(SocializingPoolBin), backend, _admin, _staderConfig) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SocializingPool{SocializingPoolCaller: SocializingPoolCaller{contract: contract}, SocializingPoolTransactor: SocializingPoolTransactor{contract: contract}, SocializingPoolFilterer: SocializingPoolFilterer{contract: contract}}, nil +} + +// SocializingPool is an auto generated Go binding around an Ethereum contract. +type SocializingPool struct { + SocializingPoolCaller // Read-only binding to the contract + SocializingPoolTransactor // Write-only binding to the contract + SocializingPoolFilterer // Log filterer for contract events +} + +// SocializingPoolCaller is an auto generated read-only Go binding around an Ethereum contract. +type SocializingPoolCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SocializingPoolTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SocializingPoolTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SocializingPoolFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SocializingPoolFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SocializingPoolSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SocializingPoolSession struct { + Contract *SocializingPool // 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 +} + +// SocializingPoolCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SocializingPoolCallerSession struct { + Contract *SocializingPoolCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SocializingPoolTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SocializingPoolTransactorSession struct { + Contract *SocializingPoolTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SocializingPoolRaw is an auto generated low-level Go binding around an Ethereum contract. +type SocializingPoolRaw struct { + Contract *SocializingPool // Generic contract binding to access the raw methods on +} + +// SocializingPoolCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SocializingPoolCallerRaw struct { + Contract *SocializingPoolCaller // Generic read-only contract binding to access the raw methods on +} + +// SocializingPoolTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SocializingPoolTransactorRaw struct { + Contract *SocializingPoolTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSocializingPool creates a new instance of SocializingPool, bound to a specific deployed contract. +func NewSocializingPool(address common.Address, backend bind.ContractBackend) (*SocializingPool, error) { + contract, err := bindSocializingPool(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &SocializingPool{SocializingPoolCaller: SocializingPoolCaller{contract: contract}, SocializingPoolTransactor: SocializingPoolTransactor{contract: contract}, SocializingPoolFilterer: SocializingPoolFilterer{contract: contract}}, nil +} + +// NewSocializingPoolCaller creates a new read-only instance of SocializingPool, bound to a specific deployed contract. +func NewSocializingPoolCaller(address common.Address, caller bind.ContractCaller) (*SocializingPoolCaller, error) { + contract, err := bindSocializingPool(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SocializingPoolCaller{contract: contract}, nil +} + +// NewSocializingPoolTransactor creates a new write-only instance of SocializingPool, bound to a specific deployed contract. +func NewSocializingPoolTransactor(address common.Address, transactor bind.ContractTransactor) (*SocializingPoolTransactor, error) { + contract, err := bindSocializingPool(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SocializingPoolTransactor{contract: contract}, nil +} + +// NewSocializingPoolFilterer creates a new log filterer instance of SocializingPool, bound to a specific deployed contract. +func NewSocializingPoolFilterer(address common.Address, filterer bind.ContractFilterer) (*SocializingPoolFilterer, error) { + contract, err := bindSocializingPool(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SocializingPoolFilterer{contract: contract}, nil +} + +// bindSocializingPool binds a generic wrapper to an already deployed contract. +func bindSocializingPool(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := SocializingPoolMetaData.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 (_SocializingPool *SocializingPoolRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SocializingPool.Contract.SocializingPoolCaller.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 (_SocializingPool *SocializingPoolRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SocializingPool.Contract.SocializingPoolTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SocializingPool *SocializingPoolRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SocializingPool.Contract.SocializingPoolTransactor.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 (_SocializingPool *SocializingPoolCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SocializingPool.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 (_SocializingPool *SocializingPoolTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SocializingPool.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SocializingPool *SocializingPoolTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SocializingPool.Contract.contract.Transact(opts, method, params...) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_SocializingPool *SocializingPoolCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SocializingPool.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_SocializingPool *SocializingPoolSession) DEFAULTADMINROLE() ([32]byte, error) { + return _SocializingPool.Contract.DEFAULTADMINROLE(&_SocializingPool.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_SocializingPool *SocializingPoolCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _SocializingPool.Contract.DEFAULTADMINROLE(&_SocializingPool.CallOpts) +} + +// ClaimedRewards is a free data retrieval call binding the contract method 0xfb831b9a. +// +// Solidity: function claimedRewards(address , uint256 ) view returns(bool) +func (_SocializingPool *SocializingPoolCaller) ClaimedRewards(opts *bind.CallOpts, arg0 common.Address, arg1 *big.Int) (bool, error) { + var out []interface{} + err := _SocializingPool.contract.Call(opts, &out, "claimedRewards", arg0, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// ClaimedRewards is a free data retrieval call binding the contract method 0xfb831b9a. +// +// Solidity: function claimedRewards(address , uint256 ) view returns(bool) +func (_SocializingPool *SocializingPoolSession) ClaimedRewards(arg0 common.Address, arg1 *big.Int) (bool, error) { + return _SocializingPool.Contract.ClaimedRewards(&_SocializingPool.CallOpts, arg0, arg1) +} + +// ClaimedRewards is a free data retrieval call binding the contract method 0xfb831b9a. +// +// Solidity: function claimedRewards(address , uint256 ) view returns(bool) +func (_SocializingPool *SocializingPoolCallerSession) ClaimedRewards(arg0 common.Address, arg1 *big.Int) (bool, error) { + return _SocializingPool.Contract.ClaimedRewards(&_SocializingPool.CallOpts, arg0, arg1) +} + +// GetCurrentRewardsIndex is a free data retrieval call binding the contract method 0x189956a2. +// +// Solidity: function getCurrentRewardsIndex() view returns(uint256 index) +func (_SocializingPool *SocializingPoolCaller) GetCurrentRewardsIndex(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SocializingPool.contract.Call(opts, &out, "getCurrentRewardsIndex") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetCurrentRewardsIndex is a free data retrieval call binding the contract method 0x189956a2. +// +// Solidity: function getCurrentRewardsIndex() view returns(uint256 index) +func (_SocializingPool *SocializingPoolSession) GetCurrentRewardsIndex() (*big.Int, error) { + return _SocializingPool.Contract.GetCurrentRewardsIndex(&_SocializingPool.CallOpts) +} + +// GetCurrentRewardsIndex is a free data retrieval call binding the contract method 0x189956a2. +// +// Solidity: function getCurrentRewardsIndex() view returns(uint256 index) +func (_SocializingPool *SocializingPoolCallerSession) GetCurrentRewardsIndex() (*big.Int, error) { + return _SocializingPool.Contract.GetCurrentRewardsIndex(&_SocializingPool.CallOpts) +} + +// GetRewardCycleDetails is a free data retrieval call binding the contract method 0xd2bff5ed. +// +// Solidity: function getRewardCycleDetails(uint256 _index) view returns(uint256 _startBlock, uint256 _endBlock) +func (_SocializingPool *SocializingPoolCaller) GetRewardCycleDetails(opts *bind.CallOpts, _index *big.Int) (struct { + StartBlock *big.Int + EndBlock *big.Int +}, error) { + var out []interface{} + err := _SocializingPool.contract.Call(opts, &out, "getRewardCycleDetails", _index) + + outstruct := new(struct { + StartBlock *big.Int + EndBlock *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.StartBlock = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.EndBlock = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// GetRewardCycleDetails is a free data retrieval call binding the contract method 0xd2bff5ed. +// +// Solidity: function getRewardCycleDetails(uint256 _index) view returns(uint256 _startBlock, uint256 _endBlock) +func (_SocializingPool *SocializingPoolSession) GetRewardCycleDetails(_index *big.Int) (struct { + StartBlock *big.Int + EndBlock *big.Int +}, error) { + return _SocializingPool.Contract.GetRewardCycleDetails(&_SocializingPool.CallOpts, _index) +} + +// GetRewardCycleDetails is a free data retrieval call binding the contract method 0xd2bff5ed. +// +// Solidity: function getRewardCycleDetails(uint256 _index) view returns(uint256 _startBlock, uint256 _endBlock) +func (_SocializingPool *SocializingPoolCallerSession) GetRewardCycleDetails(_index *big.Int) (struct { + StartBlock *big.Int + EndBlock *big.Int +}, error) { + return _SocializingPool.Contract.GetRewardCycleDetails(&_SocializingPool.CallOpts, _index) +} + +// GetRewardDetails is a free data retrieval call binding the contract method 0xd0c40276. +// +// Solidity: function getRewardDetails() view returns(uint256 currentIndex, uint256 currentStartBlock, uint256 currentEndBlock) +func (_SocializingPool *SocializingPoolCaller) GetRewardDetails(opts *bind.CallOpts) (struct { + CurrentIndex *big.Int + CurrentStartBlock *big.Int + CurrentEndBlock *big.Int +}, error) { + var out []interface{} + err := _SocializingPool.contract.Call(opts, &out, "getRewardDetails") + + outstruct := new(struct { + CurrentIndex *big.Int + CurrentStartBlock *big.Int + CurrentEndBlock *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.CurrentIndex = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.CurrentStartBlock = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.CurrentEndBlock = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// GetRewardDetails is a free data retrieval call binding the contract method 0xd0c40276. +// +// Solidity: function getRewardDetails() view returns(uint256 currentIndex, uint256 currentStartBlock, uint256 currentEndBlock) +func (_SocializingPool *SocializingPoolSession) GetRewardDetails() (struct { + CurrentIndex *big.Int + CurrentStartBlock *big.Int + CurrentEndBlock *big.Int +}, error) { + return _SocializingPool.Contract.GetRewardDetails(&_SocializingPool.CallOpts) +} + +// GetRewardDetails is a free data retrieval call binding the contract method 0xd0c40276. +// +// Solidity: function getRewardDetails() view returns(uint256 currentIndex, uint256 currentStartBlock, uint256 currentEndBlock) +func (_SocializingPool *SocializingPoolCallerSession) GetRewardDetails() (struct { + CurrentIndex *big.Int + CurrentStartBlock *big.Int + CurrentEndBlock *big.Int +}, error) { + return _SocializingPool.Contract.GetRewardDetails(&_SocializingPool.CallOpts) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_SocializingPool *SocializingPoolCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _SocializingPool.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_SocializingPool *SocializingPoolSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _SocializingPool.Contract.GetRoleAdmin(&_SocializingPool.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_SocializingPool *SocializingPoolCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _SocializingPool.Contract.GetRoleAdmin(&_SocializingPool.CallOpts, role) +} + +// HandledRewards is a free data retrieval call binding the contract method 0xebc0f5f7. +// +// Solidity: function handledRewards(uint256 ) view returns(bool) +func (_SocializingPool *SocializingPoolCaller) HandledRewards(opts *bind.CallOpts, arg0 *big.Int) (bool, error) { + var out []interface{} + err := _SocializingPool.contract.Call(opts, &out, "handledRewards", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HandledRewards is a free data retrieval call binding the contract method 0xebc0f5f7. +// +// Solidity: function handledRewards(uint256 ) view returns(bool) +func (_SocializingPool *SocializingPoolSession) HandledRewards(arg0 *big.Int) (bool, error) { + return _SocializingPool.Contract.HandledRewards(&_SocializingPool.CallOpts, arg0) +} + +// HandledRewards is a free data retrieval call binding the contract method 0xebc0f5f7. +// +// Solidity: function handledRewards(uint256 ) view returns(bool) +func (_SocializingPool *SocializingPoolCallerSession) HandledRewards(arg0 *big.Int) (bool, error) { + return _SocializingPool.Contract.HandledRewards(&_SocializingPool.CallOpts, arg0) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_SocializingPool *SocializingPoolCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _SocializingPool.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_SocializingPool *SocializingPoolSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _SocializingPool.Contract.HasRole(&_SocializingPool.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_SocializingPool *SocializingPoolCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _SocializingPool.Contract.HasRole(&_SocializingPool.CallOpts, role, account) +} + +// InitialBlock is a free data retrieval call binding the contract method 0x2cb15864. +// +// Solidity: function initialBlock() view returns(uint256) +func (_SocializingPool *SocializingPoolCaller) InitialBlock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SocializingPool.contract.Call(opts, &out, "initialBlock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// InitialBlock is a free data retrieval call binding the contract method 0x2cb15864. +// +// Solidity: function initialBlock() view returns(uint256) +func (_SocializingPool *SocializingPoolSession) InitialBlock() (*big.Int, error) { + return _SocializingPool.Contract.InitialBlock(&_SocializingPool.CallOpts) +} + +// InitialBlock is a free data retrieval call binding the contract method 0x2cb15864. +// +// Solidity: function initialBlock() view returns(uint256) +func (_SocializingPool *SocializingPoolCallerSession) InitialBlock() (*big.Int, error) { + return _SocializingPool.Contract.InitialBlock(&_SocializingPool.CallOpts) +} + +// LastReportedRewardsData is a free data retrieval call binding the contract method 0x251272e0. +// +// Solidity: function lastReportedRewardsData() view returns(uint256 reportingBlockNumber, uint256 index, bytes32 merkleRoot, uint8 poolId, uint256 operatorETHRewards, uint256 userETHRewards, uint256 protocolETHRewards, uint256 operatorSDRewards) +func (_SocializingPool *SocializingPoolCaller) LastReportedRewardsData(opts *bind.CallOpts) (struct { + ReportingBlockNumber *big.Int + Index *big.Int + MerkleRoot [32]byte + PoolId uint8 + OperatorETHRewards *big.Int + UserETHRewards *big.Int + ProtocolETHRewards *big.Int + OperatorSDRewards *big.Int +}, error) { + var out []interface{} + err := _SocializingPool.contract.Call(opts, &out, "lastReportedRewardsData") + + outstruct := new(struct { + ReportingBlockNumber *big.Int + Index *big.Int + MerkleRoot [32]byte + PoolId uint8 + OperatorETHRewards *big.Int + UserETHRewards *big.Int + ProtocolETHRewards *big.Int + OperatorSDRewards *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.ReportingBlockNumber = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Index = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.MerkleRoot = *abi.ConvertType(out[2], new([32]byte)).(*[32]byte) + outstruct.PoolId = *abi.ConvertType(out[3], new(uint8)).(*uint8) + outstruct.OperatorETHRewards = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + outstruct.UserETHRewards = *abi.ConvertType(out[5], new(*big.Int)).(**big.Int) + outstruct.ProtocolETHRewards = *abi.ConvertType(out[6], new(*big.Int)).(**big.Int) + outstruct.OperatorSDRewards = *abi.ConvertType(out[7], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// LastReportedRewardsData is a free data retrieval call binding the contract method 0x251272e0. +// +// Solidity: function lastReportedRewardsData() view returns(uint256 reportingBlockNumber, uint256 index, bytes32 merkleRoot, uint8 poolId, uint256 operatorETHRewards, uint256 userETHRewards, uint256 protocolETHRewards, uint256 operatorSDRewards) +func (_SocializingPool *SocializingPoolSession) LastReportedRewardsData() (struct { + ReportingBlockNumber *big.Int + Index *big.Int + MerkleRoot [32]byte + PoolId uint8 + OperatorETHRewards *big.Int + UserETHRewards *big.Int + ProtocolETHRewards *big.Int + OperatorSDRewards *big.Int +}, error) { + return _SocializingPool.Contract.LastReportedRewardsData(&_SocializingPool.CallOpts) +} + +// LastReportedRewardsData is a free data retrieval call binding the contract method 0x251272e0. +// +// Solidity: function lastReportedRewardsData() view returns(uint256 reportingBlockNumber, uint256 index, bytes32 merkleRoot, uint8 poolId, uint256 operatorETHRewards, uint256 userETHRewards, uint256 protocolETHRewards, uint256 operatorSDRewards) +func (_SocializingPool *SocializingPoolCallerSession) LastReportedRewardsData() (struct { + ReportingBlockNumber *big.Int + Index *big.Int + MerkleRoot [32]byte + PoolId uint8 + OperatorETHRewards *big.Int + UserETHRewards *big.Int + ProtocolETHRewards *big.Int + OperatorSDRewards *big.Int +}, error) { + return _SocializingPool.Contract.LastReportedRewardsData(&_SocializingPool.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_SocializingPool *SocializingPoolCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _SocializingPool.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 (_SocializingPool *SocializingPoolSession) Paused() (bool, error) { + return _SocializingPool.Contract.Paused(&_SocializingPool.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_SocializingPool *SocializingPoolCallerSession) Paused() (bool, error) { + return _SocializingPool.Contract.Paused(&_SocializingPool.CallOpts) +} + +// RewardsDataMap is a free data retrieval call binding the contract method 0x4a321b79. +// +// Solidity: function rewardsDataMap(uint256 ) view returns(uint256 reportingBlockNumber, uint256 index, bytes32 merkleRoot, uint8 poolId, uint256 operatorETHRewards, uint256 userETHRewards, uint256 protocolETHRewards, uint256 operatorSDRewards) +func (_SocializingPool *SocializingPoolCaller) RewardsDataMap(opts *bind.CallOpts, arg0 *big.Int) (struct { + ReportingBlockNumber *big.Int + Index *big.Int + MerkleRoot [32]byte + PoolId uint8 + OperatorETHRewards *big.Int + UserETHRewards *big.Int + ProtocolETHRewards *big.Int + OperatorSDRewards *big.Int +}, error) { + var out []interface{} + err := _SocializingPool.contract.Call(opts, &out, "rewardsDataMap", arg0) + + outstruct := new(struct { + ReportingBlockNumber *big.Int + Index *big.Int + MerkleRoot [32]byte + PoolId uint8 + OperatorETHRewards *big.Int + UserETHRewards *big.Int + ProtocolETHRewards *big.Int + OperatorSDRewards *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.ReportingBlockNumber = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Index = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.MerkleRoot = *abi.ConvertType(out[2], new([32]byte)).(*[32]byte) + outstruct.PoolId = *abi.ConvertType(out[3], new(uint8)).(*uint8) + outstruct.OperatorETHRewards = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + outstruct.UserETHRewards = *abi.ConvertType(out[5], new(*big.Int)).(**big.Int) + outstruct.ProtocolETHRewards = *abi.ConvertType(out[6], new(*big.Int)).(**big.Int) + outstruct.OperatorSDRewards = *abi.ConvertType(out[7], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// RewardsDataMap is a free data retrieval call binding the contract method 0x4a321b79. +// +// Solidity: function rewardsDataMap(uint256 ) view returns(uint256 reportingBlockNumber, uint256 index, bytes32 merkleRoot, uint8 poolId, uint256 operatorETHRewards, uint256 userETHRewards, uint256 protocolETHRewards, uint256 operatorSDRewards) +func (_SocializingPool *SocializingPoolSession) RewardsDataMap(arg0 *big.Int) (struct { + ReportingBlockNumber *big.Int + Index *big.Int + MerkleRoot [32]byte + PoolId uint8 + OperatorETHRewards *big.Int + UserETHRewards *big.Int + ProtocolETHRewards *big.Int + OperatorSDRewards *big.Int +}, error) { + return _SocializingPool.Contract.RewardsDataMap(&_SocializingPool.CallOpts, arg0) +} + +// RewardsDataMap is a free data retrieval call binding the contract method 0x4a321b79. +// +// Solidity: function rewardsDataMap(uint256 ) view returns(uint256 reportingBlockNumber, uint256 index, bytes32 merkleRoot, uint8 poolId, uint256 operatorETHRewards, uint256 userETHRewards, uint256 protocolETHRewards, uint256 operatorSDRewards) +func (_SocializingPool *SocializingPoolCallerSession) RewardsDataMap(arg0 *big.Int) (struct { + ReportingBlockNumber *big.Int + Index *big.Int + MerkleRoot [32]byte + PoolId uint8 + OperatorETHRewards *big.Int + UserETHRewards *big.Int + ProtocolETHRewards *big.Int + OperatorSDRewards *big.Int +}, error) { + return _SocializingPool.Contract.RewardsDataMap(&_SocializingPool.CallOpts, arg0) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_SocializingPool *SocializingPoolCaller) StaderConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SocializingPool.contract.Call(opts, &out, "staderConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_SocializingPool *SocializingPoolSession) StaderConfig() (common.Address, error) { + return _SocializingPool.Contract.StaderConfig(&_SocializingPool.CallOpts) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_SocializingPool *SocializingPoolCallerSession) StaderConfig() (common.Address, error) { + return _SocializingPool.Contract.StaderConfig(&_SocializingPool.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_SocializingPool *SocializingPoolCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _SocializingPool.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 (_SocializingPool *SocializingPoolSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _SocializingPool.Contract.SupportsInterface(&_SocializingPool.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_SocializingPool *SocializingPoolCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _SocializingPool.Contract.SupportsInterface(&_SocializingPool.CallOpts, interfaceId) +} + +// TotalOperatorETHRewardsRemaining is a free data retrieval call binding the contract method 0xc8725d82. +// +// Solidity: function totalOperatorETHRewardsRemaining() view returns(uint256) +func (_SocializingPool *SocializingPoolCaller) TotalOperatorETHRewardsRemaining(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SocializingPool.contract.Call(opts, &out, "totalOperatorETHRewardsRemaining") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalOperatorETHRewardsRemaining is a free data retrieval call binding the contract method 0xc8725d82. +// +// Solidity: function totalOperatorETHRewardsRemaining() view returns(uint256) +func (_SocializingPool *SocializingPoolSession) TotalOperatorETHRewardsRemaining() (*big.Int, error) { + return _SocializingPool.Contract.TotalOperatorETHRewardsRemaining(&_SocializingPool.CallOpts) +} + +// TotalOperatorETHRewardsRemaining is a free data retrieval call binding the contract method 0xc8725d82. +// +// Solidity: function totalOperatorETHRewardsRemaining() view returns(uint256) +func (_SocializingPool *SocializingPoolCallerSession) TotalOperatorETHRewardsRemaining() (*big.Int, error) { + return _SocializingPool.Contract.TotalOperatorETHRewardsRemaining(&_SocializingPool.CallOpts) +} + +// TotalOperatorSDRewardsRemaining is a free data retrieval call binding the contract method 0x47675c9e. +// +// Solidity: function totalOperatorSDRewardsRemaining() view returns(uint256) +func (_SocializingPool *SocializingPoolCaller) TotalOperatorSDRewardsRemaining(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SocializingPool.contract.Call(opts, &out, "totalOperatorSDRewardsRemaining") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalOperatorSDRewardsRemaining is a free data retrieval call binding the contract method 0x47675c9e. +// +// Solidity: function totalOperatorSDRewardsRemaining() view returns(uint256) +func (_SocializingPool *SocializingPoolSession) TotalOperatorSDRewardsRemaining() (*big.Int, error) { + return _SocializingPool.Contract.TotalOperatorSDRewardsRemaining(&_SocializingPool.CallOpts) +} + +// TotalOperatorSDRewardsRemaining is a free data retrieval call binding the contract method 0x47675c9e. +// +// Solidity: function totalOperatorSDRewardsRemaining() view returns(uint256) +func (_SocializingPool *SocializingPoolCallerSession) TotalOperatorSDRewardsRemaining() (*big.Int, error) { + return _SocializingPool.Contract.TotalOperatorSDRewardsRemaining(&_SocializingPool.CallOpts) +} + +// VerifyProof is a free data retrieval call binding the contract method 0xfffbe459. +// +// Solidity: function verifyProof(uint256 _index, address _operator, uint256 _amountSD, uint256 _amountETH, bytes32[] _merkleProof) view returns(bool) +func (_SocializingPool *SocializingPoolCaller) VerifyProof(opts *bind.CallOpts, _index *big.Int, _operator common.Address, _amountSD *big.Int, _amountETH *big.Int, _merkleProof [][32]byte) (bool, error) { + var out []interface{} + err := _SocializingPool.contract.Call(opts, &out, "verifyProof", _index, _operator, _amountSD, _amountETH, _merkleProof) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// VerifyProof is a free data retrieval call binding the contract method 0xfffbe459. +// +// Solidity: function verifyProof(uint256 _index, address _operator, uint256 _amountSD, uint256 _amountETH, bytes32[] _merkleProof) view returns(bool) +func (_SocializingPool *SocializingPoolSession) VerifyProof(_index *big.Int, _operator common.Address, _amountSD *big.Int, _amountETH *big.Int, _merkleProof [][32]byte) (bool, error) { + return _SocializingPool.Contract.VerifyProof(&_SocializingPool.CallOpts, _index, _operator, _amountSD, _amountETH, _merkleProof) +} + +// VerifyProof is a free data retrieval call binding the contract method 0xfffbe459. +// +// Solidity: function verifyProof(uint256 _index, address _operator, uint256 _amountSD, uint256 _amountETH, bytes32[] _merkleProof) view returns(bool) +func (_SocializingPool *SocializingPoolCallerSession) VerifyProof(_index *big.Int, _operator common.Address, _amountSD *big.Int, _amountETH *big.Int, _merkleProof [][32]byte) (bool, error) { + return _SocializingPool.Contract.VerifyProof(&_SocializingPool.CallOpts, _index, _operator, _amountSD, _amountETH, _merkleProof) +} + +// Claim is a paid mutator transaction binding the contract method 0xd009b3d0. +// +// Solidity: function claim(uint256[] _index, uint256[] _amountSD, uint256[] _amountETH, bytes32[][] _merkleProof) returns() +func (_SocializingPool *SocializingPoolTransactor) Claim(opts *bind.TransactOpts, _index []*big.Int, _amountSD []*big.Int, _amountETH []*big.Int, _merkleProof [][][32]byte) (*types.Transaction, error) { + return _SocializingPool.contract.Transact(opts, "claim", _index, _amountSD, _amountETH, _merkleProof) +} + +// Claim is a paid mutator transaction binding the contract method 0xd009b3d0. +// +// Solidity: function claim(uint256[] _index, uint256[] _amountSD, uint256[] _amountETH, bytes32[][] _merkleProof) returns() +func (_SocializingPool *SocializingPoolSession) Claim(_index []*big.Int, _amountSD []*big.Int, _amountETH []*big.Int, _merkleProof [][][32]byte) (*types.Transaction, error) { + return _SocializingPool.Contract.Claim(&_SocializingPool.TransactOpts, _index, _amountSD, _amountETH, _merkleProof) +} + +// Claim is a paid mutator transaction binding the contract method 0xd009b3d0. +// +// Solidity: function claim(uint256[] _index, uint256[] _amountSD, uint256[] _amountETH, bytes32[][] _merkleProof) returns() +func (_SocializingPool *SocializingPoolTransactorSession) Claim(_index []*big.Int, _amountSD []*big.Int, _amountETH []*big.Int, _merkleProof [][][32]byte) (*types.Transaction, error) { + return _SocializingPool.Contract.Claim(&_SocializingPool.TransactOpts, _index, _amountSD, _amountETH, _merkleProof) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_SocializingPool *SocializingPoolTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _SocializingPool.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_SocializingPool *SocializingPoolSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _SocializingPool.Contract.GrantRole(&_SocializingPool.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_SocializingPool *SocializingPoolTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _SocializingPool.Contract.GrantRole(&_SocializingPool.TransactOpts, role, account) +} + +// HandleRewards is a paid mutator transaction binding the contract method 0x0d83e4ed. +// +// Solidity: function handleRewards((uint256,uint256,bytes32,uint8,uint256,uint256,uint256,uint256) _rewardsData) returns() +func (_SocializingPool *SocializingPoolTransactor) HandleRewards(opts *bind.TransactOpts, _rewardsData RewardsData) (*types.Transaction, error) { + return _SocializingPool.contract.Transact(opts, "handleRewards", _rewardsData) +} + +// HandleRewards is a paid mutator transaction binding the contract method 0x0d83e4ed. +// +// Solidity: function handleRewards((uint256,uint256,bytes32,uint8,uint256,uint256,uint256,uint256) _rewardsData) returns() +func (_SocializingPool *SocializingPoolSession) HandleRewards(_rewardsData RewardsData) (*types.Transaction, error) { + return _SocializingPool.Contract.HandleRewards(&_SocializingPool.TransactOpts, _rewardsData) +} + +// HandleRewards is a paid mutator transaction binding the contract method 0x0d83e4ed. +// +// Solidity: function handleRewards((uint256,uint256,bytes32,uint8,uint256,uint256,uint256,uint256) _rewardsData) returns() +func (_SocializingPool *SocializingPoolTransactorSession) HandleRewards(_rewardsData RewardsData) (*types.Transaction, error) { + return _SocializingPool.Contract.HandleRewards(&_SocializingPool.TransactOpts, _rewardsData) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_SocializingPool *SocializingPoolTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SocializingPool.contract.Transact(opts, "pause") +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_SocializingPool *SocializingPoolSession) Pause() (*types.Transaction, error) { + return _SocializingPool.Contract.Pause(&_SocializingPool.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_SocializingPool *SocializingPoolTransactorSession) Pause() (*types.Transaction, error) { + return _SocializingPool.Contract.Pause(&_SocializingPool.TransactOpts) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_SocializingPool *SocializingPoolTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _SocializingPool.contract.Transact(opts, "renounceRole", role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_SocializingPool *SocializingPoolSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _SocializingPool.Contract.RenounceRole(&_SocializingPool.TransactOpts, role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_SocializingPool *SocializingPoolTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _SocializingPool.Contract.RenounceRole(&_SocializingPool.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_SocializingPool *SocializingPoolTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _SocializingPool.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_SocializingPool *SocializingPoolSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _SocializingPool.Contract.RevokeRole(&_SocializingPool.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_SocializingPool *SocializingPoolTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _SocializingPool.Contract.RevokeRole(&_SocializingPool.TransactOpts, role, account) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_SocializingPool *SocializingPoolTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SocializingPool.contract.Transact(opts, "unpause") +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_SocializingPool *SocializingPoolSession) Unpause() (*types.Transaction, error) { + return _SocializingPool.Contract.Unpause(&_SocializingPool.TransactOpts) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_SocializingPool *SocializingPoolTransactorSession) Unpause() (*types.Transaction, error) { + return _SocializingPool.Contract.Unpause(&_SocializingPool.TransactOpts) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_SocializingPool *SocializingPoolTransactor) UpdateStaderConfig(opts *bind.TransactOpts, _staderConfig common.Address) (*types.Transaction, error) { + return _SocializingPool.contract.Transact(opts, "updateStaderConfig", _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_SocializingPool *SocializingPoolSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _SocializingPool.Contract.UpdateStaderConfig(&_SocializingPool.TransactOpts, _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_SocializingPool *SocializingPoolTransactorSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _SocializingPool.Contract.UpdateStaderConfig(&_SocializingPool.TransactOpts, _staderConfig) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_SocializingPool *SocializingPoolTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SocializingPool.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 (_SocializingPool *SocializingPoolSession) Receive() (*types.Transaction, error) { + return _SocializingPool.Contract.Receive(&_SocializingPool.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_SocializingPool *SocializingPoolTransactorSession) Receive() (*types.Transaction, error) { + return _SocializingPool.Contract.Receive(&_SocializingPool.TransactOpts) +} + +// SocializingPoolETHReceivedIterator is returned from FilterETHReceived and is used to iterate over the raw logs and unpacked data for ETHReceived events raised by the SocializingPool contract. +type SocializingPoolETHReceivedIterator struct { + Event *SocializingPoolETHReceived // 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 *SocializingPoolETHReceivedIterator) 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(SocializingPoolETHReceived) + if err := 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(SocializingPoolETHReceived) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SocializingPoolETHReceivedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SocializingPoolETHReceivedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SocializingPoolETHReceived represents a ETHReceived event raised by the SocializingPool contract. +type SocializingPoolETHReceived struct { + Sender common.Address + Amount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterETHReceived is a free log retrieval operation binding the contract event 0xbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a. +// +// Solidity: event ETHReceived(address indexed sender, uint256 amount) +func (_SocializingPool *SocializingPoolFilterer) FilterETHReceived(opts *bind.FilterOpts, sender []common.Address) (*SocializingPoolETHReceivedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _SocializingPool.contract.FilterLogs(opts, "ETHReceived", senderRule) + if err != nil { + return nil, err + } + return &SocializingPoolETHReceivedIterator{contract: _SocializingPool.contract, event: "ETHReceived", logs: logs, sub: sub}, nil +} + +// WatchETHReceived is a free log subscription operation binding the contract event 0xbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a. +// +// Solidity: event ETHReceived(address indexed sender, uint256 amount) +func (_SocializingPool *SocializingPoolFilterer) WatchETHReceived(opts *bind.WatchOpts, sink chan<- *SocializingPoolETHReceived, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _SocializingPool.contract.WatchLogs(opts, "ETHReceived", 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(SocializingPoolETHReceived) + if err := _SocializingPool.contract.UnpackLog(event, "ETHReceived", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseETHReceived is a log parse operation binding the contract event 0xbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a. +// +// Solidity: event ETHReceived(address indexed sender, uint256 amount) +func (_SocializingPool *SocializingPoolFilterer) ParseETHReceived(log types.Log) (*SocializingPoolETHReceived, error) { + event := new(SocializingPoolETHReceived) + if err := _SocializingPool.contract.UnpackLog(event, "ETHReceived", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SocializingPoolInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the SocializingPool contract. +type SocializingPoolInitializedIterator struct { + Event *SocializingPoolInitialized // 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 *SocializingPoolInitializedIterator) 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(SocializingPoolInitialized) + if err := 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(SocializingPoolInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SocializingPoolInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SocializingPoolInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SocializingPoolInitialized represents a Initialized event raised by the SocializingPool contract. +type SocializingPoolInitialized 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 (_SocializingPool *SocializingPoolFilterer) FilterInitialized(opts *bind.FilterOpts) (*SocializingPoolInitializedIterator, error) { + + logs, sub, err := _SocializingPool.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &SocializingPoolInitializedIterator{contract: _SocializingPool.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 (_SocializingPool *SocializingPoolFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *SocializingPoolInitialized) (event.Subscription, error) { + + logs, sub, err := _SocializingPool.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(SocializingPoolInitialized) + if err := _SocializingPool.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 (_SocializingPool *SocializingPoolFilterer) ParseInitialized(log types.Log) (*SocializingPoolInitialized, error) { + event := new(SocializingPoolInitialized) + if err := _SocializingPool.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SocializingPoolOperatorRewardsClaimedIterator is returned from FilterOperatorRewardsClaimed and is used to iterate over the raw logs and unpacked data for OperatorRewardsClaimed events raised by the SocializingPool contract. +type SocializingPoolOperatorRewardsClaimedIterator struct { + Event *SocializingPoolOperatorRewardsClaimed // 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 *SocializingPoolOperatorRewardsClaimedIterator) 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(SocializingPoolOperatorRewardsClaimed) + if err := 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(SocializingPoolOperatorRewardsClaimed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SocializingPoolOperatorRewardsClaimedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SocializingPoolOperatorRewardsClaimedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SocializingPoolOperatorRewardsClaimed represents a OperatorRewardsClaimed event raised by the SocializingPool contract. +type SocializingPoolOperatorRewardsClaimed struct { + Recipient common.Address + EthRewards *big.Int + SdRewards *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorRewardsClaimed is a free log retrieval operation binding the contract event 0x62bc6d6d870f047ea4dd686d08bfda93e24cac6b8dae0d740f6fa33071f3f0af. +// +// Solidity: event OperatorRewardsClaimed(address indexed recipient, uint256 ethRewards, uint256 sdRewards) +func (_SocializingPool *SocializingPoolFilterer) FilterOperatorRewardsClaimed(opts *bind.FilterOpts, recipient []common.Address) (*SocializingPoolOperatorRewardsClaimedIterator, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _SocializingPool.contract.FilterLogs(opts, "OperatorRewardsClaimed", recipientRule) + if err != nil { + return nil, err + } + return &SocializingPoolOperatorRewardsClaimedIterator{contract: _SocializingPool.contract, event: "OperatorRewardsClaimed", logs: logs, sub: sub}, nil +} + +// WatchOperatorRewardsClaimed is a free log subscription operation binding the contract event 0x62bc6d6d870f047ea4dd686d08bfda93e24cac6b8dae0d740f6fa33071f3f0af. +// +// Solidity: event OperatorRewardsClaimed(address indexed recipient, uint256 ethRewards, uint256 sdRewards) +func (_SocializingPool *SocializingPoolFilterer) WatchOperatorRewardsClaimed(opts *bind.WatchOpts, sink chan<- *SocializingPoolOperatorRewardsClaimed, recipient []common.Address) (event.Subscription, error) { + + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _SocializingPool.contract.WatchLogs(opts, "OperatorRewardsClaimed", recipientRule) + 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(SocializingPoolOperatorRewardsClaimed) + if err := _SocializingPool.contract.UnpackLog(event, "OperatorRewardsClaimed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorRewardsClaimed is a log parse operation binding the contract event 0x62bc6d6d870f047ea4dd686d08bfda93e24cac6b8dae0d740f6fa33071f3f0af. +// +// Solidity: event OperatorRewardsClaimed(address indexed recipient, uint256 ethRewards, uint256 sdRewards) +func (_SocializingPool *SocializingPoolFilterer) ParseOperatorRewardsClaimed(log types.Log) (*SocializingPoolOperatorRewardsClaimed, error) { + event := new(SocializingPoolOperatorRewardsClaimed) + if err := _SocializingPool.contract.UnpackLog(event, "OperatorRewardsClaimed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SocializingPoolOperatorRewardsUpdatedIterator is returned from FilterOperatorRewardsUpdated and is used to iterate over the raw logs and unpacked data for OperatorRewardsUpdated events raised by the SocializingPool contract. +type SocializingPoolOperatorRewardsUpdatedIterator struct { + Event *SocializingPoolOperatorRewardsUpdated // 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 *SocializingPoolOperatorRewardsUpdatedIterator) 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(SocializingPoolOperatorRewardsUpdated) + if err := 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(SocializingPoolOperatorRewardsUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SocializingPoolOperatorRewardsUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SocializingPoolOperatorRewardsUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SocializingPoolOperatorRewardsUpdated represents a OperatorRewardsUpdated event raised by the SocializingPool contract. +type SocializingPoolOperatorRewardsUpdated struct { + EthRewards *big.Int + TotalETHRewards *big.Int + SdRewards *big.Int + TotalSDRewards *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorRewardsUpdated is a free log retrieval operation binding the contract event 0x0e357ad2594fa2d9d8c6dc7c280141cc1b89ba4c9714a96fd3f409f4fded31d0. +// +// Solidity: event OperatorRewardsUpdated(uint256 ethRewards, uint256 totalETHRewards, uint256 sdRewards, uint256 totalSDRewards) +func (_SocializingPool *SocializingPoolFilterer) FilterOperatorRewardsUpdated(opts *bind.FilterOpts) (*SocializingPoolOperatorRewardsUpdatedIterator, error) { + + logs, sub, err := _SocializingPool.contract.FilterLogs(opts, "OperatorRewardsUpdated") + if err != nil { + return nil, err + } + return &SocializingPoolOperatorRewardsUpdatedIterator{contract: _SocializingPool.contract, event: "OperatorRewardsUpdated", logs: logs, sub: sub}, nil +} + +// WatchOperatorRewardsUpdated is a free log subscription operation binding the contract event 0x0e357ad2594fa2d9d8c6dc7c280141cc1b89ba4c9714a96fd3f409f4fded31d0. +// +// Solidity: event OperatorRewardsUpdated(uint256 ethRewards, uint256 totalETHRewards, uint256 sdRewards, uint256 totalSDRewards) +func (_SocializingPool *SocializingPoolFilterer) WatchOperatorRewardsUpdated(opts *bind.WatchOpts, sink chan<- *SocializingPoolOperatorRewardsUpdated) (event.Subscription, error) { + + logs, sub, err := _SocializingPool.contract.WatchLogs(opts, "OperatorRewardsUpdated") + 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(SocializingPoolOperatorRewardsUpdated) + if err := _SocializingPool.contract.UnpackLog(event, "OperatorRewardsUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOperatorRewardsUpdated is a log parse operation binding the contract event 0x0e357ad2594fa2d9d8c6dc7c280141cc1b89ba4c9714a96fd3f409f4fded31d0. +// +// Solidity: event OperatorRewardsUpdated(uint256 ethRewards, uint256 totalETHRewards, uint256 sdRewards, uint256 totalSDRewards) +func (_SocializingPool *SocializingPoolFilterer) ParseOperatorRewardsUpdated(log types.Log) (*SocializingPoolOperatorRewardsUpdated, error) { + event := new(SocializingPoolOperatorRewardsUpdated) + if err := _SocializingPool.contract.UnpackLog(event, "OperatorRewardsUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SocializingPoolPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the SocializingPool contract. +type SocializingPoolPausedIterator struct { + Event *SocializingPoolPaused // 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 *SocializingPoolPausedIterator) 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(SocializingPoolPaused) + if err := 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(SocializingPoolPaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SocializingPoolPausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SocializingPoolPausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SocializingPoolPaused represents a Paused event raised by the SocializingPool contract. +type SocializingPoolPaused 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 (_SocializingPool *SocializingPoolFilterer) FilterPaused(opts *bind.FilterOpts) (*SocializingPoolPausedIterator, error) { + + logs, sub, err := _SocializingPool.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return &SocializingPoolPausedIterator{contract: _SocializingPool.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 (_SocializingPool *SocializingPoolFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *SocializingPoolPaused) (event.Subscription, error) { + + logs, sub, err := _SocializingPool.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(SocializingPoolPaused) + if err := _SocializingPool.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 (_SocializingPool *SocializingPoolFilterer) ParsePaused(log types.Log) (*SocializingPoolPaused, error) { + event := new(SocializingPoolPaused) + if err := _SocializingPool.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SocializingPoolProtocolETHRewardsTransferredIterator is returned from FilterProtocolETHRewardsTransferred and is used to iterate over the raw logs and unpacked data for ProtocolETHRewardsTransferred events raised by the SocializingPool contract. +type SocializingPoolProtocolETHRewardsTransferredIterator struct { + Event *SocializingPoolProtocolETHRewardsTransferred // 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 *SocializingPoolProtocolETHRewardsTransferredIterator) 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(SocializingPoolProtocolETHRewardsTransferred) + if err := 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(SocializingPoolProtocolETHRewardsTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SocializingPoolProtocolETHRewardsTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SocializingPoolProtocolETHRewardsTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SocializingPoolProtocolETHRewardsTransferred represents a ProtocolETHRewardsTransferred event raised by the SocializingPool contract. +type SocializingPoolProtocolETHRewardsTransferred struct { + EthRewards *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterProtocolETHRewardsTransferred is a free log retrieval operation binding the contract event 0x292921846cb4d7dd20ae1c60a15192efacaaa30028f2043998f925c6c10a8150. +// +// Solidity: event ProtocolETHRewardsTransferred(uint256 ethRewards) +func (_SocializingPool *SocializingPoolFilterer) FilterProtocolETHRewardsTransferred(opts *bind.FilterOpts) (*SocializingPoolProtocolETHRewardsTransferredIterator, error) { + + logs, sub, err := _SocializingPool.contract.FilterLogs(opts, "ProtocolETHRewardsTransferred") + if err != nil { + return nil, err + } + return &SocializingPoolProtocolETHRewardsTransferredIterator{contract: _SocializingPool.contract, event: "ProtocolETHRewardsTransferred", logs: logs, sub: sub}, nil +} + +// WatchProtocolETHRewardsTransferred is a free log subscription operation binding the contract event 0x292921846cb4d7dd20ae1c60a15192efacaaa30028f2043998f925c6c10a8150. +// +// Solidity: event ProtocolETHRewardsTransferred(uint256 ethRewards) +func (_SocializingPool *SocializingPoolFilterer) WatchProtocolETHRewardsTransferred(opts *bind.WatchOpts, sink chan<- *SocializingPoolProtocolETHRewardsTransferred) (event.Subscription, error) { + + logs, sub, err := _SocializingPool.contract.WatchLogs(opts, "ProtocolETHRewardsTransferred") + 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(SocializingPoolProtocolETHRewardsTransferred) + if err := _SocializingPool.contract.UnpackLog(event, "ProtocolETHRewardsTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseProtocolETHRewardsTransferred is a log parse operation binding the contract event 0x292921846cb4d7dd20ae1c60a15192efacaaa30028f2043998f925c6c10a8150. +// +// Solidity: event ProtocolETHRewardsTransferred(uint256 ethRewards) +func (_SocializingPool *SocializingPoolFilterer) ParseProtocolETHRewardsTransferred(log types.Log) (*SocializingPoolProtocolETHRewardsTransferred, error) { + event := new(SocializingPoolProtocolETHRewardsTransferred) + if err := _SocializingPool.contract.UnpackLog(event, "ProtocolETHRewardsTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SocializingPoolRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the SocializingPool contract. +type SocializingPoolRoleAdminChangedIterator struct { + Event *SocializingPoolRoleAdminChanged // 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 *SocializingPoolRoleAdminChangedIterator) 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(SocializingPoolRoleAdminChanged) + if err := 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(SocializingPoolRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SocializingPoolRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SocializingPoolRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SocializingPoolRoleAdminChanged represents a RoleAdminChanged event raised by the SocializingPool contract. +type SocializingPoolRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_SocializingPool *SocializingPoolFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*SocializingPoolRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _SocializingPool.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &SocializingPoolRoleAdminChangedIterator{contract: _SocializingPool.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_SocializingPool *SocializingPoolFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *SocializingPoolRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _SocializingPool.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(SocializingPoolRoleAdminChanged) + if err := _SocializingPool.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_SocializingPool *SocializingPoolFilterer) ParseRoleAdminChanged(log types.Log) (*SocializingPoolRoleAdminChanged, error) { + event := new(SocializingPoolRoleAdminChanged) + if err := _SocializingPool.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SocializingPoolRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the SocializingPool contract. +type SocializingPoolRoleGrantedIterator struct { + Event *SocializingPoolRoleGranted // 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 *SocializingPoolRoleGrantedIterator) 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(SocializingPoolRoleGranted) + if err := 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(SocializingPoolRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SocializingPoolRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SocializingPoolRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SocializingPoolRoleGranted represents a RoleGranted event raised by the SocializingPool contract. +type SocializingPoolRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_SocializingPool *SocializingPoolFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*SocializingPoolRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _SocializingPool.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &SocializingPoolRoleGrantedIterator{contract: _SocializingPool.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_SocializingPool *SocializingPoolFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *SocializingPoolRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _SocializingPool.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, 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(SocializingPoolRoleGranted) + if err := _SocializingPool.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_SocializingPool *SocializingPoolFilterer) ParseRoleGranted(log types.Log) (*SocializingPoolRoleGranted, error) { + event := new(SocializingPoolRoleGranted) + if err := _SocializingPool.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SocializingPoolRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the SocializingPool contract. +type SocializingPoolRoleRevokedIterator struct { + Event *SocializingPoolRoleRevoked // 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 *SocializingPoolRoleRevokedIterator) 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(SocializingPoolRoleRevoked) + if err := 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(SocializingPoolRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SocializingPoolRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SocializingPoolRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SocializingPoolRoleRevoked represents a RoleRevoked event raised by the SocializingPool contract. +type SocializingPoolRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_SocializingPool *SocializingPoolFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*SocializingPoolRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _SocializingPool.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &SocializingPoolRoleRevokedIterator{contract: _SocializingPool.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_SocializingPool *SocializingPoolFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *SocializingPoolRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _SocializingPool.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, 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(SocializingPoolRoleRevoked) + if err := _SocializingPool.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_SocializingPool *SocializingPoolFilterer) ParseRoleRevoked(log types.Log) (*SocializingPoolRoleRevoked, error) { + event := new(SocializingPoolRoleRevoked) + if err := _SocializingPool.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SocializingPoolUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the SocializingPool contract. +type SocializingPoolUnpausedIterator struct { + Event *SocializingPoolUnpaused // 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 *SocializingPoolUnpausedIterator) 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(SocializingPoolUnpaused) + if err := 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(SocializingPoolUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SocializingPoolUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SocializingPoolUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SocializingPoolUnpaused represents a Unpaused event raised by the SocializingPool contract. +type SocializingPoolUnpaused 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 (_SocializingPool *SocializingPoolFilterer) FilterUnpaused(opts *bind.FilterOpts) (*SocializingPoolUnpausedIterator, error) { + + logs, sub, err := _SocializingPool.contract.FilterLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return &SocializingPoolUnpausedIterator{contract: _SocializingPool.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 (_SocializingPool *SocializingPoolFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *SocializingPoolUnpaused) (event.Subscription, error) { + + logs, sub, err := _SocializingPool.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(SocializingPoolUnpaused) + if err := _SocializingPool.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 (_SocializingPool *SocializingPoolFilterer) ParseUnpaused(log types.Log) (*SocializingPoolUnpaused, error) { + event := new(SocializingPoolUnpaused) + if err := _SocializingPool.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SocializingPoolUpdatedStaderConfigIterator is returned from FilterUpdatedStaderConfig and is used to iterate over the raw logs and unpacked data for UpdatedStaderConfig events raised by the SocializingPool contract. +type SocializingPoolUpdatedStaderConfigIterator struct { + Event *SocializingPoolUpdatedStaderConfig // 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 *SocializingPoolUpdatedStaderConfigIterator) 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(SocializingPoolUpdatedStaderConfig) + if err := 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(SocializingPoolUpdatedStaderConfig) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SocializingPoolUpdatedStaderConfigIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SocializingPoolUpdatedStaderConfigIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SocializingPoolUpdatedStaderConfig represents a UpdatedStaderConfig event raised by the SocializingPool contract. +type SocializingPoolUpdatedStaderConfig struct { + StaderConfig common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedStaderConfig is a free log retrieval operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address indexed staderConfig) +func (_SocializingPool *SocializingPoolFilterer) FilterUpdatedStaderConfig(opts *bind.FilterOpts, staderConfig []common.Address) (*SocializingPoolUpdatedStaderConfigIterator, error) { + + var staderConfigRule []interface{} + for _, staderConfigItem := range staderConfig { + staderConfigRule = append(staderConfigRule, staderConfigItem) + } + + logs, sub, err := _SocializingPool.contract.FilterLogs(opts, "UpdatedStaderConfig", staderConfigRule) + if err != nil { + return nil, err + } + return &SocializingPoolUpdatedStaderConfigIterator{contract: _SocializingPool.contract, event: "UpdatedStaderConfig", logs: logs, sub: sub}, nil +} + +// WatchUpdatedStaderConfig is a free log subscription operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address indexed staderConfig) +func (_SocializingPool *SocializingPoolFilterer) WatchUpdatedStaderConfig(opts *bind.WatchOpts, sink chan<- *SocializingPoolUpdatedStaderConfig, staderConfig []common.Address) (event.Subscription, error) { + + var staderConfigRule []interface{} + for _, staderConfigItem := range staderConfig { + staderConfigRule = append(staderConfigRule, staderConfigItem) + } + + logs, sub, err := _SocializingPool.contract.WatchLogs(opts, "UpdatedStaderConfig", staderConfigRule) + 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(SocializingPoolUpdatedStaderConfig) + if err := _SocializingPool.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedStaderConfig is a log parse operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address indexed staderConfig) +func (_SocializingPool *SocializingPoolFilterer) ParseUpdatedStaderConfig(log types.Log) (*SocializingPoolUpdatedStaderConfig, error) { + event := new(SocializingPoolUpdatedStaderConfig) + if err := _SocializingPool.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SocializingPoolUpdatedStaderOperatorRegistryIterator is returned from FilterUpdatedStaderOperatorRegistry and is used to iterate over the raw logs and unpacked data for UpdatedStaderOperatorRegistry events raised by the SocializingPool contract. +type SocializingPoolUpdatedStaderOperatorRegistryIterator struct { + Event *SocializingPoolUpdatedStaderOperatorRegistry // 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 *SocializingPoolUpdatedStaderOperatorRegistryIterator) 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(SocializingPoolUpdatedStaderOperatorRegistry) + if err := 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(SocializingPoolUpdatedStaderOperatorRegistry) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SocializingPoolUpdatedStaderOperatorRegistryIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SocializingPoolUpdatedStaderOperatorRegistryIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SocializingPoolUpdatedStaderOperatorRegistry represents a UpdatedStaderOperatorRegistry event raised by the SocializingPool contract. +type SocializingPoolUpdatedStaderOperatorRegistry struct { + StaderOperatorRegistry common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedStaderOperatorRegistry is a free log retrieval operation binding the contract event 0x9ea3d4ab5ce0102a316617bb8bbf02dbb10d19c7f7fd9903efd2e136658ebefb. +// +// Solidity: event UpdatedStaderOperatorRegistry(address indexed staderOperatorRegistry) +func (_SocializingPool *SocializingPoolFilterer) FilterUpdatedStaderOperatorRegistry(opts *bind.FilterOpts, staderOperatorRegistry []common.Address) (*SocializingPoolUpdatedStaderOperatorRegistryIterator, error) { + + var staderOperatorRegistryRule []interface{} + for _, staderOperatorRegistryItem := range staderOperatorRegistry { + staderOperatorRegistryRule = append(staderOperatorRegistryRule, staderOperatorRegistryItem) + } + + logs, sub, err := _SocializingPool.contract.FilterLogs(opts, "UpdatedStaderOperatorRegistry", staderOperatorRegistryRule) + if err != nil { + return nil, err + } + return &SocializingPoolUpdatedStaderOperatorRegistryIterator{contract: _SocializingPool.contract, event: "UpdatedStaderOperatorRegistry", logs: logs, sub: sub}, nil +} + +// WatchUpdatedStaderOperatorRegistry is a free log subscription operation binding the contract event 0x9ea3d4ab5ce0102a316617bb8bbf02dbb10d19c7f7fd9903efd2e136658ebefb. +// +// Solidity: event UpdatedStaderOperatorRegistry(address indexed staderOperatorRegistry) +func (_SocializingPool *SocializingPoolFilterer) WatchUpdatedStaderOperatorRegistry(opts *bind.WatchOpts, sink chan<- *SocializingPoolUpdatedStaderOperatorRegistry, staderOperatorRegistry []common.Address) (event.Subscription, error) { + + var staderOperatorRegistryRule []interface{} + for _, staderOperatorRegistryItem := range staderOperatorRegistry { + staderOperatorRegistryRule = append(staderOperatorRegistryRule, staderOperatorRegistryItem) + } + + logs, sub, err := _SocializingPool.contract.WatchLogs(opts, "UpdatedStaderOperatorRegistry", staderOperatorRegistryRule) + 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(SocializingPoolUpdatedStaderOperatorRegistry) + if err := _SocializingPool.contract.UnpackLog(event, "UpdatedStaderOperatorRegistry", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedStaderOperatorRegistry is a log parse operation binding the contract event 0x9ea3d4ab5ce0102a316617bb8bbf02dbb10d19c7f7fd9903efd2e136658ebefb. +// +// Solidity: event UpdatedStaderOperatorRegistry(address indexed staderOperatorRegistry) +func (_SocializingPool *SocializingPoolFilterer) ParseUpdatedStaderOperatorRegistry(log types.Log) (*SocializingPoolUpdatedStaderOperatorRegistry, error) { + event := new(SocializingPoolUpdatedStaderOperatorRegistry) + if err := _SocializingPool.contract.UnpackLog(event, "UpdatedStaderOperatorRegistry", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SocializingPoolUpdatedStaderValidatorRegistryIterator is returned from FilterUpdatedStaderValidatorRegistry and is used to iterate over the raw logs and unpacked data for UpdatedStaderValidatorRegistry events raised by the SocializingPool contract. +type SocializingPoolUpdatedStaderValidatorRegistryIterator struct { + Event *SocializingPoolUpdatedStaderValidatorRegistry // 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 *SocializingPoolUpdatedStaderValidatorRegistryIterator) 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(SocializingPoolUpdatedStaderValidatorRegistry) + if err := 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(SocializingPoolUpdatedStaderValidatorRegistry) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SocializingPoolUpdatedStaderValidatorRegistryIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SocializingPoolUpdatedStaderValidatorRegistryIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SocializingPoolUpdatedStaderValidatorRegistry represents a UpdatedStaderValidatorRegistry event raised by the SocializingPool contract. +type SocializingPoolUpdatedStaderValidatorRegistry struct { + StaderValidatorRegistry common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedStaderValidatorRegistry is a free log retrieval operation binding the contract event 0xf583e0ea5b9579df6531ea89b81be75889dde9f34d35e2402ca38e93c0b5db0a. +// +// Solidity: event UpdatedStaderValidatorRegistry(address indexed staderValidatorRegistry) +func (_SocializingPool *SocializingPoolFilterer) FilterUpdatedStaderValidatorRegistry(opts *bind.FilterOpts, staderValidatorRegistry []common.Address) (*SocializingPoolUpdatedStaderValidatorRegistryIterator, error) { + + var staderValidatorRegistryRule []interface{} + for _, staderValidatorRegistryItem := range staderValidatorRegistry { + staderValidatorRegistryRule = append(staderValidatorRegistryRule, staderValidatorRegistryItem) + } + + logs, sub, err := _SocializingPool.contract.FilterLogs(opts, "UpdatedStaderValidatorRegistry", staderValidatorRegistryRule) + if err != nil { + return nil, err + } + return &SocializingPoolUpdatedStaderValidatorRegistryIterator{contract: _SocializingPool.contract, event: "UpdatedStaderValidatorRegistry", logs: logs, sub: sub}, nil +} + +// WatchUpdatedStaderValidatorRegistry is a free log subscription operation binding the contract event 0xf583e0ea5b9579df6531ea89b81be75889dde9f34d35e2402ca38e93c0b5db0a. +// +// Solidity: event UpdatedStaderValidatorRegistry(address indexed staderValidatorRegistry) +func (_SocializingPool *SocializingPoolFilterer) WatchUpdatedStaderValidatorRegistry(opts *bind.WatchOpts, sink chan<- *SocializingPoolUpdatedStaderValidatorRegistry, staderValidatorRegistry []common.Address) (event.Subscription, error) { + + var staderValidatorRegistryRule []interface{} + for _, staderValidatorRegistryItem := range staderValidatorRegistry { + staderValidatorRegistryRule = append(staderValidatorRegistryRule, staderValidatorRegistryItem) + } + + logs, sub, err := _SocializingPool.contract.WatchLogs(opts, "UpdatedStaderValidatorRegistry", staderValidatorRegistryRule) + 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(SocializingPoolUpdatedStaderValidatorRegistry) + if err := _SocializingPool.contract.UnpackLog(event, "UpdatedStaderValidatorRegistry", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedStaderValidatorRegistry is a log parse operation binding the contract event 0xf583e0ea5b9579df6531ea89b81be75889dde9f34d35e2402ca38e93c0b5db0a. +// +// Solidity: event UpdatedStaderValidatorRegistry(address indexed staderValidatorRegistry) +func (_SocializingPool *SocializingPoolFilterer) ParseUpdatedStaderValidatorRegistry(log types.Log) (*SocializingPoolUpdatedStaderValidatorRegistry, error) { + event := new(SocializingPoolUpdatedStaderValidatorRegistry) + if err := _SocializingPool.contract.UnpackLog(event, "UpdatedStaderValidatorRegistry", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SocializingPoolUserETHRewardsTransferredIterator is returned from FilterUserETHRewardsTransferred and is used to iterate over the raw logs and unpacked data for UserETHRewardsTransferred events raised by the SocializingPool contract. +type SocializingPoolUserETHRewardsTransferredIterator struct { + Event *SocializingPoolUserETHRewardsTransferred // 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 *SocializingPoolUserETHRewardsTransferredIterator) 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(SocializingPoolUserETHRewardsTransferred) + if err := 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(SocializingPoolUserETHRewardsTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SocializingPoolUserETHRewardsTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SocializingPoolUserETHRewardsTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SocializingPoolUserETHRewardsTransferred represents a UserETHRewardsTransferred event raised by the SocializingPool contract. +type SocializingPoolUserETHRewardsTransferred struct { + EthRewards *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUserETHRewardsTransferred is a free log retrieval operation binding the contract event 0x7083eaccdb1f2834d37a767b05f3b72d54217404ee1cb70aa1b774e4e8a02dda. +// +// Solidity: event UserETHRewardsTransferred(uint256 ethRewards) +func (_SocializingPool *SocializingPoolFilterer) FilterUserETHRewardsTransferred(opts *bind.FilterOpts) (*SocializingPoolUserETHRewardsTransferredIterator, error) { + + logs, sub, err := _SocializingPool.contract.FilterLogs(opts, "UserETHRewardsTransferred") + if err != nil { + return nil, err + } + return &SocializingPoolUserETHRewardsTransferredIterator{contract: _SocializingPool.contract, event: "UserETHRewardsTransferred", logs: logs, sub: sub}, nil +} + +// WatchUserETHRewardsTransferred is a free log subscription operation binding the contract event 0x7083eaccdb1f2834d37a767b05f3b72d54217404ee1cb70aa1b774e4e8a02dda. +// +// Solidity: event UserETHRewardsTransferred(uint256 ethRewards) +func (_SocializingPool *SocializingPoolFilterer) WatchUserETHRewardsTransferred(opts *bind.WatchOpts, sink chan<- *SocializingPoolUserETHRewardsTransferred) (event.Subscription, error) { + + logs, sub, err := _SocializingPool.contract.WatchLogs(opts, "UserETHRewardsTransferred") + 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(SocializingPoolUserETHRewardsTransferred) + if err := _SocializingPool.contract.UnpackLog(event, "UserETHRewardsTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUserETHRewardsTransferred is a log parse operation binding the contract event 0x7083eaccdb1f2834d37a767b05f3b72d54217404ee1cb70aa1b774e4e8a02dda. +// +// Solidity: event UserETHRewardsTransferred(uint256 ethRewards) +func (_SocializingPool *SocializingPoolFilterer) ParseUserETHRewardsTransferred(log types.Log) (*SocializingPoolUserETHRewardsTransferred, error) { + event := new(SocializingPoolUserETHRewardsTransferred) + if err := _SocializingPool.contract.UnpackLog(event, "UserETHRewardsTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/testing/contracts/VaultProxy.go b/testing/contracts/VaultProxy.go new file mode 100644 index 000000000..5586f8416 --- /dev/null +++ b/testing/contracts/VaultProxy.go @@ -0,0 +1,751 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contracts + +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 +) + +// VaultProxyMetaData contains all meta data concerning the VaultProxy contract. +var VaultProxyMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_isValidatorWithdrawalVault\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"UpdatedOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"id\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isValidatorWithdrawalVault\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolId\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultSettleStatus\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b506040516107a73803806107a783398101604081905261002e9161015f565b6100378161011a565b5f80546201000062ffff00199091166101008715150262ff00001916171763ff0000001916630100000060ff8616021790556001829055600380546001600160a01b0319166001600160a01b03831690811790915560408051636e9960c360e01b81529051636e9960c3916004808201926020929091908290030181865afa1580156100c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e991906101b8565b600280546001600160a01b0319166001600160a01b039290921691821790556101119061011a565b505050506101d8565b6001600160a01b0381166101415760405163d92e233d60e01b815260040160405180910390fd5b50565b80516001600160a01b038116811461015a575f80fd5b919050565b5f805f8060808587031215610172575f80fd5b84518015158114610181575f80fd5b602086015190945060ff81168114610197575f80fd5b604086015190935091506101ad60608601610144565b905092959194509250565b5f602082840312156101c8575f80fd5b6101d182610144565b9392505050565b6105c2806101e55f395ff3fe608060405260043610610085575f3560e01c80637ef4947d116100585780637ef4947d146102d85780638da5cb5b146102f05780639ee804cb1461030f578063af640d0f14610330578063bc5920ba1461035357610085565b8063392e53cd146102205780633e0dc34e14610253578063490ffa35146102845780637cc0bb90146102bb575b5f3660605f8060019054906101000a900460ff166101165760035f9054906101000a90046001600160a01b03166001600160a01b031663e8fe18736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100ed573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061011191906104f5565b61018a565b60035f9054906101000a90046001600160a01b03166001600160a01b0316636d28ad1c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610166573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061018a91906104f5565b90505f80826001600160a01b031686866040516101a8929190610517565b5f60405180830381855af49150503d805f81146101e0576040519150601f19603f3d011682016040523d82523d5f602084013e6101e5565b606091505b509150915081610212578060405162461bcd60e51b81526004016102099190610526565b60405180910390fd5b805195506020019350505050f35b34801561022b575f80fd5b505f5461023e9062010000900460ff1681565b60405190151581526020015b60405180910390f35b34801561025e575f80fd5b505f54610272906301000000900460ff1681565b60405160ff909116815260200161024a565b34801561028f575f80fd5b506003546102a3906001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b3480156102c6575f80fd5b505f5461023e90610100900460ff1681565b3480156102e3575f80fd5b505f5461023e9060ff1681565b3480156102fb575f80fd5b506002546102a3906001600160a01b031681565b34801561031a575f80fd5b5061032e610329366004610571565b610367565b005b34801561033b575f80fd5b5061034560015481565b60405190815260200161024a565b34801561035e575f80fd5b5061032e6103ef565b6002546001600160a01b0316331461039257604051632e6c18c960e11b815260040160405180910390fd5b61039b816104b7565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a150565b60035f9054906101000a90046001600160a01b03166001600160a01b0316636e9960c36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561043f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046391906104f5565b600280546001600160a01b0319166001600160a01b039290921691821790556040519081527f957090e72c0a1b3ebf83c682eb8c1f88c2a18cd0578b91a819efb28859f0f3a39060200160405180910390a1565b6001600160a01b0381166104de5760405163d92e233d60e01b815260040160405180910390fd5b50565b6001600160a01b03811681146104de575f80fd5b5f60208284031215610505575f80fd5b8151610510816104e1565b9392505050565b818382375f9101908152919050565b5f6020808352835180828501525f5b8181101561055157858101830151858201604001528201610535565b505f604082860101526040601f19601f8301168501019250505092915050565b5f60208284031215610581575f80fd5b8135610510816104e156fea264697066735822122059452f4aea1751c54e15abdc5f1bdcf91c9a15d15e004de54e9cfb13c077959664736f6c63430008140033", +} + +// VaultProxyABI is the input ABI used to generate the binding from. +// Deprecated: Use VaultProxyMetaData.ABI instead. +var VaultProxyABI = VaultProxyMetaData.ABI + +// VaultProxyBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use VaultProxyMetaData.Bin instead. +var VaultProxyBin = VaultProxyMetaData.Bin + +// DeployVaultProxy deploys a new Ethereum contract, binding an instance of VaultProxy to it. +func DeployVaultProxy(auth *bind.TransactOpts, backend bind.ContractBackend, _isValidatorWithdrawalVault bool, _poolId uint8, _id *big.Int, _staderConfig common.Address) (common.Address, *types.Transaction, *VaultProxy, error) { + parsed, err := VaultProxyMetaData.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(VaultProxyBin), backend, _isValidatorWithdrawalVault, _poolId, _id, _staderConfig) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &VaultProxy{VaultProxyCaller: VaultProxyCaller{contract: contract}, VaultProxyTransactor: VaultProxyTransactor{contract: contract}, VaultProxyFilterer: VaultProxyFilterer{contract: contract}}, nil +} + +// VaultProxy is an auto generated Go binding around an Ethereum contract. +type VaultProxy struct { + VaultProxyCaller // Read-only binding to the contract + VaultProxyTransactor // Write-only binding to the contract + VaultProxyFilterer // Log filterer for contract events +} + +// VaultProxyCaller is an auto generated read-only Go binding around an Ethereum contract. +type VaultProxyCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// VaultProxyTransactor is an auto generated write-only Go binding around an Ethereum contract. +type VaultProxyTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// VaultProxyFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type VaultProxyFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// VaultProxySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type VaultProxySession struct { + Contract *VaultProxy // 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 +} + +// VaultProxyCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type VaultProxyCallerSession struct { + Contract *VaultProxyCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// VaultProxyTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type VaultProxyTransactorSession struct { + Contract *VaultProxyTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// VaultProxyRaw is an auto generated low-level Go binding around an Ethereum contract. +type VaultProxyRaw struct { + Contract *VaultProxy // Generic contract binding to access the raw methods on +} + +// VaultProxyCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type VaultProxyCallerRaw struct { + Contract *VaultProxyCaller // Generic read-only contract binding to access the raw methods on +} + +// VaultProxyTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type VaultProxyTransactorRaw struct { + Contract *VaultProxyTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewVaultProxy creates a new instance of VaultProxy, bound to a specific deployed contract. +func NewVaultProxy(address common.Address, backend bind.ContractBackend) (*VaultProxy, error) { + contract, err := bindVaultProxy(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &VaultProxy{VaultProxyCaller: VaultProxyCaller{contract: contract}, VaultProxyTransactor: VaultProxyTransactor{contract: contract}, VaultProxyFilterer: VaultProxyFilterer{contract: contract}}, nil +} + +// NewVaultProxyCaller creates a new read-only instance of VaultProxy, bound to a specific deployed contract. +func NewVaultProxyCaller(address common.Address, caller bind.ContractCaller) (*VaultProxyCaller, error) { + contract, err := bindVaultProxy(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &VaultProxyCaller{contract: contract}, nil +} + +// NewVaultProxyTransactor creates a new write-only instance of VaultProxy, bound to a specific deployed contract. +func NewVaultProxyTransactor(address common.Address, transactor bind.ContractTransactor) (*VaultProxyTransactor, error) { + contract, err := bindVaultProxy(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &VaultProxyTransactor{contract: contract}, nil +} + +// NewVaultProxyFilterer creates a new log filterer instance of VaultProxy, bound to a specific deployed contract. +func NewVaultProxyFilterer(address common.Address, filterer bind.ContractFilterer) (*VaultProxyFilterer, error) { + contract, err := bindVaultProxy(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &VaultProxyFilterer{contract: contract}, nil +} + +// bindVaultProxy binds a generic wrapper to an already deployed contract. +func bindVaultProxy(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := VaultProxyMetaData.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 (_VaultProxy *VaultProxyRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _VaultProxy.Contract.VaultProxyCaller.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 (_VaultProxy *VaultProxyRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _VaultProxy.Contract.VaultProxyTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_VaultProxy *VaultProxyRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _VaultProxy.Contract.VaultProxyTransactor.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 (_VaultProxy *VaultProxyCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _VaultProxy.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 (_VaultProxy *VaultProxyTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _VaultProxy.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_VaultProxy *VaultProxyTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _VaultProxy.Contract.contract.Transact(opts, method, params...) +} + +// Id is a free data retrieval call binding the contract method 0xaf640d0f. +// +// Solidity: function id() view returns(uint256) +func (_VaultProxy *VaultProxyCaller) Id(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _VaultProxy.contract.Call(opts, &out, "id") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Id is a free data retrieval call binding the contract method 0xaf640d0f. +// +// Solidity: function id() view returns(uint256) +func (_VaultProxy *VaultProxySession) Id() (*big.Int, error) { + return _VaultProxy.Contract.Id(&_VaultProxy.CallOpts) +} + +// Id is a free data retrieval call binding the contract method 0xaf640d0f. +// +// Solidity: function id() view returns(uint256) +func (_VaultProxy *VaultProxyCallerSession) Id() (*big.Int, error) { + return _VaultProxy.Contract.Id(&_VaultProxy.CallOpts) +} + +// IsInitialized is a free data retrieval call binding the contract method 0x392e53cd. +// +// Solidity: function isInitialized() view returns(bool) +func (_VaultProxy *VaultProxyCaller) IsInitialized(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _VaultProxy.contract.Call(opts, &out, "isInitialized") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsInitialized is a free data retrieval call binding the contract method 0x392e53cd. +// +// Solidity: function isInitialized() view returns(bool) +func (_VaultProxy *VaultProxySession) IsInitialized() (bool, error) { + return _VaultProxy.Contract.IsInitialized(&_VaultProxy.CallOpts) +} + +// IsInitialized is a free data retrieval call binding the contract method 0x392e53cd. +// +// Solidity: function isInitialized() view returns(bool) +func (_VaultProxy *VaultProxyCallerSession) IsInitialized() (bool, error) { + return _VaultProxy.Contract.IsInitialized(&_VaultProxy.CallOpts) +} + +// IsValidatorWithdrawalVault is a free data retrieval call binding the contract method 0x7cc0bb90. +// +// Solidity: function isValidatorWithdrawalVault() view returns(bool) +func (_VaultProxy *VaultProxyCaller) IsValidatorWithdrawalVault(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _VaultProxy.contract.Call(opts, &out, "isValidatorWithdrawalVault") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsValidatorWithdrawalVault is a free data retrieval call binding the contract method 0x7cc0bb90. +// +// Solidity: function isValidatorWithdrawalVault() view returns(bool) +func (_VaultProxy *VaultProxySession) IsValidatorWithdrawalVault() (bool, error) { + return _VaultProxy.Contract.IsValidatorWithdrawalVault(&_VaultProxy.CallOpts) +} + +// IsValidatorWithdrawalVault is a free data retrieval call binding the contract method 0x7cc0bb90. +// +// Solidity: function isValidatorWithdrawalVault() view returns(bool) +func (_VaultProxy *VaultProxyCallerSession) IsValidatorWithdrawalVault() (bool, error) { + return _VaultProxy.Contract.IsValidatorWithdrawalVault(&_VaultProxy.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_VaultProxy *VaultProxyCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _VaultProxy.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 (_VaultProxy *VaultProxySession) Owner() (common.Address, error) { + return _VaultProxy.Contract.Owner(&_VaultProxy.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_VaultProxy *VaultProxyCallerSession) Owner() (common.Address, error) { + return _VaultProxy.Contract.Owner(&_VaultProxy.CallOpts) +} + +// PoolId is a free data retrieval call binding the contract method 0x3e0dc34e. +// +// Solidity: function poolId() view returns(uint8) +func (_VaultProxy *VaultProxyCaller) PoolId(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _VaultProxy.contract.Call(opts, &out, "poolId") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// PoolId is a free data retrieval call binding the contract method 0x3e0dc34e. +// +// Solidity: function poolId() view returns(uint8) +func (_VaultProxy *VaultProxySession) PoolId() (uint8, error) { + return _VaultProxy.Contract.PoolId(&_VaultProxy.CallOpts) +} + +// PoolId is a free data retrieval call binding the contract method 0x3e0dc34e. +// +// Solidity: function poolId() view returns(uint8) +func (_VaultProxy *VaultProxyCallerSession) PoolId() (uint8, error) { + return _VaultProxy.Contract.PoolId(&_VaultProxy.CallOpts) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_VaultProxy *VaultProxyCaller) StaderConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _VaultProxy.contract.Call(opts, &out, "staderConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_VaultProxy *VaultProxySession) StaderConfig() (common.Address, error) { + return _VaultProxy.Contract.StaderConfig(&_VaultProxy.CallOpts) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_VaultProxy *VaultProxyCallerSession) StaderConfig() (common.Address, error) { + return _VaultProxy.Contract.StaderConfig(&_VaultProxy.CallOpts) +} + +// VaultSettleStatus is a free data retrieval call binding the contract method 0x7ef4947d. +// +// Solidity: function vaultSettleStatus() view returns(bool) +func (_VaultProxy *VaultProxyCaller) VaultSettleStatus(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _VaultProxy.contract.Call(opts, &out, "vaultSettleStatus") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// VaultSettleStatus is a free data retrieval call binding the contract method 0x7ef4947d. +// +// Solidity: function vaultSettleStatus() view returns(bool) +func (_VaultProxy *VaultProxySession) VaultSettleStatus() (bool, error) { + return _VaultProxy.Contract.VaultSettleStatus(&_VaultProxy.CallOpts) +} + +// VaultSettleStatus is a free data retrieval call binding the contract method 0x7ef4947d. +// +// Solidity: function vaultSettleStatus() view returns(bool) +func (_VaultProxy *VaultProxyCallerSession) VaultSettleStatus() (bool, error) { + return _VaultProxy.Contract.VaultSettleStatus(&_VaultProxy.CallOpts) +} + +// UpdateOwner is a paid mutator transaction binding the contract method 0xbc5920ba. +// +// Solidity: function updateOwner() returns() +func (_VaultProxy *VaultProxyTransactor) UpdateOwner(opts *bind.TransactOpts) (*types.Transaction, error) { + return _VaultProxy.contract.Transact(opts, "updateOwner") +} + +// UpdateOwner is a paid mutator transaction binding the contract method 0xbc5920ba. +// +// Solidity: function updateOwner() returns() +func (_VaultProxy *VaultProxySession) UpdateOwner() (*types.Transaction, error) { + return _VaultProxy.Contract.UpdateOwner(&_VaultProxy.TransactOpts) +} + +// UpdateOwner is a paid mutator transaction binding the contract method 0xbc5920ba. +// +// Solidity: function updateOwner() returns() +func (_VaultProxy *VaultProxyTransactorSession) UpdateOwner() (*types.Transaction, error) { + return _VaultProxy.Contract.UpdateOwner(&_VaultProxy.TransactOpts) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_VaultProxy *VaultProxyTransactor) UpdateStaderConfig(opts *bind.TransactOpts, _staderConfig common.Address) (*types.Transaction, error) { + return _VaultProxy.contract.Transact(opts, "updateStaderConfig", _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_VaultProxy *VaultProxySession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _VaultProxy.Contract.UpdateStaderConfig(&_VaultProxy.TransactOpts, _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_VaultProxy *VaultProxyTransactorSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _VaultProxy.Contract.UpdateStaderConfig(&_VaultProxy.TransactOpts, _staderConfig) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_VaultProxy *VaultProxyTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _VaultProxy.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_VaultProxy *VaultProxySession) Fallback(calldata []byte) (*types.Transaction, error) { + return _VaultProxy.Contract.Fallback(&_VaultProxy.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_VaultProxy *VaultProxyTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _VaultProxy.Contract.Fallback(&_VaultProxy.TransactOpts, calldata) +} + +// VaultProxyUpdatedOwnerIterator is returned from FilterUpdatedOwner and is used to iterate over the raw logs and unpacked data for UpdatedOwner events raised by the VaultProxy contract. +type VaultProxyUpdatedOwnerIterator struct { + Event *VaultProxyUpdatedOwner // 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 *VaultProxyUpdatedOwnerIterator) 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(VaultProxyUpdatedOwner) + if err := 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(VaultProxyUpdatedOwner) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *VaultProxyUpdatedOwnerIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *VaultProxyUpdatedOwnerIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// VaultProxyUpdatedOwner represents a UpdatedOwner event raised by the VaultProxy contract. +type VaultProxyUpdatedOwner struct { + Owner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedOwner is a free log retrieval operation binding the contract event 0x957090e72c0a1b3ebf83c682eb8c1f88c2a18cd0578b91a819efb28859f0f3a3. +// +// Solidity: event UpdatedOwner(address owner) +func (_VaultProxy *VaultProxyFilterer) FilterUpdatedOwner(opts *bind.FilterOpts) (*VaultProxyUpdatedOwnerIterator, error) { + + logs, sub, err := _VaultProxy.contract.FilterLogs(opts, "UpdatedOwner") + if err != nil { + return nil, err + } + return &VaultProxyUpdatedOwnerIterator{contract: _VaultProxy.contract, event: "UpdatedOwner", logs: logs, sub: sub}, nil +} + +// WatchUpdatedOwner is a free log subscription operation binding the contract event 0x957090e72c0a1b3ebf83c682eb8c1f88c2a18cd0578b91a819efb28859f0f3a3. +// +// Solidity: event UpdatedOwner(address owner) +func (_VaultProxy *VaultProxyFilterer) WatchUpdatedOwner(opts *bind.WatchOpts, sink chan<- *VaultProxyUpdatedOwner) (event.Subscription, error) { + + logs, sub, err := _VaultProxy.contract.WatchLogs(opts, "UpdatedOwner") + 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(VaultProxyUpdatedOwner) + if err := _VaultProxy.contract.UnpackLog(event, "UpdatedOwner", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedOwner is a log parse operation binding the contract event 0x957090e72c0a1b3ebf83c682eb8c1f88c2a18cd0578b91a819efb28859f0f3a3. +// +// Solidity: event UpdatedOwner(address owner) +func (_VaultProxy *VaultProxyFilterer) ParseUpdatedOwner(log types.Log) (*VaultProxyUpdatedOwner, error) { + event := new(VaultProxyUpdatedOwner) + if err := _VaultProxy.contract.UnpackLog(event, "UpdatedOwner", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// VaultProxyUpdatedStaderConfigIterator is returned from FilterUpdatedStaderConfig and is used to iterate over the raw logs and unpacked data for UpdatedStaderConfig events raised by the VaultProxy contract. +type VaultProxyUpdatedStaderConfigIterator struct { + Event *VaultProxyUpdatedStaderConfig // 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 *VaultProxyUpdatedStaderConfigIterator) 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(VaultProxyUpdatedStaderConfig) + if err := 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(VaultProxyUpdatedStaderConfig) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *VaultProxyUpdatedStaderConfigIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *VaultProxyUpdatedStaderConfigIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// VaultProxyUpdatedStaderConfig represents a UpdatedStaderConfig event raised by the VaultProxy contract. +type VaultProxyUpdatedStaderConfig struct { + StaderConfig common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedStaderConfig is a free log retrieval operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_VaultProxy *VaultProxyFilterer) FilterUpdatedStaderConfig(opts *bind.FilterOpts) (*VaultProxyUpdatedStaderConfigIterator, error) { + + logs, sub, err := _VaultProxy.contract.FilterLogs(opts, "UpdatedStaderConfig") + if err != nil { + return nil, err + } + return &VaultProxyUpdatedStaderConfigIterator{contract: _VaultProxy.contract, event: "UpdatedStaderConfig", logs: logs, sub: sub}, nil +} + +// WatchUpdatedStaderConfig is a free log subscription operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_VaultProxy *VaultProxyFilterer) WatchUpdatedStaderConfig(opts *bind.WatchOpts, sink chan<- *VaultProxyUpdatedStaderConfig) (event.Subscription, error) { + + logs, sub, err := _VaultProxy.contract.WatchLogs(opts, "UpdatedStaderConfig") + 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(VaultProxyUpdatedStaderConfig) + if err := _VaultProxy.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedStaderConfig is a log parse operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_VaultProxy *VaultProxyFilterer) ParseUpdatedStaderConfig(log types.Log) (*VaultProxyUpdatedStaderConfig, error) { + event := new(VaultProxyUpdatedStaderConfig) + if err := _VaultProxy.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/testing/deployHelper_test.go b/testing/deployHelper_test.go index 5e6ed8c1c..305ef7f39 100644 --- a/testing/deployHelper_test.go +++ b/testing/deployHelper_test.go @@ -7,7 +7,6 @@ import ( "log" "math/big" "testing" - "time" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" @@ -57,7 +56,7 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { staderCfAddress, _, stdCfContract, err := contracts.DeployStaderConfig(auth, client, fromAddress, common.HexToAddress(ethXPredefineAddr)) require.Nil(t, err) - fmt.Printf("staderCfAddress %+v", staderCfAddress.Hex()) + fmt.Printf("Stader config address: %+v \n", staderCfAddress.Hex()) auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) // Update Node permissionless regis to stader config @@ -70,7 +69,7 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { // deploy the ethx contract ethXAddr, _, ethxContract, err := contracts.DeployETHX(auth, client, fromAddress, staderCfAddress) require.Nil(t, err) - fmt.Printf("ethXAddr %+v", ethXAddr.Hex()) + fmt.Printf("EthXAddr %+v", ethXAddr.Hex()) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) @@ -79,32 +78,30 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) - // Deploy node permission - plNodeRegistryAddr, _, _, err := contracts.DeployPermissionlessNodeRegistry(auth, client, fromAddress, staderCfAddress) + // Deploy node permission regis + plNodeRegistryAddr, _, nrContact, err := contracts.DeployPermissionlessNodeRegistry(auth, client, fromAddress, staderCfAddress) require.Nil(t, err) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) - // Update Node permissionless regis to stader config _, err = stdCfContract.UpdatePermissionlessNodeRegistry(auth, plNodeRegistryAddr) require.Nil(t, err) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) - // Deploy permissionless pool + // Permissionless pool permissionlessPoolAddr, _, _, err := contracts.DeployPermissionlessPool(auth, client, fromAddress, staderCfAddress) require.Nil(t, err) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) - // Update Node permissionless pool to stader config _, err = stdCfContract.UpdatePermissionlessPool(auth, permissionlessPoolAddr) require.Nil(t, err) auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) - // Deploy permissionless pool + // PoolUtils poolUtils, _, poolUtilsContract, err := contracts.DeployPoolUtils(auth, client, fromAddress, staderCfAddress) require.Nil(t, err) @@ -116,14 +113,46 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) - // Update Node poolUtils pool to stader config _, err = stdCfContract.UpdatePoolUtils(auth, poolUtils) require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + + // Vault proxy + // auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + // vaultProxyAddr, _, _, err := contracts.DeployVaultProxy( + // auth, + // client, + // true, + // 1, + // big.NewInt(1), + // staderCfAddress, + // ) + // require.Nil(t, err) + // auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + + // _, err = stdCfContract.UpdateVaultFactory(auth, vaultProxyAddr) + // require.Nil(t, err) + // auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + + // vaultStore, err := stdCfContract.GetVaultFactory(&bind.CallOpts{}) + // require.Nil(t, err) + // require.Equal(t, vaultStore, vaultProxyAddr) + + // SocializingPool + spAddr, _, _, err := contracts.DeploySocializingPool(auth, client, fromAddress, staderCfAddress) + require.Nil(t, err) + + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + _, err = stdCfContract.UpdatePermissionedSocializingPool(auth, spAddr) + require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) fmt.Printf("Api contract from %s\n", auth.From.Hex()) fmt.Printf("DeployETHX to %s\n", ethXAddr.Hex()) fmt.Printf("DeployStaderConfig to %s\n", staderCfAddress.Hex()) fmt.Printf("DeployPoolUtils to %s\n", poolUtils.Hex()) + fmt.Printf("PermissionlessPoolAddr %s\n", permissionlessPoolAddr.Hex()) + fmt.Printf("PLNodeRegistryAddr %s\n", plNodeRegistryAddr.Hex()) prn, err := services.GetPermissionlessNodeRegistry(c) require.Nil(t, err) @@ -142,11 +171,12 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { auth, err = GetNextTransaction(client, acc.Address, nodePrivateKey, chainID) require.Nil(t, err) - // npr.GetRoleAdmin() _, err = node.OnboardNodeOperator(prn, true, "nodetesting", acc.Address, auth) require.Nil(t, err) - time.Sleep(time.Second * 5) + exist, err := nrContact.IsExistingOperator(&bind.CallOpts{}, acc.Address) + require.Nil(t, err) + require.True(t, exist) } // GetNextTransaction returns the next transaction in the pending transaction queue diff --git a/testing/httptest/http.go b/testing/httptest/http.go index e0696d209..3ac8d38d3 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -22,16 +22,28 @@ func SererHttp(t *testing.T) { } mux.HandleFunc("/presigns", s.presigns) mux.HandleFunc("/publicKey", s.publicKey) + mux.HandleFunc("/presign", s.presign) + mux.HandleFunc("/presignsSubmitted", s.presignsSubmitted) err := http.ListenAndServe(":9989", mux) require.Nil(t, err) } +func (s *StaderHandler) presignsSubmitted(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + var p map[string]bool + json.NewEncoder(w).Encode(p) +} + func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") } +func (s *StaderHandler) presign(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") +} + func (s *StaderHandler) publicKey(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") p := stader_backend.PublicKeyApiResponse{ From 0e684626a3ab7b276b52b8e14baa8b03b204de4b Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 20 Jun 2023 19:25:27 +0700 Subject: [PATCH 27/90] Config anvil --- .github/workflows/go_test.yml | 6 + stader-lib/node/validator.go | 10 +- stader/api/validator/deposit.go | 3 +- stader/node/node.go | 2 +- .../contracts/PermissionlessNodeRegistry.go | 10 +- testing/contracts/SocializingPool.go | 2 +- testing/contracts/VaultFactory.go | 1816 +++++++++++++++++ testing/contracts/VaultProxy.go | 29 +- testing/deployHelper_test.go | 75 +- testing/node_test.go | 15 + 10 files changed, 1916 insertions(+), 52 deletions(-) create mode 100644 testing/contracts/VaultFactory.go diff --git a/.github/workflows/go_test.yml b/.github/workflows/go_test.yml index 2ed53e4b1..f4c57e1f2 100644 --- a/.github/workflows/go_test.yml +++ b/.github/workflows/go_test.yml @@ -7,6 +7,12 @@ jobs: steps: + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + - name: Run avil + run: | + anvil + - name: Install and start kurtosis run: | echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list diff --git a/stader-lib/node/validator.go b/stader-lib/node/validator.go index dac4a70f0..d875f7c8c 100644 --- a/stader-lib/node/validator.go +++ b/stader-lib/node/validator.go @@ -2,9 +2,10 @@ package node import ( "fmt" + "math/big" + "github.com/stader-labs/stader-node/stader-lib/contracts" types2 "github.com/stader-labs/stader-node/stader-lib/types" - "math/big" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" @@ -17,7 +18,12 @@ func EstimateAddValidatorKeys(pnr *stader.PermissionlessNodeRegistryContractMana } func AddValidatorKeys(pnr *stader.PermissionlessNodeRegistryContractManager, pubKeys [][]byte, preDepositSignatures [][]byte, depositSignatures [][]byte, opts *bind.TransactOpts) (*types.Transaction, error) { - tx, err := pnr.PermissionlessNodeRegistry.AddValidatorKeys(opts, pubKeys, preDepositSignatures, depositSignatures) + tx, err := pnr.PermissionlessNodeRegistry.AddValidatorKeys( + opts, + [][]byte{}, + [][]byte{}, + [][]byte{}, + ) if err != nil { return nil, fmt.Errorf("could not add validator keys: %w", err) } diff --git a/stader/api/validator/deposit.go b/stader/api/validator/deposit.go index c4157e4db..a636627bc 100644 --- a/stader/api/validator/deposit.go +++ b/stader/api/validator/deposit.go @@ -3,13 +3,14 @@ package validator import ( "context" "fmt" + "math/big" + "github.com/stader-labs/stader-node/stader-lib/node" sd_collateral "github.com/stader-labs/stader-node/stader-lib/sd-collateral" "github.com/stader-labs/stader-node/stader-lib/tokens" stadertypes "github.com/stader-labs/stader-node/stader-lib/types" "github.com/urfave/cli" _ "golang.org/x/sync/errgroup" - "math/big" "github.com/stader-labs/stader-node/shared/services" "github.com/stader-labs/stader-node/shared/types/api" diff --git a/stader/node/node.go b/stader/node/node.go index b289a83c0..5b1b7b3be 100644 --- a/stader/node/node.go +++ b/stader/node/node.go @@ -47,7 +47,7 @@ import ( ) // Config -var preSignedCooldown, _ = time.ParseDuration("1h") +var preSignedCooldown, _ = time.ParseDuration("5s") // TODO: Config this var feeRecepientPollingInterval, _ = time.ParseDuration("10m") var taskCooldown, _ = time.ParseDuration("10s") var merkleProofsDownloadInterval, _ = time.ParseDuration("3h") diff --git a/testing/contracts/PermissionlessNodeRegistry.go b/testing/contracts/PermissionlessNodeRegistry.go index 53dad4c48..15c912e81 100644 --- a/testing/contracts/PermissionlessNodeRegistry.go +++ b/testing/contracts/PermissionlessNodeRegistry.go @@ -43,8 +43,8 @@ type Validator struct { // PermissionlessNodeRegistryMetaData contains all meta data concerning the PermissionlessNodeRegistry contract. var PermissionlessNodeRegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CooldownNotComplete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicatePoolIDOrPoolNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InSufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBondEthValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidKeyCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartAndEndIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MisMatchingInputKeysSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoChangeInState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSDCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorAlreadyOnBoardedInProtocol\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorIsDeactivate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorNotOnBoarded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PageNumberIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PubkeyAlreadyExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyVerifiedKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyWithdrawnKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UNEXPECTED_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"maxKeyLimitReached\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"AddedValidatorKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"DecreasedTotalActiveValidatorCount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"IncreasedTotalActiveValidatorCount\",\"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\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nodeRewardAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"OnboardedOperator\",\"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\":\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredCollateralToPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"batchKeyDepositLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedInputKeyCountLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"UpdatedMaxNonTerminalKeyPerOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"UpdatedNextQueuedValidatorIndex\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardAddress\",\"type\":\"address\"}],\"name\":\"UpdatedOperatorDetails\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"UpdatedSocializingPoolState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"}],\"name\":\"UpdatedValidatorDepositBlock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedVerifiedKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedWithdrawnKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedAsFrontRunned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedReadyToDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorStatusMarkedAsInvalidSignature\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COLLATERAL_ETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRONT_RUN_PENALTY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ID\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_depositSignature\",\"type\":\"bytes[]\"}],\"name\":\"addValidatorKeys\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"changeSocializingPoolState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllNodeELVaultAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorRewardAddress\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalKeys\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getSocializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsByOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"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\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"increaseTotalActiveValidatorCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inputKeyCountLimit\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_readyToDepositPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_frontRunPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_invalidSignaturePubkey\",\"type\":\"bytes[]\"}],\"name\":\"markValidatorReadyToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNonTerminalKeyPerOperator\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextQueuedValidatorIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextValidatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nodeELRewardVaultByOperatorId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_operatorRewardAddress\",\"type\":\"address\"}],\"name\":\"onboardNodeOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"poolUtils\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorIDByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"operatorStructById\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"operatorRewardAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorAddress\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queuedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"socializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"totalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferCollateralToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"}],\"name\":\"updateDepositStatusAndBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_inputKeyCountLimit\",\"type\":\"uint16\"}],\"name\":\"updateInputKeyCountLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"updateMaxNonTerminalKeyPerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"updateNextQueuedValidatorIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_rewardAddress\",\"type\":\"address\"}],\"name\":\"updateOperatorDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateVerifiedKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"validatorIdByPubkey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorIdsByOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorRegistry\",\"outputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifiedKeyBatchSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"withdrawnValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b5060405162005565380380620055658339810160408190526200003391620004c6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001f1565b6200010e82620001f1565b620001186200021c565b6200012262000278565b6200012c620002dc565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff00009091166a01000000000000000000006001600160a01b0386160261ffff1916171762010000600160501b03191662320000179055603260fc55620001a25f8462000340565b8015620001e8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620004fc565b6001600160a01b038116620002195760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002765760405162461bcd60e51b815260206004820152602b60248201525f805160206200554583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002d25760405162461bcd60e51b815260206004820152602b60248201525f805160206200554583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b62000276620003e3565b5f54610100900460ff16620003365760405162461bcd60e51b815260206004820152602b60248201525f805160206200554583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200027662000449565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16620003df575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200039e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff166200043d5760405162461bcd60e51b815260206004820152602b60248201525f805160206200554583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff16620004a35760405162461bcd60e51b815260206004820152602b60248201525f805160206200554583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b0381168114620004c1575f80fd5b919050565b5f8060408385031215620004d8575f80fd5b620004e383620004aa565b9150620004f360208401620004aa565b90509250929050565b61503b806200050a5f395ff3fe60806040526004361061035b575f3560e01c806383ea2358116101bd578063bb7306bf116100f2578063deacde2b11610092578063ebb5c1741161006d578063ebb5c17414610a64578063f7c0918914610a90578063f90b083814610aa5578063f9c4dda414610ac4575f80fd5b8063deacde2b146109fe578063e0bf8b5314610a11578063e0d7d0e914610a3e575f80fd5b8063c8a00e7a116100cd578063c8a00e7a14610964578063cac8b30614610994578063d547741f146109c0578063d5e1e5ce146109df575f80fd5b8063bb7306bf146108f1578063bc4a3ad51461090c578063c34ade5c14610938575f80fd5b8063998888981161015d578063ab3e71eb11610138578063ab3e71eb14610884578063af533aa814610899578063b01db078146108b8578063b8d2f06c146108d2575f80fd5b806399888898146108335780639ee804cb14610852578063a217fddf14610871575f80fd5b806384b0fa4c1161019857806384b0fa4c146107aa5780638a25bcec146107c057806391d14854146107df5780639344b242146107fe575f80fd5b806383ea23581461073257806384522a6d1461076a5780638456cb5914610796575f80fd5b806349911bfb116102935780635c2c30a511610233578063683547b81161020e578063683547b8146106c757806374338e6d146106f357806377c359e1146107095780637bd977d91461071e575f80fd5b80635c2c30a5146106595780635c975abb1461069157806360c3cf3f146106a8575f80fd5b806358a994ea1161026e57806358a994ea146105c957806359c3c9b7146105e85780635a1239c1146106075780635ae7f25d1461063a575f80fd5b806349911bfb1461055c5780634f59ed801461057157806350d5d7ab1461058c575f80fd5b80632d1dbd74116102fe57806336514d9f116102d957806336514d9f146104e457806336568abe146105035780633f4ba83a14610522578063490ffa3514610536575f80fd5b80632d1dbd74146104845780632d32924f146104995780632f2ff15d146104c5575f80fd5b8063186d954111610339578063186d9541146103eb578063248a9ca31461040a5780632517cfbf14610446578063264f27f314610465575f80fd5b806301ffc9a71461035f578063044d2fe81461039357806313797bff146103ca575b5f80fd5b34801561036a575f80fd5b5061037e6103793660046143cd565b610afb565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103b26103ad366004614459565b610b31565b6040516001600160a01b03909116815260200161038a565b3480156103d5575f80fd5b506103e96103e43660046144fc565b610e59565b005b3480156103f6575f80fd5b506103e961040536600461458e565b6112a0565b348015610415575f80fd5b5061043861042436600461458e565b5f9081526065602052604090206001015490565b60405190815260200161038a565b348015610451575f80fd5b506103e96104603660046145a5565b611350565b348015610470575f80fd5b506103e961047f3660046145c6565b6113b2565b34801561048f575f80fd5b5061043860fd5481565b3480156104a4575f80fd5b506104b86104b3366004614604565b6115fd565b60405161038a9190614624565b3480156104d0575f80fd5b506103e96104df366004614670565b611727565b3480156104ef575f80fd5b5061037e6104fe36600461469e565b61174b565b34801561050e575f80fd5b506103e961051d366004614670565b611778565b34801561052d575f80fd5b506103e96117fb565b348015610541575f80fd5b5060fb546103b290600160501b90046001600160a01b031681565b348015610567575f80fd5b5061043860ff5481565b34801561057c575f80fd5b50610438673782dace9d90000081565b348015610597575f80fd5b5060fb546105b1906201000090046001600160401b031681565b6040516001600160401b03909116815260200161038a565b3480156105d4575f80fd5b506103e96105e33660046146d0565b611823565b3480156105f3575f80fd5b506103e961060236600461458e565b6119a1565b348015610612575f80fd5b5061062661062136600461458e565b611a41565b60405161038a9897969594939291906147a3565b348015610645575f80fd5b506103e961065436600461458e565b611c23565b348015610664575f80fd5b50610438610673366004614830565b80516020818301810180516101038252928201919093012091525481565b34801561069c575f80fd5b5060975460ff1661037e565b3480156106b3575f80fd5b506103e96106c23660046148da565b611d8a565b3480156106d2575f80fd5b506106e66106e1366004614900565b611e04565b60405161038a9190614932565b3480156106fe575f80fd5b506104386101005481565b348015610714575f80fd5b5061010154610438565b348015610729575f80fd5b506104386121bb565b34801561073d575f80fd5b506103b261074c36600461458e565b5f90815261010560205260409020600201546001600160a01b031690565b348015610775575f80fd5b5061043861078436600461458e565b6101086020525f908152604090205481565b3480156107a1575f80fd5b506103e96121d2565b3480156107b5575f80fd5b506104386101015481565b3480156107cb575f80fd5b506105b16107da366004614900565b6121f8565b3480156107ea575f80fd5b5061037e6107f9366004614670565b6122c3565b348015610809575f80fd5b506103b261081836600461458e565b6101096020525f90815260409020546001600160a01b031681565b34801561083e575f80fd5b506106e661084d366004614604565b6122ed565b34801561085d575f80fd5b506103e961086c366004614a1c565b612638565b34801561087c575f80fd5b506104385f81565b34801561088f575f80fd5b5061043860fc5481565b3480156108a4575f80fd5b506103e96108b336600461458e565b6126c1565b3480156108c3575f80fd5b50673782dace9d900000610438565b3480156108dd575f80fd5b506103e96108ec36600461458e565b612714565b3480156108fc575f80fd5b506104386729a2241af62c000081565b348015610917575f80fd5b5061043861092636600461458e565b6101046020525f908152604090205481565b348015610943575f80fd5b5061043861095236600461458e565b5f908152610107602052604090205490565b34801561096f575f80fd5b5061098361097e36600461458e565b61279f565b60405161038a959493929190614a37565b34801561099f575f80fd5b506104386109ae366004614a1c565b6101066020525f908152604090205481565b3480156109cb575f80fd5b506103e96109da366004614670565b612868565b3480156109ea575f80fd5b506104386109f9366004614604565b61288c565b6103e9610a0c3660046144fc565b6128b8565b348015610a1c575f80fd5b5060fb54610a2b9061ffff1681565b60405161ffff909116815260200161038a565b348015610a49575f80fd5b50610a52600181565b60405160ff909116815260200161038a565b348015610a6f575f80fd5b50610438610a7e36600461458e565b5f908152610108602052604090205490565b348015610a9b575f80fd5b5061043860fe5481565b348015610ab0575f80fd5b506103b2610abf366004614a7b565b612f9b565b348015610acf575f80fd5b5061037e610ade366004614a1c565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b2b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b3a613204565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb09190614a96565b905060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c279190614a96565b604051636fc4c27f60e11b8152600160048201526001600160a01b039182169183169063df8984fe90602401602060405180830381865afa158015610c6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c929190614a96565b6001600160a01b031614610cb9576040516303b8ffef60e41b815260040160405180910390fd5b604051639f7053f560e01b81526001600160a01b03821690639f7053f590610ce79088908890600401614ad9565b5f604051808303815f87803b158015610cfe575f80fd5b505af1158015610d10573d5f803e3d5ffd5b50505050610d1d8361324a565b604051633e71376960e21b81523360048201526001600160a01b0382169063f9c4dda490602401602060405180830381865afa158015610d5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d839190614af4565b15610da15760405163707999fb60e11b815260040160405180910390fd5b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e179190614a96565b60fd545f9081526101096020526040902080546001600160a01b0319166001600160a01b0383161790559050610e4f87878787613271565b5095945050505050565b610e616133ff565b610e69613204565b60fb5460408051633871d0f160e01b81529051610ee7923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610ebe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee29190614b0f565b613458565b60fc5485908490839081610efb8486614b3a565b610f059190614b3a565b1115610f245760405163525e3de760e01b815260040160405180910390fd5b5f5b83811015610fed575f6101038b8b84818110610f4457610f44614b4d565b9050602002810190610f569190614b61565b604051610f64929190614ba3565b9081526020016040518091039020549050610f7e816134e4565b610f8781613530565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b84818110610fba57610fba614b4d565b9050602002810190610fcc9190614b61565b83604051610fdc93929190614bb2565b60405180910390a150600101610f26565b5081156110ca5760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611045573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110699190614a96565b6001600160a01b0316638d0d8cb66110896729a2241af62c000085614bd5565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156110b2575f80fd5b505af11580156110c4573d5f803e3d5ffd5b50505050505b5f5b828110156111c0575f6101038989848181106110ea576110ea614b4d565b90506020028101906110fc9190614b61565b60405161110a929190614ba3565b9081526020016040518091039020549050611124816134e4565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b8346689898481811061118d5761118d614b4d565b905060200281019061119f9190614b61565b836040516111af93929190614bb2565b60405180910390a1506001016110cc565b505f5b8181101561128a575f6101038787848181106111e1576111e1614b4d565b90506020028101906111f39190614b61565b604051611201929190614ba3565b908152602001604051809103902054905061121b816134e4565b61122481613571565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f87878481811061125757611257614b4d565b90506020028101906112699190614b61565b8360405161127993929190614bb2565b60405180910390a1506001016111c3565b50505050611298600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b815290516112f5923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610ebe573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb5461136e903390600160501b90046001600160a01b0316613700565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c3690602001611345565b60fb5460408051633871d0f160e01b81529051611407923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610ebe573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa158015611455573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114799190614b0f565b81111561149957604051639519af4360e01b815260040160405180910390fd5b5f5b818110156115ee575f6101038585848181106114b9576114b9614b4d565b90506020028101906114cb9190614b61565b6040516114d9929190614ba3565b90815260200160405180910390205490506114f381613785565b611510576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b158015611572575f80fd5b505af1158015611584573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf798585848181106115bb576115bb614b4d565b90506020028101906115cd9190614b61565b836040516115dd93929190614bb2565b60405180910390a15060010161149b565b506115f8816139d0565b505050565b6060825f0361161f576040516334d6e01560e01b815260040160405180910390fd5b5f8261162c600186614bec565b6116369190614bd5565b611641906001614b3a565b90505f61164e8483614b3a565b905060fd54811161165f5780611663565b60fd545b90505f828211611673575f61167d565b61167d8383614bec565b6001600160401b038111156116945761169461481c565b6040519080825280602002602001820160405280156116bd578160200160208202803683370190505b509050825b82811015610e4f575f81815261010960205260409020546001600160a01b0316826116ed8684614bec565b815181106116fd576116fd614b4d565b6001600160a01b03909216602092830291909101909101528061171f81614bff565b9150506116c2565b5f8281526065602052604090206001015461174181613a1b565b6115f88383613a25565b5f610103838360405161175f929190614ba3565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146117ed5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6117f78282613aaa565b5050565b60fb54611819903390600160501b90046001600160a01b0316613b10565b611821613b95565b565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611874573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118989190614a96565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b81526004016118c5929190614ad9565b5f604051808303815f87803b1580156118dc575f80fd5b505af11580156118ee573d5f803e3d5ffd5b505050506118fb8161324a565b61190433613be7565b50335f9081526101066020908152604080832054808452610105909252909120600101611932848683614c94565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d872697779061199390879087908790614d4f565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b815290516119f6923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610ebe573d5f803e3d5ffd5b806101015f828254611a089190614b3a565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f290602001611345565b6101026020525f90815260409020805460018201805460ff9092169291611a6790614c17565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9390614c17565b8015611ade5780601f10611ab557610100808354040283529160200191611ade565b820191905f5260205f20905b815481529060010190602001808311611ac157829003601f168201915b505050505090806002018054611af390614c17565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1f90614c17565b8015611b6a5780601f10611b4157610100808354040283529160200191611b6a565b820191905f5260205f20905b815481529060010190602001808311611b4d57829003601f168201915b505050505090806003018054611b7f90614c17565b80601f0160208091040260200160405190810160405280929190818152602001828054611bab90614c17565b8015611bf65780601f10611bcd57610100808354040283529160200191611bf6565b820191905f5260205f20905b815481529060010190602001808311611bd957829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611c2b6133ff565b60fb5460408051637a87fa0b60e01b81529051611c80923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610ebe573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf59190614a96565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611d2d575f80fd5b505af1158015611d3f573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a81604051611d7591815260200190565b60405180910390a1611d87600160c955565b50565b60fb54611da8903390600160501b90046001600160a01b0316613b10565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a290602001611345565b6060825f03611e26576040516334d6e01560e01b815260040160405180910390fd5b5f82611e33600186614bec565b611e3d9190614bd5565b90505f611e4a8483614b3a565b6001600160a01b0387165f9081526101066020526040812054919250819003611e865760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311611ea25782611ea4565b805b92505f848411611eb4575f611ebe565b611ebe8585614bec565b6001600160401b03811115611ed557611ed561481c565b604051908082528060200260200182016040528015611f0e57816020015b611efb614383565b815260200190600190039081611ef35790505b509050845b848110156121ae575f84815261010760205260408120805483908110611f3b57611f3b614b4d565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff166005811115611f7d57611f7d614722565b6005811115611f8e57611f8e614722565b8152602001600182018054611fa290614c17565b80601f0160208091040260200160405190810160405280929190818152602001828054611fce90614c17565b80156120195780601f10611ff057610100808354040283529160200191612019565b820191905f5260205f20905b815481529060010190602001808311611ffc57829003601f168201915b5050505050815260200160028201805461203290614c17565b80601f016020809104026020016040519081016040528092919081815260200182805461205e90614c17565b80156120a95780601f10612080576101008083540402835291602001916120a9565b820191905f5260205f20905b81548152906001019060200180831161208c57829003601f168201915b505050505081526020016003820180546120c290614c17565b80601f01602080910402602001604051908101604052809291908181526020018280546120ee90614c17565b80156121395780601f1061211057610100808354040283529160200191612139565b820191905f5260205f20905b81548152906001019060200180831161211c57829003601f168201915b505050918352505060048201546001600160a01b0316602082015260058201546040820152600682015460608201526007909101546080909101528361217f8985614bec565b8151811061218f5761218f614b4d565b60200260200101819052505080806121a690614bff565b915050611f13565b5098975050505050505050565b5f6101005460ff546121cd9190614bec565b905090565b60fb546121f0903390600160501b90046001600160a01b0316613b10565b611821613c55565b5f8183111561221a5760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f90815261010660205260408120549061224a825f908152610107602052604090205490565b9050808411612259578361225b565b805b93505f855b858110156122b8575f8481526101076020526040812080548390811061228857612288614b4d565b905f5260205f200154905061229c81613c92565b156122af57826122ab81614d7a565b9350505b50600101612260565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f0361230f576040516334d6e01560e01b815260040160405180910390fd5b5f8261231c600186614bec565b6123269190614bd5565b612331906001614b3a565b90505f61233e8483614b3a565b905060fe54811161234f5780612353565b60fe545b90505f846001600160401b0381111561236e5761236e61481c565b6040519080825280602002602001820160405280156123a757816020015b612394614383565b81526020019060019003908161238c5790505b5090505f835b8381101561262c576123be81613785565b1561261a575f818152610102602052604090819020815161010081019092528054829060ff1660058111156123f5576123f5614722565b600581111561240657612406614722565b815260200160018201805461241a90614c17565b80601f016020809104026020016040519081016040528092919081815260200182805461244690614c17565b80156124915780601f1061246857610100808354040283529160200191612491565b820191905f5260205f20905b81548152906001019060200180831161247457829003601f168201915b505050505081526020016002820180546124aa90614c17565b80601f01602080910402602001604051908101604052809291908181526020018280546124d690614c17565b80156125215780601f106124f857610100808354040283529160200191612521565b820191905f5260205f20905b81548152906001019060200180831161250457829003601f168201915b5050505050815260200160038201805461253a90614c17565b80601f016020809104026020016040519081016040528092919081815260200182805461256690614c17565b80156125b15780601f10612588576101008083540402835291602001916125b1565b820191905f5260205f20905b81548152906001019060200180831161259457829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152835184908490811061260057612600614b4d565b6020026020010181905250818061261690614bff565b9250505b8061262481614bff565b9150506123ad565b50815295945050505050565b5f61264281613a1b565b61264b8261324a565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb546126df903390600160501b90046001600160a01b0316613700565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b490602001611345565b60fb5460408051637a87fa0b60e01b81529051612769923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610ebe573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da990602001611345565b6101056020525f90815260409020805460018201805460ff80841694610100909404169291906127ce90614c17565b80601f01602080910402602001604051908101604052809291908181526020018280546127fa90614c17565b80156128455780601f1061281c57610100808354040283529160200191612845565b820191905f5260205f20905b81548152906001019060200180831161282857829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f8281526065602052604090206001015461288281613a1b565b6115f88383613aaa565b610107602052815f5260405f2081815481106128a6575f80fd5b905f5260205f20015f91509150505481565b6128c06133ff565b6128c8613204565b5f6128d233613be7565b90505f806128e288878686613f18565b915091505f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015612938573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061295c9190614a96565b90505f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129d49190614a96565b90505f5b84811015612e3357816001600160a01b0316639f55941b8d8d84818110612a0157612a01614b4d565b9050602002810190612a139190614b61565b8d8d86818110612a2557612a25614b4d565b9050602002810190612a379190614b61565b8d8d88818110612a4957612a49614b4d565b9050602002810190612a5b9190614b61565b6040518763ffffffff1660e01b8152600401612a7c96959493929190614d9f565b5f604051808303815f87803b158015612a93575f80fd5b505af1158015612aa5573d5f803e3d5ffd5b505050505f836001600160a01b0316637f70ce0d6001898589612ac89190614b3a565b60fe546040516001600160e01b031960e087901b16815260ff90941660048501526024840192909252604483015260648201526084016020604051808303815f875af1158015612b1a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b3e9190614a96565b604080516101008101909152909150805f81526020018e8e85818110612b6657612b66614b4d565b9050602002810190612b789190614b61565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018c8c85818110612bc357612bc3614b4d565b9050602002810190612bd59190614b61565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018a8a85818110612c2057612c20614b4d565b9050602002810190612c329190614b61565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b03841660208084019190915260408084018c905260608401839052608090930182905260fe54825261010290522081518154829060ff19166001836005811115612cba57612cba614722565b021790555060208201516001820190612cd39082614de7565b5060408201516002820190612ce89082614de7565b5060608201516003820190612cfd9082614de7565b5060808201516004820180546001600160a01b0319166001600160a01b0390921691909117905560a0820151600582015560c0820151600682015560e09091015160079091015560fe546101038e8e85818110612d5c57612d5c614b4d565b9050602002810190612d6e9190614b61565b604051612d7c929190614ba3565b9081526040805160209281900383019020929092555f898152610107825291822060fe5481546001810183559184529190922090910155337fab5128638b64e6216e80dfafa70d3cb6d54913a536dc41e76eb4a04cfbe979cf8e8e85818110612de757612de7614b4d565b9050602002810190612df99190614b61565b60fe54604051612e0b93929190614bb2565b60405180910390a260fe8054905f612e2283614bff565b9190505550816001019150506129d8565b5060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ea99190614a96565b6001600160a01b031663eda0ae128560fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f2d9190614b0f565b612f379190614bd5565b8d8d8d8d8b8a6040518863ffffffff1660e01b8152600401612f5e96959493929190614f2e565b5f604051808303818588803b158015612f75575f80fd5b505af1158015612f87573d5f803e3d5ffd5b50505050505050505050611298600160c955565b5f80612fa633613be7565b5f818152610105602052604090205490915083151561010090910460ff16151503612fe457604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613035573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130599190614b0f565b5f82815261010860205260409020546130729190614b3a565b4310156130925760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b031691508215613189576001600160a01b038216311561311157816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156130fa575f80fd5b505af115801561310c573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613162573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131869190614a96565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff16156118215760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016117e4565b6001600160a01b038116611d875760405163d92e233d60e01b815260040160405180910390fd5b6040518060a00160405280600115158152602001851515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b0384166020808401919091523360409384015260fd548252610105815290829020835181549285015161ffff1990931690151561ff00191617610100921515929092029190911781559082015160018201906133279082614de7565b5060608201516002820180546001600160a01b03199081166001600160a01b039384161790915560809093015160039092018054909316911617905560fd8054335f9081526101066020908152604080832084905592825261010890529081204390558154919061339783614bff565b9190505550336001600160a01b03167f55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd482600160fd546133d79190614bec565b604080516001600160a01b039093168352602083019190915287151590820152606001611993565b600260c954036134515760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016117e4565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa1580156134a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134c79190614af4565b6115f85760405163168dfea160e01b815260040160405180910390fd5b80158061351257505f818152610102602052604081205460ff16600581111561350f5761350f614722565b14155b15611d87576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff80548452610104909252822083905580549161356983614bff565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa1580156135ee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136129190614a96565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa158015613671573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136959190614b0f565b6136a790673782dace9d900000614bec565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b1580156136e4575f80fd5b505af11580156136f6573d5f803e3d5ffd5b5050505050505050565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa158015613744573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137689190614af4565b6117f75760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff1660058111156137ba576137ba614722565b60058111156137cb576137cb614722565b81526020016001820180546137df90614c17565b80601f016020809104026020016040519081016040528092919081815260200182805461380b90614c17565b80156138565780601f1061382d57610100808354040283529160200191613856565b820191905f5260205f20905b81548152906001019060200180831161383957829003601f168201915b5050505050815260200160028201805461386f90614c17565b80601f016020809104026020016040519081016040528092919081815260200182805461389b90614c17565b80156138e65780601f106138bd576101008083540402835291602001916138e6565b820191905f5260205f20905b8154815290600101906020018083116138c957829003601f168201915b505050505081526020016003820180546138ff90614c17565b80601f016020809104026020016040519081016040528092919081815260200182805461392b90614c17565b80156139765780601f1061394d57610100808354040283529160200191613976565b820191905f5260205f20905b81548152906001019060200180831161395957829003601f168201915b50505091835250506004828101546001600160a01b031660208301526005830154604083015260068301546060830152600790920154608090910152909150815160058111156139c8576139c8614722565b149392505050565b806101015f8282546139e29190614bec565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece390602001611345565b611d878133614133565b613a2f82826122c3565b6117f7575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613a663390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b613ab482826122c3565b156117f7575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015613b54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b789190614af4565b6117f75760405163c4230ae360e01b815260040160405180910390fd5b613b9d61418c565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381165f908152610106602052604081205490819003613c215760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff16613c505760405163c11cb1df60e01b815260040160405180910390fd5b919050565b613c5d613204565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613bca3390565b5f818152610102602052604080822081516101008101909252805483929190829060ff166005811115613cc757613cc7614722565b6005811115613cd857613cd8614722565b8152602001600182018054613cec90614c17565b80601f0160208091040260200160405190810160405280929190818152602001828054613d1890614c17565b8015613d635780601f10613d3a57610100808354040283529160200191613d63565b820191905f5260205f20905b815481529060010190602001808311613d4657829003601f168201915b50505050508152602001600282018054613d7c90614c17565b80601f0160208091040260200160405190810160405280929190818152602001828054613da890614c17565b8015613df35780601f10613dca57610100808354040283529160200191613df3565b820191905f5260205f20905b815481529060010190602001808311613dd657829003601f168201915b50505050508152602001600382018054613e0c90614c17565b80601f0160208091040260200160405190810160405280929190818152602001828054613e3890614c17565b8015613e835780601f10613e5a57610100808354040283529160200191613e83565b820191905f5260205f20905b815481529060010190602001808311613e6657829003601f168201915b505050918352505060048201546001600160a01b0316602082015260058083015460408301526006830154606083015260079092015460809091015290915081516005811115613ed557613ed5614722565b1480613ef35750600281516005811115613ef157613ef1614722565b145b80613f105750600181516005811115613f0e57613f0e614722565b145b159392505050565b5f808486141580613f295750838614155b15613f475760405163e5fe884360e01b815260040160405180910390fd5b859150811580613f5c575060fb5461ffff1682115b15613f7a576040516379b348ff60e11b815260040160405180910390fd5b505f828152610107602052604081205490613f963382846121f8565b60fb546001600160401b03918216925062010000900416613fb78483614b3a565b1115613fd657604051633e10caad60e21b815260040160405180910390fd5b613fe8673782dace9d90000084614bd5565b341461400757604051635aaa2d1f60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b031663aa9537956040518163ffffffff1660e01b8152600401602060405180830381865afa158015614058573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061407c9190614a96565b6001600160a01b031663b178e38e3360016140978786614b3a565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260ff90911660248301526044820152606401602060405180830381865afa1580156140e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061410c9190614af4565b61412957604051633bf053fd60e11b815260040160405180910390fd5b5094509492505050565b61413d82826122c3565b6117f75761414a816141d5565b6141558360206141e7565b604051602001614166929190614f6a565b60408051601f198184030181529082905262461bcd60e51b82526117e491600401614fde565b60975460ff166118215760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016117e4565b6060610b2b6001600160a01b03831660145b60605f6141f5836002614bd5565b614200906002614b3a565b6001600160401b038111156142175761421761481c565b6040519080825280601f01601f191660200182016040528015614241576020820181803683370190505b509050600360fc1b815f8151811061425b5761425b614b4d565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061428957614289614b4d565b60200101906001600160f81b03191690815f1a9053505f6142ab846002614bd5565b6142b6906001614b3a565b90505b600181111561432d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106142ea576142ea614b4d565b1a60f81b82828151811061430057614300614b4d565b60200101906001600160f81b03191690815f1a90535060049490941c9361432681614ff0565b90506142b9565b50831561437c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016117e4565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f602082840312156143dd575f80fd5b81356001600160e01b03198116811461437c575f80fd5b8015158114611d87575f80fd5b5f8083601f840112614411575f80fd5b5081356001600160401b03811115614427575f80fd5b60208301915083602082850101111561443e575f80fd5b9250929050565b6001600160a01b0381168114611d87575f80fd5b5f805f806060858703121561446c575f80fd5b8435614477816143f4565b935060208501356001600160401b03811115614491575f80fd5b61449d87828801614401565b90945092505060408501356144b181614445565b939692955090935050565b5f8083601f8401126144cc575f80fd5b5081356001600160401b038111156144e2575f80fd5b6020830191508360208260051b850101111561443e575f80fd5b5f805f805f8060608789031215614511575f80fd5b86356001600160401b0380821115614527575f80fd5b6145338a838b016144bc565b9098509650602089013591508082111561454b575f80fd5b6145578a838b016144bc565b9096509450604089013591508082111561456f575f80fd5b5061457c89828a016144bc565b979a9699509497509295939492505050565b5f6020828403121561459e575f80fd5b5035919050565b5f602082840312156145b5575f80fd5b813561ffff8116811461437c575f80fd5b5f80602083850312156145d7575f80fd5b82356001600160401b038111156145ec575f80fd5b6145f8858286016144bc565b90969095509350505050565b5f8060408385031215614615575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b818110156146645783516001600160a01b03168352928401929184019160010161463f565b50909695505050505050565b5f8060408385031215614681575f80fd5b82359150602083013561469381614445565b809150509250929050565b5f80602083850312156146af575f80fd5b82356001600160401b038111156146c4575f80fd5b6145f885828601614401565b5f805f604084860312156146e2575f80fd5b83356001600160401b038111156146f7575f80fd5b61470386828701614401565b909450925050602084013561471781614445565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b6006811061475257634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015614770578181015183820152602001614758565b50505f910152565b5f815180845261478f816020860160208601614756565b601f01601f19169290920160200192915050565b5f6101006147b1838c614736565b8060208401526147c38184018b614778565b905082810360408401526147d7818a614778565b905082810360608401526147eb8189614778565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215614840575f80fd5b81356001600160401b0380821115614856575f80fd5b818401915084601f830112614869575f80fd5b81358181111561487b5761487b61481c565b604051601f8201601f19908116603f011681019083821181831017156148a3576148a361481c565b816040528281528760208487010111156148bb575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f602082840312156148ea575f80fd5b81356001600160401b038116811461437c575f80fd5b5f805f60608486031215614912575f80fd5b833561491d81614445565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b83811015614a0e57603f198984030185528151610100614978858351614736565b88820151818a87015261498d82870182614778565b91505087820151858203898701526149a58282614778565b915050606080830151868303828801526149bf8382614778565b925050506080808301516149dd828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e09182015191909401529386019390860190600101614957565b509098975050505050505050565b5f60208284031215614a2c575f80fd5b813561437c81614445565b8515158152841515602082015260a060408201525f614a5960a0830186614778565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f60208284031215614a8b575f80fd5b813561437c816143f4565b5f60208284031215614aa6575f80fd5b815161437c81614445565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f614aec602083018486614ab1565b949350505050565b5f60208284031215614b04575f80fd5b815161437c816143f4565b5f60208284031215614b1f575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2b57610b2b614b26565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112614b76575f80fd5b8301803591506001600160401b03821115614b8f575f80fd5b60200191503681900382131561443e575f80fd5b818382375f9101908152919050565b604081525f614bc5604083018587614ab1565b9050826020830152949350505050565b8082028115828204841417610b2b57610b2b614b26565b81810381811115610b2b57610b2b614b26565b5f60018201614c1057614c10614b26565b5060010190565b600181811c90821680614c2b57607f821691505b602082108103614c4957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156115f8575f81815260208120601f850160051c81016020861015614c755750805b601f850160051c820191505b8181101561129857828155600101614c81565b6001600160401b03831115614cab57614cab61481c565b614cbf83614cb98354614c17565b83614c4f565b5f601f841160018114614cf0575f8515614cd95750838201355b5f19600387901b1c1916600186901b178355614d48565b5f83815260209020601f19861690835b82811015614d205786850135825560209485019460019092019101614d00565b5086821015614d3c575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f614d62604083018587614ab1565b905060018060a01b0383166020830152949350505050565b5f6001600160401b03808316818103614d9557614d95614b26565b6001019392505050565b606081525f614db260608301888a614ab1565b8281036020840152614dc5818789614ab1565b90508281036040840152614dda818587614ab1565b9998505050505050505050565b81516001600160401b03811115614e0057614e0061481c565b614e1481614e0e8454614c17565b84614c4f565b602080601f831160018114614e47575f8415614e305750858301515b5f19600386901b1c1916600185901b178555611298565b5f85815260208120601f198616915b82811015614e7557888601518255948401946001909101908401614e56565b5085821015614e9257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8183525f6020808501808196508560051b81019150845f5b87811015614f215782840389528135601e19883603018112614eda575f80fd5b870185810190356001600160401b03811115614ef4575f80fd5b803603821315614f02575f80fd5b614f0d868284614ab1565b9a87019a9550505090840190600101614eba565b5091979650505050505050565b608081525f614f4160808301888a614ea2565b8281036020840152614f54818789614ea2565b6040840195909552505060600152949350505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351614fa1816017850160208801614756565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614fd2816028840160208801614756565b01602801949350505050565b602081525f61437c6020830184614778565b5f81614ffe57614ffe614b26565b505f19019056fea2646970667358221220c40d1ffd6c13d5b73997805a16431fa2babd5a905d252deff178b96de5d3283664736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CooldownNotComplete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicatePoolIDOrPoolNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InSufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBondEthValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidKeyCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartAndEndIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MisMatchingInputKeysSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoChangeInState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSDCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorAlreadyOnBoardedInProtocol\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorIsDeactivate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorNotOnBoarded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PageNumberIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PubkeyAlreadyExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyVerifiedKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyWithdrawnKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UNEXPECTED_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"maxKeyLimitReached\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"AddedValidatorKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"DecreasedTotalActiveValidatorCount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"IncreasedTotalActiveValidatorCount\",\"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\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nodeRewardAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"OnboardedOperator\",\"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\":\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredCollateralToPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"batchKeyDepositLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedInputKeyCountLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"UpdatedMaxNonTerminalKeyPerOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"UpdatedNextQueuedValidatorIndex\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardAddress\",\"type\":\"address\"}],\"name\":\"UpdatedOperatorDetails\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"UpdatedSocializingPoolState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"}],\"name\":\"UpdatedValidatorDepositBlock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedVerifiedKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedWithdrawnKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedAsFrontRunned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedReadyToDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorStatusMarkedAsInvalidSignature\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COLLATERAL_ETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRONT_RUN_PENALTY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ID\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_depositSignature\",\"type\":\"bytes[]\"}],\"name\":\"addValidatorKeys\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"changeSocializingPoolState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllNodeELVaultAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorRewardAddress\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalKeys\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getSocializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsByOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"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\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"increaseTotalActiveValidatorCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inputKeyCountLimit\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_readyToDepositPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_frontRunPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_invalidSignaturePubkey\",\"type\":\"bytes[]\"}],\"name\":\"markValidatorReadyToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNonTerminalKeyPerOperator\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextQueuedValidatorIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextValidatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nodeELRewardVaultByOperatorId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_operatorRewardAddress\",\"type\":\"address\"}],\"name\":\"onboardNodeOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorIDByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"operatorStructById\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"operatorRewardAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorAddress\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queuedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"socializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"totalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferCollateralToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"}],\"name\":\"updateDepositStatusAndBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_inputKeyCountLimit\",\"type\":\"uint16\"}],\"name\":\"updateInputKeyCountLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"updateMaxNonTerminalKeyPerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"updateNextQueuedValidatorIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_rewardAddress\",\"type\":\"address\"}],\"name\":\"updateOperatorDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateVerifiedKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"validatorIdByPubkey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorIdsByOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorRegistry\",\"outputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifiedKeyBatchSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"withdrawnValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b5060405162004c7238038062004c728339810160408190526200003391620004c6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001f1565b6200010e82620001f1565b620001186200021c565b6200012262000278565b6200012c620002dc565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff00009091166a01000000000000000000006001600160a01b0386160261ffff1916171762010000600160501b03191662320000179055603260fc55620001a25f8462000340565b8015620001e8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620004fc565b6001600160a01b038116620002195760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002765760405162461bcd60e51b815260206004820152602b60248201525f8051602062004c5283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002d25760405162461bcd60e51b815260206004820152602b60248201525f8051602062004c5283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b62000276620003e3565b5f54610100900460ff16620003365760405162461bcd60e51b815260206004820152602b60248201525f8051602062004c5283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200027662000449565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16620003df575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200039e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff166200043d5760405162461bcd60e51b815260206004820152602b60248201525f8051602062004c5283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff16620004a35760405162461bcd60e51b815260206004820152602b60248201525f8051602062004c5283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b0381168114620004c1575f80fd5b919050565b5f8060408385031215620004d8575f80fd5b620004e383620004aa565b9150620004f360208401620004aa565b90509250929050565b614748806200050a5f395ff3fe60806040526004361061035b575f3560e01c806383ea2358116101bd578063bb7306bf116100f2578063deacde2b11610092578063ebb5c1741161006d578063ebb5c17414610a64578063f7c0918914610a90578063f90b083814610aa5578063f9c4dda414610ac4575f80fd5b8063deacde2b146109fe578063e0bf8b5314610a11578063e0d7d0e914610a3e575f80fd5b8063c8a00e7a116100cd578063c8a00e7a14610964578063cac8b30614610994578063d547741f146109c0578063d5e1e5ce146109df575f80fd5b8063bb7306bf146108f1578063bc4a3ad51461090c578063c34ade5c14610938575f80fd5b8063998888981161015d578063ab3e71eb11610138578063ab3e71eb14610884578063af533aa814610899578063b01db078146108b8578063b8d2f06c146108d2575f80fd5b806399888898146108335780639ee804cb14610852578063a217fddf14610871575f80fd5b806384b0fa4c1161019857806384b0fa4c146107aa5780638a25bcec146107c057806391d14854146107df5780639344b242146107fe575f80fd5b806383ea23581461073257806384522a6d1461076a5780638456cb5914610796575f80fd5b806349911bfb116102935780635c2c30a511610233578063683547b81161020e578063683547b8146106c757806374338e6d146106f357806377c359e1146107095780637bd977d91461071e575f80fd5b80635c2c30a5146106595780635c975abb1461069157806360c3cf3f146106a8575f80fd5b806358a994ea1161026e57806358a994ea146105c957806359c3c9b7146105e85780635a1239c1146106075780635ae7f25d1461063a575f80fd5b806349911bfb1461055c5780634f59ed801461057157806350d5d7ab1461058c575f80fd5b80632d1dbd74116102fe57806336514d9f116102d957806336514d9f146104e457806336568abe146105035780633f4ba83a14610522578063490ffa3514610536575f80fd5b80632d1dbd74146104845780632d32924f146104995780632f2ff15d146104c5575f80fd5b8063186d954111610339578063186d9541146103eb578063248a9ca31461040a5780632517cfbf14610446578063264f27f314610465575f80fd5b806301ffc9a71461035f578063044d2fe81461039357806313797bff146103ca575b5f80fd5b34801561036a575f80fd5b5061037e610379366004613bea565b610afb565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103b26103ad366004613c76565b610b31565b6040516001600160a01b03909116815260200161038a565b3480156103d5575f80fd5b506103e96103e4366004613d19565b610f50565b005b3480156103f6575f80fd5b506103e9610405366004613dab565b611397565b348015610415575f80fd5b50610438610424366004613dab565b5f9081526065602052604090206001015490565b60405190815260200161038a565b348015610451575f80fd5b506103e9610460366004613dc2565b611447565b348015610470575f80fd5b506103e961047f366004613de3565b6114a9565b34801561048f575f80fd5b5061043860fd5481565b3480156104a4575f80fd5b506104b86104b3366004613e21565b6116f4565b60405161038a9190613e41565b3480156104d0575f80fd5b506103e96104df366004613e8d565b611828565b3480156104ef575f80fd5b5061037e6104fe366004613ebb565b61184c565b34801561050e575f80fd5b506103e961051d366004613e8d565b611879565b34801561052d575f80fd5b506103e96118fc565b348015610541575f80fd5b5060fb546103b290600160501b90046001600160a01b031681565b348015610567575f80fd5b5061043860ff5481565b34801561057c575f80fd5b50610438673782dace9d90000081565b348015610597575f80fd5b5060fb546105b1906201000090046001600160401b031681565b6040516001600160401b03909116815260200161038a565b3480156105d4575f80fd5b506103e96105e3366004613eed565b611924565b3480156105f3575f80fd5b506103e9610602366004613dab565b611aa2565b348015610612575f80fd5b50610626610621366004613dab565b611b42565b60405161038a989796959493929190613fc0565b348015610645575f80fd5b506103e9610654366004613dab565b611d24565b348015610664575f80fd5b5061043861067336600461404d565b80516020818301810180516101038252928201919093012091525481565b34801561069c575f80fd5b5060975460ff1661037e565b3480156106b3575f80fd5b506103e96106c23660046140f7565b611e8b565b3480156106d2575f80fd5b506106e66106e136600461411d565b611f05565b60405161038a919061414f565b3480156106fe575f80fd5b506104386101005481565b348015610714575f80fd5b5061010154610438565b348015610729575f80fd5b506104386122bc565b34801561073d575f80fd5b506103b261074c366004613dab565b5f90815261010560205260409020600201546001600160a01b031690565b348015610775575f80fd5b50610438610784366004613dab565b6101086020525f908152604090205481565b3480156107a1575f80fd5b506103e96122d3565b3480156107b5575f80fd5b506104386101015481565b3480156107cb575f80fd5b506105b16107da36600461411d565b6122f9565b3480156107ea575f80fd5b5061037e6107f9366004613e8d565b6123c4565b348015610809575f80fd5b506103b2610818366004613dab565b6101096020525f90815260409020546001600160a01b031681565b34801561083e575f80fd5b506106e661084d366004613e21565b6123ee565b34801561085d575f80fd5b506103e961086c366004614239565b612739565b34801561087c575f80fd5b506104385f81565b34801561088f575f80fd5b5061043860fc5481565b3480156108a4575f80fd5b506103e96108b3366004613dab565b6127c2565b3480156108c3575f80fd5b50673782dace9d900000610438565b3480156108dd575f80fd5b506103e96108ec366004613dab565b612815565b3480156108fc575f80fd5b506104386729a2241af62c000081565b348015610917575f80fd5b50610438610926366004613dab565b6101046020525f908152604090205481565b348015610943575f80fd5b50610438610952366004613dab565b5f908152610107602052604090205490565b34801561096f575f80fd5b5061098361097e366004613dab565b6128a0565b60405161038a959493929190614254565b34801561099f575f80fd5b506104386109ae366004614239565b6101066020525f908152604090205481565b3480156109cb575f80fd5b506103e96109da366004613e8d565b612969565b3480156109ea575f80fd5b506104386109f9366004613e21565b61298d565b6103e9610a0c366004613d19565b6129b9565b348015610a1c575f80fd5b5060fb54610a2b9061ffff1681565b60405161ffff909116815260200161038a565b348015610a49575f80fd5b50610a52600181565b60405160ff909116815260200161038a565b348015610a6f575f80fd5b50610438610a7e366004613dab565b5f908152610108602052604090205490565b348015610a9b575f80fd5b5061043860fe5481565b348015610ab0575f80fd5b506103b2610abf366004614298565b6129d3565b348015610acf575f80fd5b5061037e610ade366004614239565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b2b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b3a612c3c565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb091906142b3565b905060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2791906142b3565b604051636fc4c27f60e11b8152600160048201526001600160a01b039182169183169063df8984fe90602401602060405180830381865afa158015610c6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9291906142b3565b6001600160a01b031614610cb9576040516303b8ffef60e41b815260040160405180910390fd5b604051639f7053f560e01b81526001600160a01b03821690639f7053f590610ce790889088906004016142f6565b5f604051808303815f87803b158015610cfe575f80fd5b505af1158015610d10573d5f803e3d5ffd5b50505050610d1d83612c82565b604051633e71376960e21b81523360048201526001600160a01b0382169063f9c4dda490602401602060405180830381865afa158015610d5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d839190614311565b15610da15760405163707999fb60e11b815260040160405180910390fd5b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e1791906142b3565b60fd54604051636a0b688160e01b81526001600482015260248101919091526001600160a01b039190911690636a0b6881906044016020604051808303815f875af1158015610e68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8c91906142b3565b60fd545f9081526101096020526040902080546001600160a01b0319166001600160a01b038316179055905086610ec35780610f38565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3891906142b3565b9250610f4687878787612ca9565b5050949350505050565b610f58612e37565b610f60612c3c565b60fb5460408051633871d0f160e01b81529051610fde923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd9919061432c565b612e90565b60fc5485908490839081610ff28486614357565b610ffc9190614357565b111561101b5760405163525e3de760e01b815260040160405180910390fd5b5f5b838110156110e4575f6101038b8b8481811061103b5761103b61436a565b905060200281019061104d919061437e565b60405161105b9291906143c0565b908152602001604051809103902054905061107581612f1c565b61107e81612f68565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b848181106110b1576110b161436a565b90506020028101906110c3919061437e565b836040516110d3939291906143cf565b60405180910390a15060010161101d565b5081156111c15760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116091906142b3565b6001600160a01b0316638d0d8cb66111806729a2241af62c0000856143f2565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156111a9575f80fd5b505af11580156111bb573d5f803e3d5ffd5b50505050505b5f5b828110156112b7575f6101038989848181106111e1576111e161436a565b90506020028101906111f3919061437e565b6040516112019291906143c0565b908152602001604051809103902054905061121b81612f1c565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b834668989848181106112845761128461436a565b9050602002810190611296919061437e565b836040516112a6939291906143cf565b60405180910390a1506001016111c3565b505f5b81811015611381575f6101038787848181106112d8576112d861436a565b90506020028101906112ea919061437e565b6040516112f89291906143c0565b908152602001604051809103902054905061131281612f1c565b61131b81612fa9565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f87878481811061134e5761134e61436a565b9050602002810190611360919061437e565b83604051611370939291906143cf565b60405180910390a1506001016112ba565b5050505061138f600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b815290516113ec923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb54611465903390600160501b90046001600160a01b0316613138565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c369060200161143c565b60fb5460408051633871d0f160e01b815290516114fe923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa15801561154c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611570919061432c565b81111561159057604051639519af4360e01b815260040160405180910390fd5b5f5b818110156116e5575f6101038585848181106115b0576115b061436a565b90506020028101906115c2919061437e565b6040516115d09291906143c0565b90815260200160405180910390205490506115ea816131bd565b611607576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b158015611669575f80fd5b505af115801561167b573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf798585848181106116b2576116b261436a565b90506020028101906116c4919061437e565b836040516116d4939291906143cf565b60405180910390a150600101611592565b506116ef81613408565b505050565b6060825f03611716576040516334d6e01560e01b815260040160405180910390fd5b5f82611723600186614409565b61172d91906143f2565b611738906001614357565b90505f6117458483614357565b905060fd548111611756578061175a565b60fd545b90505f82821161176a575f611774565b6117748383614409565b6001600160401b0381111561178b5761178b614039565b6040519080825280602002602001820160405280156117b4578160200160208202803683370190505b509050825b8281101561181e575f81815261010960205260409020546001600160a01b0316826117e48684614409565b815181106117f4576117f461436a565b6001600160a01b0390921660209283029190910190910152806118168161441c565b9150506117b9565b5095945050505050565b5f8281526065602052604090206001015461184281613453565b6116ef838361345d565b5f61010383836040516118609291906143c0565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146118ee5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6118f882826134e2565b5050565b60fb5461191a903390600160501b90046001600160a01b0316613548565b6119226135cd565b565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611975573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199991906142b3565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b81526004016119c69291906142f6565b5f604051808303815f87803b1580156119dd575f80fd5b505af11580156119ef573d5f803e3d5ffd5b505050506119fc81612c82565b611a053361361f565b50335f9081526101066020908152604080832054808452610105909252909120600101611a338486836144b1565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d8726977790611a949087908790879061456c565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b81529051611af7923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b806101015f828254611b099190614357565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f29060200161143c565b6101026020525f90815260409020805460018201805460ff9092169291611b6890614434565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9490614434565b8015611bdf5780601f10611bb657610100808354040283529160200191611bdf565b820191905f5260205f20905b815481529060010190602001808311611bc257829003601f168201915b505050505090806002018054611bf490614434565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2090614434565b8015611c6b5780601f10611c4257610100808354040283529160200191611c6b565b820191905f5260205f20905b815481529060010190602001808311611c4e57829003601f168201915b505050505090806003018054611c8090614434565b80601f0160208091040260200160405190810160405280929190818152602001828054611cac90614434565b8015611cf75780601f10611cce57610100808354040283529160200191611cf7565b820191905f5260205f20905b815481529060010190602001808311611cda57829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611d2c612e37565b60fb5460408051637a87fa0b60e01b81529051611d81923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df691906142b3565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611e2e575f80fd5b505af1158015611e40573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a81604051611e7691815260200190565b60405180910390a1611e88600160c955565b50565b60fb54611ea9903390600160501b90046001600160a01b0316613548565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a29060200161143c565b6060825f03611f27576040516334d6e01560e01b815260040160405180910390fd5b5f82611f34600186614409565b611f3e91906143f2565b90505f611f4b8483614357565b6001600160a01b0387165f9081526101066020526040812054919250819003611f875760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311611fa35782611fa5565b805b92505f848411611fb5575f611fbf565b611fbf8585614409565b6001600160401b03811115611fd657611fd6614039565b60405190808252806020026020018201604052801561200f57816020015b611ffc613ba0565b815260200190600190039081611ff45790505b509050845b848110156122af575f8481526101076020526040812080548390811061203c5761203c61436a565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff16600581111561207e5761207e613f3f565b600581111561208f5761208f613f3f565b81526020016001820180546120a390614434565b80601f01602080910402602001604051908101604052809291908181526020018280546120cf90614434565b801561211a5780601f106120f15761010080835404028352916020019161211a565b820191905f5260205f20905b8154815290600101906020018083116120fd57829003601f168201915b5050505050815260200160028201805461213390614434565b80601f016020809104026020016040519081016040528092919081815260200182805461215f90614434565b80156121aa5780601f10612181576101008083540402835291602001916121aa565b820191905f5260205f20905b81548152906001019060200180831161218d57829003601f168201915b505050505081526020016003820180546121c390614434565b80601f01602080910402602001604051908101604052809291908181526020018280546121ef90614434565b801561223a5780601f106122115761010080835404028352916020019161223a565b820191905f5260205f20905b81548152906001019060200180831161221d57829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152836122808985614409565b815181106122905761229061436a565b60200260200101819052505080806122a79061441c565b915050612014565b5098975050505050505050565b5f6101005460ff546122ce9190614409565b905090565b60fb546122f1903390600160501b90046001600160a01b0316613548565b61192261368d565b5f8183111561231b5760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f90815261010660205260408120549061234b825f908152610107602052604090205490565b905080841161235a578361235c565b805b93505f855b858110156123b9575f848152610107602052604081208054839081106123895761238961436a565b905f5260205f200154905061239d816136ca565b156123b057826123ac81614597565b9350505b50600101612361565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f03612410576040516334d6e01560e01b815260040160405180910390fd5b5f8261241d600186614409565b61242791906143f2565b612432906001614357565b90505f61243f8483614357565b905060fe5481116124505780612454565b60fe545b90505f846001600160401b0381111561246f5761246f614039565b6040519080825280602002602001820160405280156124a857816020015b612495613ba0565b81526020019060019003908161248d5790505b5090505f835b8381101561272d576124bf816131bd565b1561271b575f818152610102602052604090819020815161010081019092528054829060ff1660058111156124f6576124f6613f3f565b600581111561250757612507613f3f565b815260200160018201805461251b90614434565b80601f016020809104026020016040519081016040528092919081815260200182805461254790614434565b80156125925780601f1061256957610100808354040283529160200191612592565b820191905f5260205f20905b81548152906001019060200180831161257557829003601f168201915b505050505081526020016002820180546125ab90614434565b80601f01602080910402602001604051908101604052809291908181526020018280546125d790614434565b80156126225780601f106125f957610100808354040283529160200191612622565b820191905f5260205f20905b81548152906001019060200180831161260557829003601f168201915b5050505050815260200160038201805461263b90614434565b80601f016020809104026020016040519081016040528092919081815260200182805461266790614434565b80156126b25780601f10612689576101008083540402835291602001916126b2565b820191905f5260205f20905b81548152906001019060200180831161269557829003601f168201915b505050918352505060048201546001600160a01b03166020820152600582015460408201526006820154606082015260079091015460809091015283518490849081106127015761270161436a565b602002602001018190525081806127179061441c565b9250505b806127258161441c565b9150506124ae565b50815295945050505050565b5f61274381613453565b61274c82612c82565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb546127e0903390600160501b90046001600160a01b0316613138565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b49060200161143c565b60fb5460408051637a87fa0b60e01b8152905161286a923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da99060200161143c565b6101056020525f90815260409020805460018201805460ff80841694610100909404169291906128cf90614434565b80601f01602080910402602001604051908101604052809291908181526020018280546128fb90614434565b80156129465780601f1061291d57610100808354040283529160200191612946565b820191905f5260205f20905b81548152906001019060200180831161292957829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f8281526065602052604090206001015461298381613453565b6116ef83836134e2565b610107602052815f5260405f2081815481106129a7575f80fd5b905f5260205f20015f91509150505481565b6129c1612e37565b6129c9612c3c565b61138f600160c955565b5f806129de3361361f565b5f818152610105602052604090205490915083151561010090910460ff16151503612a1c57604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a91919061432c565b5f8281526101086020526040902054612aaa9190614357565b431015612aca5760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b031691508215612bc1576001600160a01b0382163115612b4957816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612b32575f80fd5b505af1158015612b44573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b9a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bbe91906142b3565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff16156119225760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016118e5565b6001600160a01b038116611e885760405163d92e233d60e01b815260040160405180910390fd5b6040518060a00160405280600115158152602001851515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b0384166020808401919091523360409384015260fd548252610105815290829020835181549285015161ffff1990931690151561ff0019161761010092151592909202919091178155908201516001820190612d5f90826145bc565b5060608201516002820180546001600160a01b03199081166001600160a01b039384161790915560809093015160039092018054909316911617905560fd8054335f90815261010660209081526040808320849055928252610108905290812043905581549190612dcf8361441c565b9190505550336001600160a01b03167f55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd482600160fd54612e0f9190614409565b604080516001600160a01b039093168352602083019190915287151590820152606001611a94565b600260c95403612e895760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016118e5565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa158015612edb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eff9190614311565b6116ef5760405163168dfea160e01b815260040160405180910390fd5b801580612f4a57505f818152610102602052604081205460ff166005811115612f4757612f47613f3f565b14155b15611e88576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff805484526101049092528220839055805491612fa18361441c565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa158015613026573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061304a91906142b3565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130cd919061432c565b6130df90673782dace9d900000614409565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b15801561311c575f80fd5b505af115801561312e573d5f803e3d5ffd5b5050505050505050565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa15801561317c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131a09190614311565b6118f85760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff1660058111156131f2576131f2613f3f565b600581111561320357613203613f3f565b815260200160018201805461321790614434565b80601f016020809104026020016040519081016040528092919081815260200182805461324390614434565b801561328e5780601f106132655761010080835404028352916020019161328e565b820191905f5260205f20905b81548152906001019060200180831161327157829003601f168201915b505050505081526020016002820180546132a790614434565b80601f01602080910402602001604051908101604052809291908181526020018280546132d390614434565b801561331e5780601f106132f55761010080835404028352916020019161331e565b820191905f5260205f20905b81548152906001019060200180831161330157829003601f168201915b5050505050815260200160038201805461333790614434565b80601f016020809104026020016040519081016040528092919081815260200182805461336390614434565b80156133ae5780601f10613385576101008083540402835291602001916133ae565b820191905f5260205f20905b81548152906001019060200180831161339157829003601f168201915b50505091835250506004828101546001600160a01b0316602083015260058301546040830152600683015460608301526007909201546080909101529091508151600581111561340057613400613f3f565b149392505050565b806101015f82825461341a9190614409565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece39060200161143c565b611e888133613950565b61346782826123c4565b6118f8575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561349e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6134ec82826123c4565b156118f8575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa15801561358c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135b09190614311565b6118f85760405163c4230ae360e01b815260040160405180910390fd5b6135d56139a9565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381165f9081526101066020526040812054908190036136595760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff166136885760405163c11cb1df60e01b815260040160405180910390fd5b919050565b613695612c3c565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586136023390565b5f818152610102602052604080822081516101008101909252805483929190829060ff1660058111156136ff576136ff613f3f565b600581111561371057613710613f3f565b815260200160018201805461372490614434565b80601f016020809104026020016040519081016040528092919081815260200182805461375090614434565b801561379b5780601f106137725761010080835404028352916020019161379b565b820191905f5260205f20905b81548152906001019060200180831161377e57829003601f168201915b505050505081526020016002820180546137b490614434565b80601f01602080910402602001604051908101604052809291908181526020018280546137e090614434565b801561382b5780601f106138025761010080835404028352916020019161382b565b820191905f5260205f20905b81548152906001019060200180831161380e57829003601f168201915b5050505050815260200160038201805461384490614434565b80601f016020809104026020016040519081016040528092919081815260200182805461387090614434565b80156138bb5780601f10613892576101008083540402835291602001916138bb565b820191905f5260205f20905b81548152906001019060200180831161389e57829003601f168201915b505050918352505060048201546001600160a01b031660208201526005808301546040830152600683015460608301526007909201546080909101529091508151600581111561390d5761390d613f3f565b148061392b575060028151600581111561392957613929613f3f565b145b80613948575060018151600581111561394657613946613f3f565b145b159392505050565b61395a82826123c4565b6118f857613967816139f2565b613972836020613a04565b604051602001613983929190614677565b60408051601f198184030181529082905262461bcd60e51b82526118e5916004016146eb565b60975460ff166119225760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016118e5565b6060610b2b6001600160a01b03831660145b60605f613a128360026143f2565b613a1d906002614357565b6001600160401b03811115613a3457613a34614039565b6040519080825280601f01601f191660200182016040528015613a5e576020820181803683370190505b509050600360fc1b815f81518110613a7857613a7861436a565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110613aa657613aa661436a565b60200101906001600160f81b03191690815f1a9053505f613ac88460026143f2565b613ad3906001614357565b90505b6001811115613b4a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613b0757613b0761436a565b1a60f81b828281518110613b1d57613b1d61436a565b60200101906001600160f81b03191690815f1a90535060049490941c93613b43816146fd565b9050613ad6565b508315613b995760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016118e5565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f60208284031215613bfa575f80fd5b81356001600160e01b031981168114613b99575f80fd5b8015158114611e88575f80fd5b5f8083601f840112613c2e575f80fd5b5081356001600160401b03811115613c44575f80fd5b602083019150836020828501011115613c5b575f80fd5b9250929050565b6001600160a01b0381168114611e88575f80fd5b5f805f8060608587031215613c89575f80fd5b8435613c9481613c11565b935060208501356001600160401b03811115613cae575f80fd5b613cba87828801613c1e565b9094509250506040850135613cce81613c62565b939692955090935050565b5f8083601f840112613ce9575f80fd5b5081356001600160401b03811115613cff575f80fd5b6020830191508360208260051b8501011115613c5b575f80fd5b5f805f805f8060608789031215613d2e575f80fd5b86356001600160401b0380821115613d44575f80fd5b613d508a838b01613cd9565b90985096506020890135915080821115613d68575f80fd5b613d748a838b01613cd9565b90965094506040890135915080821115613d8c575f80fd5b50613d9989828a01613cd9565b979a9699509497509295939492505050565b5f60208284031215613dbb575f80fd5b5035919050565b5f60208284031215613dd2575f80fd5b813561ffff81168114613b99575f80fd5b5f8060208385031215613df4575f80fd5b82356001600160401b03811115613e09575f80fd5b613e1585828601613cd9565b90969095509350505050565b5f8060408385031215613e32575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b81811015613e815783516001600160a01b031683529284019291840191600101613e5c565b50909695505050505050565b5f8060408385031215613e9e575f80fd5b823591506020830135613eb081613c62565b809150509250929050565b5f8060208385031215613ecc575f80fd5b82356001600160401b03811115613ee1575f80fd5b613e1585828601613c1e565b5f805f60408486031215613eff575f80fd5b83356001600160401b03811115613f14575f80fd5b613f2086828701613c1e565b9094509250506020840135613f3481613c62565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110613f6f57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015613f8d578181015183820152602001613f75565b50505f910152565b5f8151808452613fac816020860160208601613f73565b601f01601f19169290920160200192915050565b5f610100613fce838c613f53565b806020840152613fe08184018b613f95565b90508281036040840152613ff4818a613f95565b905082810360608401526140088189613f95565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561405d575f80fd5b81356001600160401b0380821115614073575f80fd5b818401915084601f830112614086575f80fd5b81358181111561409857614098614039565b604051601f8201601f19908116603f011681019083821181831017156140c0576140c0614039565b816040528281528760208487010111156140d8575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f60208284031215614107575f80fd5b81356001600160401b0381168114613b99575f80fd5b5f805f6060848603121561412f575f80fd5b833561413a81613c62565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b8381101561422b57603f198984030185528151610100614195858351613f53565b88820151818a8701526141aa82870182613f95565b91505087820151858203898701526141c28282613f95565b915050606080830151868303828801526141dc8382613f95565b925050506080808301516141fa828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e09182015191909401529386019390860190600101614174565b509098975050505050505050565b5f60208284031215614249575f80fd5b8135613b9981613c62565b8515158152841515602082015260a060408201525f61427660a0830186613f95565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f602082840312156142a8575f80fd5b8135613b9981613c11565b5f602082840312156142c3575f80fd5b8151613b9981613c62565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6143096020830184866142ce565b949350505050565b5f60208284031215614321575f80fd5b8151613b9981613c11565b5f6020828403121561433c575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2b57610b2b614343565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112614393575f80fd5b8301803591506001600160401b038211156143ac575f80fd5b602001915036819003821315613c5b575f80fd5b818382375f9101908152919050565b604081525f6143e26040830185876142ce565b9050826020830152949350505050565b8082028115828204841417610b2b57610b2b614343565b81810381811115610b2b57610b2b614343565b5f6001820161442d5761442d614343565b5060010190565b600181811c9082168061444857607f821691505b60208210810361446657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156116ef575f81815260208120601f850160051c810160208610156144925750805b601f850160051c820191505b8181101561138f5782815560010161449e565b6001600160401b038311156144c8576144c8614039565b6144dc836144d68354614434565b8361446c565b5f601f84116001811461450d575f85156144f65750838201355b5f19600387901b1c1916600186901b178355614565565b5f83815260209020601f19861690835b8281101561453d578685013582556020948501946001909201910161451d565b5086821015614559575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f61457f6040830185876142ce565b905060018060a01b0383166020830152949350505050565b5f6001600160401b038083168181036145b2576145b2614343565b6001019392505050565b81516001600160401b038111156145d5576145d5614039565b6145e9816145e38454614434565b8461446c565b602080601f83116001811461461c575f84156146055750858301515b5f19600386901b1c1916600185901b17855561138f565b5f85815260208120601f198616915b8281101561464a5788860151825594840194600190910190840161462b565b508582101561466757878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516146ae816017850160208801613f73565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516146df816028840160208801613f73565b01602801949350505050565b602081525f613b996020830184613f95565b5f8161470b5761470b614343565b505f19019056fea26469706673582212208594ebb7d050f482beea031d7de363a87238502910d422af432180af383ad7b364736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // PermissionlessNodeRegistryABI is the input ABI used to generate the binding from. @@ -1541,21 +1541,21 @@ func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) // OnboardNodeOperator is a paid mutator transaction binding the contract method 0x044d2fe8. // -// Solidity: function onboardNodeOperator(bool _optInForSocializingPool, string _operatorName, address _operatorRewardAddress) returns(address poolUtils) +// Solidity: function onboardNodeOperator(bool _optInForSocializingPool, string _operatorName, address _operatorRewardAddress) returns(address feeRecipientAddress) func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) OnboardNodeOperator(opts *bind.TransactOpts, _optInForSocializingPool bool, _operatorName string, _operatorRewardAddress common.Address) (*types.Transaction, error) { return _PermissionlessNodeRegistry.contract.Transact(opts, "onboardNodeOperator", _optInForSocializingPool, _operatorName, _operatorRewardAddress) } // OnboardNodeOperator is a paid mutator transaction binding the contract method 0x044d2fe8. // -// Solidity: function onboardNodeOperator(bool _optInForSocializingPool, string _operatorName, address _operatorRewardAddress) returns(address poolUtils) +// Solidity: function onboardNodeOperator(bool _optInForSocializingPool, string _operatorName, address _operatorRewardAddress) returns(address feeRecipientAddress) func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) OnboardNodeOperator(_optInForSocializingPool bool, _operatorName string, _operatorRewardAddress common.Address) (*types.Transaction, error) { return _PermissionlessNodeRegistry.Contract.OnboardNodeOperator(&_PermissionlessNodeRegistry.TransactOpts, _optInForSocializingPool, _operatorName, _operatorRewardAddress) } // OnboardNodeOperator is a paid mutator transaction binding the contract method 0x044d2fe8. // -// Solidity: function onboardNodeOperator(bool _optInForSocializingPool, string _operatorName, address _operatorRewardAddress) returns(address poolUtils) +// Solidity: function onboardNodeOperator(bool _optInForSocializingPool, string _operatorName, address _operatorRewardAddress) returns(address feeRecipientAddress) func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) OnboardNodeOperator(_optInForSocializingPool bool, _operatorName string, _operatorRewardAddress common.Address) (*types.Transaction, error) { return _PermissionlessNodeRegistry.Contract.OnboardNodeOperator(&_PermissionlessNodeRegistry.TransactOpts, _optInForSocializingPool, _operatorName, _operatorRewardAddress) } diff --git a/testing/contracts/SocializingPool.go b/testing/contracts/SocializingPool.go index e522af230..c90ecb509 100644 --- a/testing/contracts/SocializingPool.go +++ b/testing/contracts/SocializingPool.go @@ -44,7 +44,7 @@ type RewardsData struct { // SocializingPoolMetaData contains all meta data concerning the SocializingPool contract. var SocializingPoolMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ETHTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FutureCycleIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientETHRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientSDRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCycleIndex\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cycle\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"cycle\",\"type\":\"uint256\"}],\"name\":\"RewardAlreadyClaimed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RewardAlreadyHandled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SDTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ETHReceived\",\"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\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sdRewards\",\"type\":\"uint256\"}],\"name\":\"OperatorRewardsClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalETHRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sdRewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSDRewards\",\"type\":\"uint256\"}],\"name\":\"OperatorRewardsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethRewards\",\"type\":\"uint256\"}],\"name\":\"ProtocolETHRewardsTransferred\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staderOperatorRegistry\",\"type\":\"address\"}],\"name\":\"UpdatedStaderOperatorRegistry\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staderValidatorRegistry\",\"type\":\"address\"}],\"name\":\"UpdatedStaderValidatorRegistry\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethRewards\",\"type\":\"uint256\"}],\"name\":\"UserETHRewardsTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_index\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amountSD\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amountETH\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32[][]\",\"name\":\"_merkleProof\",\"type\":\"bytes32[][]\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimedRewards\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentRewardsIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getRewardCycleDetails\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_startBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardDetails\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentStartBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentEndBlock\",\"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\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"operatorETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"operatorSDRewards\",\"type\":\"uint256\"}],\"internalType\":\"structRewardsData\",\"name\":\"_rewardsData\",\"type\":\"tuple\"}],\"name\":\"handleRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"handledRewards\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":[],\"name\":\"initialBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastReportedRewardsData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"operatorETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"operatorSDRewards\",\"type\":\"uint256\"}],\"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\":[{\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rewardsDataMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"operatorETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"operatorSDRewards\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"totalOperatorETHRewardsRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalOperatorSDRewardsRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountSD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_amountETH\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"_merkleProof\",\"type\":\"bytes32[]\"}],\"name\":\"verifyProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x608060405234801562000010575f80fd5b506040516200261c3803806200261c833981016040819052620000339162000373565b6200003e826200009a565b62000049816200009a565b62000053620000c5565b6200005d62000125565b6200006762000189565b60fb80546001600160a01b0319166001600160a01b0383161790554360fe55620000925f83620001ed565b5050620003a9565b6001600160a01b038116620000c25760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620001235760405162461bcd60e51b815260206004820152602b60248201525f80516020620025fc83398151915260448201526a6e697469616c697a696e6760a81b60648201526084015b60405180910390fd5b565b5f54610100900460ff166200017f5760405162461bcd60e51b815260206004820152602b60248201525f80516020620025fc83398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200011a565b6200012362000290565b5f54610100900460ff16620001e35760405162461bcd60e51b815260206004820152602b60248201525f80516020620025fc83398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200011a565b62000123620002f6565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff166200028c575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200024b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff16620002ea5760405162461bcd60e51b815260206004820152602b60248201525f80516020620025fc83398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200011a565b6097805460ff19169055565b5f54610100900460ff16620003505760405162461bcd60e51b815260206004820152602b60248201525f80516020620025fc83398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200011a565b600160c955565b80516001600160a01b03811681146200036e575f80fd5b919050565b5f806040838503121562000385575f80fd5b620003908362000357565b9150620003a06020840162000357565b90509250929050565b61224580620003b75f395ff3fe608060405260043610610164575f3560e01c80635c975abb116100cd578063d009b3d011610087578063d547741f11610062578063d547741f146104ea578063ebc0f5f714610509578063fb831b9a14610538578063fffbe4591461056f575f80fd5b8063d009b3d014610468578063d0c4027614610487578063d2bff5ed146104b6575f80fd5b80635c975abb146103d75780638456cb59146103ee57806391d14854146104025780639ee804cb14610421578063a217fddf14610440578063c8725d8214610453575f80fd5b80632f2ff15d1161011e5780632f2ff15d146102d857806336568abe146102f75780633f4ba83a1461031657806347675c9e1461032a578063490ffa351461033f5780634a321b7914610376575f80fd5b806301ffc9a7146101a45780630d83e4ed146101d8578063189956a2146101f9578063248a9ca31461021b578063251272e0146102495780632cb15864146102c3575f80fd5b366101a05760405134815233907fbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a9060200160405180910390a2005b5f80fd5b3480156101af575f80fd5b506101c36101be366004611d2f565b61058e565b60405190151581526020015b60405180910390f35b3480156101e3575f80fd5b506101f76101f2366004611d56565b6105c4565b005b348015610204575f80fd5b5061020d610b6c565b6040519081526020016101cf565b348015610226575f80fd5b5061020d610235366004611d6d565b5f9081526065602052604090206001015490565b348015610254575f80fd5b5061010154610102546101035461010454610105546101065461010754610108546102869796959460ff169392919088565b6040805198895260208901979097529587019490945260ff9092166060860152608085015260a084015260c083015260e0820152610100016101cf565b3480156102ce575f80fd5b5061020d60fe5481565b3480156102e3575f80fd5b506101f76102f2366004611d98565b610b82565b348015610302575f80fd5b506101f7610311366004611d98565b610bab565b348015610321575f80fd5b506101f7610c29565b348015610335575f80fd5b5061020d60fd5481565b34801561034a575f80fd5b5060fb5461035e906001600160a01b031681565b6040516001600160a01b0390911681526020016101cf565b348015610381575f80fd5b50610286610390366004611d6d565b6101096020525f90815260409020805460018201546002830154600384015460048501546005860154600687015460079097015495969495939460ff909316939192909188565b3480156103e2575f80fd5b5060975460ff166101c3565b3480156103f9575f80fd5b506101f7610c3b565b34801561040d575f80fd5b506101c361041c366004611d98565b610c5c565b34801561042c575f80fd5b506101f761043b366004611dc6565b610c86565b34801561044b575f80fd5b5061020d5f81565b34801561045e575f80fd5b5061020d60fc5481565b348015610473575f80fd5b506101f7610482366004611e29565b610ce3565b348015610492575f80fd5b5061049b610f39565b604080519384526020840192909252908201526060016101cf565b3480156104c1575f80fd5b506104d56104d0366004611d6d565b610f59565b604080519283526020830191909152016101cf565b3480156104f5575f80fd5b506101f7610504366004611d98565b611103565b348015610514575f80fd5b506101c3610523366004611d6d565b6101006020525f908152604090205460ff1681565b348015610543575f80fd5b506101c3610552366004611ee4565b60ff60208181525f93845260408085209091529183529120541681565b34801561057a575f80fd5b506101c3610589366004611f0e565b611127565b5f6001600160e01b03198216637965db0b60e01b14806105be57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6105cc6111fe565b60fb5460408051633871d0f160e01b815290516106449233926001600160a01b03909116918291633871d0f19160048083019260209291908290030181865afa15801561061b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063f9190611f7c565b611257565b6020808201355f908152610100909152604090205460ff161561067a57604051635841910760e11b815260040160405180910390fd5b60fc546106879047611fa7565b60c082013561069e60a08401356080850135611fba565b6106a89190611fba565b11156106c65760405162908db560e81b815260040160405180910390fd5b60fd5460fb5f9054906101000a90046001600160a01b03166001600160a01b031663e069f7146040518163ffffffff1660e01b8152600401602060405180830381865afa158015610719573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061073d9190611fcd565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610781573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a59190611f7c565b6107af9190611fa7565b8160e0013511156107d357604051631de594e360e01b815260040160405180910390fd5b6020808201355f90815261010090915260408120805460ff1916600117905560fc805460808401359290610808908490611fba565b925050819055508060e0013560fd5f8282546108249190611fba565b909155508190506101016108388282611ff6565b50506020808201355f90815261010990915260409020819061085a8282611ff6565b505060fb54604080516305d8bc0360e31b815290516001600160a01b0390921691632ec5e018916004808201926020929091908290030181865afa1580156108a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c89190611fcd565b6001600160a01b03166333cf0ef08260a001356040518263ffffffff1660e01b81526004015f604051808303818588803b158015610904575f80fd5b505af1158015610916573d5f803e3d5ffd5b50505050505f60fb5f9054906101000a90046001600160a01b03166001600160a01b03166372ce78b06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561096c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109909190611fcd565b6001600160a01b03168260c001356040515f6040518083038185875af1925050503d805f81146109db576040519150601f19603f3d011682016040523d82523d5f602084013e6109e0565b606091505b5050905080610a915760fb5f9054906101000a90046001600160a01b03166001600160a01b03166372ce78b06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a39573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5d9190611fcd565b604051635e0a829b60e01b81526001600160a01b03909116600482015260c083013560248201526044015b60405180910390fd5b7f0e357ad2594fa2d9d8c6dc7c280141cc1b89ba4c9714a96fd3f409f4fded31d0826080013560fc548460e0013560fd54604051610ae8949392919093845260208401929092526040830152606082015260800190565b60405180910390a160405160a083013581527f7083eaccdb1f2834d37a767b05f3b72d54217404ee1cb70aa1b774e4e8a02dda9060200160405180910390a160405160c083013581527f292921846cb4d7dd20ae1c60a15192efacaaa30028f2043998f925c6c10a81509060200160405180910390a150610b69600160c955565b50565b610102545f90610b7d906001611fba565b905090565b5f82815260656020526040902060010154610b9c816112e3565b610ba683836112ed565b505050565b6001600160a01b0381163314610c1b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610a88565b610c258282611372565b5050565b5f610c33816112e3565b610b696113d8565b60fb54610c529033906001600160a01b031661142a565b610c5a6114af565b565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f610c90816112e3565b610c99826114ec565b60fb80546001600160a01b0319166001600160a01b0384169081179091556040517fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a25050565b610ceb6111fe565b610cf3611513565b335f80610d078b8b858c8c8c8c8c8c611559565b60fb5491935091505f90610d259085906001600160a01b03166117d6565b90505f8215610dc5578260fc5f828254610d3f9190611fa7565b90915550506040516001600160a01b0383169084905f81818185875af1925050503d805f8114610d8a576040519150601f19603f3d011682016040523d82523d5f602084013e610d8f565b606091505b50508091505080610dc557604051635e0a829b60e01b81526001600160a01b038316600482015260248101849052604401610a88565b8315610edc578360fd5f828254610ddc9190611fa7565b909155505060fb546040805163381a7dc560e21b815290516001600160a01b039092169163e069f714916004808201926020929091908290030181865afa158015610e29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4d9190611fcd565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201879052919091169063a9059cbb906044016020604051808303815f875af1158015610e9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebf919061205b565b610edc5760405163d3544e3f60e01b815260040160405180910390fd5b60408051848152602081018690526001600160a01b038416917f62bc6d6d870f047ea4dd686d08bfda93e24cac6b8dae0d740f6fa33071f3f0af910160405180910390a25050505050610f2f600160c955565b5050505050505050565b5f805f610f44610b6c565b9250610f4f83610f59565b9394909392509050565b5f80825f03610f7b57604051630b731bb760e21b815260040160405180910390fd5b5f838152610109602052604090205415610fd0576101095f610f9e600186611fa7565b815260208101919091526040015f2054610fb9906001611fba565b5f9384526101096020526040909320549293915050565b60fb5460408051631ca197a560e01b815290515f926001600160a01b031691631ca197a59160048083019260209291908290030181865afa158015611017573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103b9190611f7c565b9050836001036110685760fe5460016110548383611fba565b61105e9190611fa7565b9250925050915091565b6101095f611077600187611fa7565b815260208101919091526040015f2054156110ea576101095f61109b600187611fa7565b815260208101919091526040015f20546110b6906001611fba565b9250806101095f6110c8600188611fa7565b81526020019081526020015f205f01546110e29190611fba565b915050915091565b604051632dc673c360e21b815260040160405180910390fd5b5f8281526065602052604090206001015461111d816112e3565b610ba68383611372565b5f86158061113757506101025487115b1561115557604051630b731bb760e21b815260040160405180910390fd5b5f878152610109602090815260408083206002015490516bffffffffffffffffffffffff1960608b901b1692810192909252603482018890526054820187905291906074016040516020818303038152906040528051906020012090506111f18585808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250869250859150611a519050565b9998505050505050505050565b600260c954036112505760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a88565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa1580156112a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112c6919061205b565b610ba65760405163168dfea160e01b815260040160405180910390fd5b610b698133611a66565b6112f78282610c5c565b610c25575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561132e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61137c8282610c5c565b15610c25575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6113e0611abf565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa15801561146e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611492919061205b565b610c255760405163c4230ae360e01b815260040160405180910390fd5b6114b7611513565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861140d3390565b6001600160a01b038116610b695760405163d92e233d60e01b815260040160405180910390fd5b60975460ff1615610c5a5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a88565b5f8089815b818110156117c6578989828181106115785761157861207a565b905060200201355f1480156115a4575087878281811061159a5761159a61207a565b905060200201355f145b156115c25760405163162908e360e11b815260040160405180910390fd5b6001600160a01b038b165f90815260ff60205260408120908e8e848181106115ec576115ec61207a565b602090810292909201358352508101919091526040015f205460ff1615611653578a8d8d838181106116205761162061207a565b604051630ec8a45560e21b81526001600160a01b0390941660048501526020029190910135602483015250604401610a88565b8989828181106116655761166561207a565b90506020020135846116779190611fba565b935087878281811061168b5761168b61207a565b905060200201358361169d9190611fba565b6001600160a01b038c165f90815260ff60205260408120919450600191908f8f858181106116cd576116cd61207a565b9050602002013581526020019081526020015f205f6101000a81548160ff02191690831515021790555061176a8d8d8381811061170c5761170c61207a565b905060200201358c8c8c858181106117265761172661207a565b905060200201358b8b8681811061173f5761173f61207a565b905060200201358a8a878181106117585761175861207a565b9050602002810190610589919061208e565b6117b4578c8c828181106117805761178061207a565b60405163dab3a3fb60e01b8152602090910292909201356004830152506001600160a01b038c166024820152604401610a88565b806117be816120d4565b91505061155e565b5050995099975050505050505050565b5f80826001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611814573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118389190611fcd565b604051634721e29d60e11b81526001600160a01b0386811660048301529190911690638e43c53a90602401602060405180830381865afa15801561187e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118a291906120ec565b90505f836001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119059190611fcd565b60405163133a0ab960e31b815260ff841660048201526001600160a01b0391909116906399d055c890602401602060405180830381865afa15801561194c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119709190611fcd565b604051636564598360e11b81526001600160a01b0387811660048301529192505f9183169063cac8b30690602401602060405180830381865afa1580156119b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119dd9190611f7c565b60405163107d446b60e31b8152600481018290529091506001600160a01b038316906383ea235890602401602060405180830381865afa158015611a23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a479190611fcd565b9695505050505050565b5f82611a5d8584611b08565b14949350505050565b611a708282610c5c565b610c2557611a7d81611b54565b611a88836020611b66565b604051602001611a99929190612129565b60408051601f198184030181529082905262461bcd60e51b8252610a889160040161219d565b60975460ff16610c5a5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a88565b5f81815b8451811015611b4c57611b3882868381518110611b2b57611b2b61207a565b6020026020010151611d03565b915080611b44816120d4565b915050611b0c565b509392505050565b60606105be6001600160a01b03831660145b60605f611b748360026121cf565b611b7f906002611fba565b67ffffffffffffffff811115611b9757611b976121e6565b6040519080825280601f01601f191660200182016040528015611bc1576020820181803683370190505b509050600360fc1b815f81518110611bdb57611bdb61207a565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611c0957611c0961207a565b60200101906001600160f81b03191690815f1a9053505f611c2b8460026121cf565b611c36906001611fba565b90505b6001811115611cad576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611c6a57611c6a61207a565b1a60f81b828281518110611c8057611c8061207a565b60200101906001600160f81b03191690815f1a90535060049490941c93611ca6816121fa565b9050611c39565b508315611cfc5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a88565b9392505050565b5f818310611d1d575f828152602084905260409020611cfc565b5f838152602083905260409020611cfc565b5f60208284031215611d3f575f80fd5b81356001600160e01b031981168114611cfc575f80fd5b5f6101008284031215611d67575f80fd5b50919050565b5f60208284031215611d7d575f80fd5b5035919050565b6001600160a01b0381168114610b69575f80fd5b5f8060408385031215611da9575f80fd5b823591506020830135611dbb81611d84565b809150509250929050565b5f60208284031215611dd6575f80fd5b8135611cfc81611d84565b5f8083601f840112611df1575f80fd5b50813567ffffffffffffffff811115611e08575f80fd5b6020830191508360208260051b8501011115611e22575f80fd5b9250929050565b5f805f805f805f806080898b031215611e40575f80fd5b883567ffffffffffffffff80821115611e57575f80fd5b611e638c838d01611de1565b909a50985060208b0135915080821115611e7b575f80fd5b611e878c838d01611de1565b909850965060408b0135915080821115611e9f575f80fd5b611eab8c838d01611de1565b909650945060608b0135915080821115611ec3575f80fd5b50611ed08b828c01611de1565b999c989b5096995094979396929594505050565b5f8060408385031215611ef5575f80fd5b8235611f0081611d84565b946020939093013593505050565b5f805f805f8060a08789031215611f23575f80fd5b863595506020870135611f3581611d84565b94506040870135935060608701359250608087013567ffffffffffffffff811115611f5e575f80fd5b611f6a89828a01611de1565b979a9699509497509295939492505050565b5f60208284031215611f8c575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105be576105be611f93565b808201808211156105be576105be611f93565b5f60208284031215611fdd575f80fd5b8151611cfc81611d84565b60ff81168114610b69575f80fd5b81358155602082013560018201556040820135600282015560038101606083013561202081611fe8565b815460ff191660ff919091161790556080820135600482015560a0820135600582015560c0820135600682015560e090910135600790910155565b5f6020828403121561206b575f80fd5b81518015158114611cfc575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f808335601e198436030181126120a3575f80fd5b83018035915067ffffffffffffffff8211156120bd575f80fd5b6020019150600581901b3603821315611e22575f80fd5b5f600182016120e5576120e5611f93565b5060010190565b5f602082840312156120fc575f80fd5b8151611cfc81611fe8565b5f5b83811015612121578181015183820152602001612109565b50505f910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351612160816017850160208801612107565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612191816028840160208801612107565b01602801949350505050565b602081525f82518060208401526121bb816040850160208701612107565b601f01601f19169190910160400192915050565b80820281158282048414176105be576105be611f93565b634e487b7160e01b5f52604160045260245ffd5b5f8161220857612208611f93565b505f19019056fea26469706673582212204176179aa38da33ba1dcba66aafbc1a0d5425cdd9cb827688aa2506ce10ce69164736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + Bin: "0x608060405234801562000010575f80fd5b50604051620027243803806200272483398101604081905262000033916200047b565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001a6565b6200010e82620001a6565b62000118620001d1565b620001226200022d565b6200012c62000291565b60fb80546001600160a01b0319166001600160a01b0384161790554360fe55620001575f84620002f5565b80156200019d575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620004b1565b6001600160a01b038116620001ce5760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff166200022b5760405162461bcd60e51b815260206004820152602b60248201525f805160206200270483398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002875760405162461bcd60e51b815260206004820152602b60248201525f805160206200270483398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200022b62000398565b5f54610100900460ff16620002eb5760405162461bcd60e51b815260206004820152602b60248201525f805160206200270483398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200022b620003fe565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff1662000394575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620003533390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff16620003f25760405162461bcd60e51b815260206004820152602b60248201525f805160206200270483398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff16620004585760405162461bcd60e51b815260206004820152602b60248201525f805160206200270483398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b038116811462000476575f80fd5b919050565b5f80604083850312156200048d575f80fd5b62000498836200045f565b9150620004a8602084016200045f565b90509250929050565b61224580620004bf5f395ff3fe608060405260043610610164575f3560e01c80635c975abb116100cd578063d009b3d011610087578063d547741f11610062578063d547741f146104ea578063ebc0f5f714610509578063fb831b9a14610538578063fffbe4591461056f575f80fd5b8063d009b3d014610468578063d0c4027614610487578063d2bff5ed146104b6575f80fd5b80635c975abb146103d75780638456cb59146103ee57806391d14854146104025780639ee804cb14610421578063a217fddf14610440578063c8725d8214610453575f80fd5b80632f2ff15d1161011e5780632f2ff15d146102d857806336568abe146102f75780633f4ba83a1461031657806347675c9e1461032a578063490ffa351461033f5780634a321b7914610376575f80fd5b806301ffc9a7146101a45780630d83e4ed146101d8578063189956a2146101f9578063248a9ca31461021b578063251272e0146102495780632cb15864146102c3575f80fd5b366101a05760405134815233907fbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a9060200160405180910390a2005b5f80fd5b3480156101af575f80fd5b506101c36101be366004611d2f565b61058e565b60405190151581526020015b60405180910390f35b3480156101e3575f80fd5b506101f76101f2366004611d56565b6105c4565b005b348015610204575f80fd5b5061020d610b6c565b6040519081526020016101cf565b348015610226575f80fd5b5061020d610235366004611d6d565b5f9081526065602052604090206001015490565b348015610254575f80fd5b5061010154610102546101035461010454610105546101065461010754610108546102869796959460ff169392919088565b6040805198895260208901979097529587019490945260ff9092166060860152608085015260a084015260c083015260e0820152610100016101cf565b3480156102ce575f80fd5b5061020d60fe5481565b3480156102e3575f80fd5b506101f76102f2366004611d98565b610b82565b348015610302575f80fd5b506101f7610311366004611d98565b610bab565b348015610321575f80fd5b506101f7610c29565b348015610335575f80fd5b5061020d60fd5481565b34801561034a575f80fd5b5060fb5461035e906001600160a01b031681565b6040516001600160a01b0390911681526020016101cf565b348015610381575f80fd5b50610286610390366004611d6d565b6101096020525f90815260409020805460018201546002830154600384015460048501546005860154600687015460079097015495969495939460ff909316939192909188565b3480156103e2575f80fd5b5060975460ff166101c3565b3480156103f9575f80fd5b506101f7610c3b565b34801561040d575f80fd5b506101c361041c366004611d98565b610c5c565b34801561042c575f80fd5b506101f761043b366004611dc6565b610c86565b34801561044b575f80fd5b5061020d5f81565b34801561045e575f80fd5b5061020d60fc5481565b348015610473575f80fd5b506101f7610482366004611e29565b610ce3565b348015610492575f80fd5b5061049b610f39565b604080519384526020840192909252908201526060016101cf565b3480156104c1575f80fd5b506104d56104d0366004611d6d565b610f59565b604080519283526020830191909152016101cf565b3480156104f5575f80fd5b506101f7610504366004611d98565b611103565b348015610514575f80fd5b506101c3610523366004611d6d565b6101006020525f908152604090205460ff1681565b348015610543575f80fd5b506101c3610552366004611ee4565b60ff60208181525f93845260408085209091529183529120541681565b34801561057a575f80fd5b506101c3610589366004611f0e565b611127565b5f6001600160e01b03198216637965db0b60e01b14806105be57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6105cc6111fe565b60fb5460408051633871d0f160e01b815290516106449233926001600160a01b03909116918291633871d0f19160048083019260209291908290030181865afa15801561061b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063f9190611f7c565b611257565b6020808201355f908152610100909152604090205460ff161561067a57604051635841910760e11b815260040160405180910390fd5b60fc546106879047611fa7565b60c082013561069e60a08401356080850135611fba565b6106a89190611fba565b11156106c65760405162908db560e81b815260040160405180910390fd5b60fd5460fb5f9054906101000a90046001600160a01b03166001600160a01b031663e069f7146040518163ffffffff1660e01b8152600401602060405180830381865afa158015610719573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061073d9190611fcd565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610781573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a59190611f7c565b6107af9190611fa7565b8160e0013511156107d357604051631de594e360e01b815260040160405180910390fd5b6020808201355f90815261010090915260408120805460ff1916600117905560fc805460808401359290610808908490611fba565b925050819055508060e0013560fd5f8282546108249190611fba565b909155508190506101016108388282611ff6565b50506020808201355f90815261010990915260409020819061085a8282611ff6565b505060fb54604080516305d8bc0360e31b815290516001600160a01b0390921691632ec5e018916004808201926020929091908290030181865afa1580156108a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c89190611fcd565b6001600160a01b03166333cf0ef08260a001356040518263ffffffff1660e01b81526004015f604051808303818588803b158015610904575f80fd5b505af1158015610916573d5f803e3d5ffd5b50505050505f60fb5f9054906101000a90046001600160a01b03166001600160a01b03166372ce78b06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561096c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109909190611fcd565b6001600160a01b03168260c001356040515f6040518083038185875af1925050503d805f81146109db576040519150601f19603f3d011682016040523d82523d5f602084013e6109e0565b606091505b5050905080610a915760fb5f9054906101000a90046001600160a01b03166001600160a01b03166372ce78b06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a39573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5d9190611fcd565b604051635e0a829b60e01b81526001600160a01b03909116600482015260c083013560248201526044015b60405180910390fd5b7f0e357ad2594fa2d9d8c6dc7c280141cc1b89ba4c9714a96fd3f409f4fded31d0826080013560fc548460e0013560fd54604051610ae8949392919093845260208401929092526040830152606082015260800190565b60405180910390a160405160a083013581527f7083eaccdb1f2834d37a767b05f3b72d54217404ee1cb70aa1b774e4e8a02dda9060200160405180910390a160405160c083013581527f292921846cb4d7dd20ae1c60a15192efacaaa30028f2043998f925c6c10a81509060200160405180910390a150610b69600160c955565b50565b610102545f90610b7d906001611fba565b905090565b5f82815260656020526040902060010154610b9c816112e3565b610ba683836112ed565b505050565b6001600160a01b0381163314610c1b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610a88565b610c258282611372565b5050565b5f610c33816112e3565b610b696113d8565b60fb54610c529033906001600160a01b031661142a565b610c5a6114af565b565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f610c90816112e3565b610c99826114ec565b60fb80546001600160a01b0319166001600160a01b0384169081179091556040517fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a25050565b610ceb6111fe565b610cf3611513565b335f80610d078b8b858c8c8c8c8c8c611559565b60fb5491935091505f90610d259085906001600160a01b03166117d6565b90505f8215610dc5578260fc5f828254610d3f9190611fa7565b90915550506040516001600160a01b0383169084905f81818185875af1925050503d805f8114610d8a576040519150601f19603f3d011682016040523d82523d5f602084013e610d8f565b606091505b50508091505080610dc557604051635e0a829b60e01b81526001600160a01b038316600482015260248101849052604401610a88565b8315610edc578360fd5f828254610ddc9190611fa7565b909155505060fb546040805163381a7dc560e21b815290516001600160a01b039092169163e069f714916004808201926020929091908290030181865afa158015610e29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e4d9190611fcd565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201879052919091169063a9059cbb906044016020604051808303815f875af1158015610e9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebf919061205b565b610edc5760405163d3544e3f60e01b815260040160405180910390fd5b60408051848152602081018690526001600160a01b038416917f62bc6d6d870f047ea4dd686d08bfda93e24cac6b8dae0d740f6fa33071f3f0af910160405180910390a25050505050610f2f600160c955565b5050505050505050565b5f805f610f44610b6c565b9250610f4f83610f59565b9394909392509050565b5f80825f03610f7b57604051630b731bb760e21b815260040160405180910390fd5b5f838152610109602052604090205415610fd0576101095f610f9e600186611fa7565b815260208101919091526040015f2054610fb9906001611fba565b5f9384526101096020526040909320549293915050565b60fb5460408051631ca197a560e01b815290515f926001600160a01b031691631ca197a59160048083019260209291908290030181865afa158015611017573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103b9190611f7c565b9050836001036110685760fe5460016110548383611fba565b61105e9190611fa7565b9250925050915091565b6101095f611077600187611fa7565b815260208101919091526040015f2054156110ea576101095f61109b600187611fa7565b815260208101919091526040015f20546110b6906001611fba565b9250806101095f6110c8600188611fa7565b81526020019081526020015f205f01546110e29190611fba565b915050915091565b604051632dc673c360e21b815260040160405180910390fd5b5f8281526065602052604090206001015461111d816112e3565b610ba68383611372565b5f86158061113757506101025487115b1561115557604051630b731bb760e21b815260040160405180910390fd5b5f878152610109602090815260408083206002015490516bffffffffffffffffffffffff1960608b901b1692810192909252603482018890526054820187905291906074016040516020818303038152906040528051906020012090506111f18585808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250869250859150611a519050565b9998505050505050505050565b600260c954036112505760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a88565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa1580156112a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112c6919061205b565b610ba65760405163168dfea160e01b815260040160405180910390fd5b610b698133611a66565b6112f78282610c5c565b610c25575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561132e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61137c8282610c5c565b15610c25575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6113e0611abf565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa15801561146e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611492919061205b565b610c255760405163c4230ae360e01b815260040160405180910390fd5b6114b7611513565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861140d3390565b6001600160a01b038116610b695760405163d92e233d60e01b815260040160405180910390fd5b60975460ff1615610c5a5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a88565b5f8089815b818110156117c6578989828181106115785761157861207a565b905060200201355f1480156115a4575087878281811061159a5761159a61207a565b905060200201355f145b156115c25760405163162908e360e11b815260040160405180910390fd5b6001600160a01b038b165f90815260ff60205260408120908e8e848181106115ec576115ec61207a565b602090810292909201358352508101919091526040015f205460ff1615611653578a8d8d838181106116205761162061207a565b604051630ec8a45560e21b81526001600160a01b0390941660048501526020029190910135602483015250604401610a88565b8989828181106116655761166561207a565b90506020020135846116779190611fba565b935087878281811061168b5761168b61207a565b905060200201358361169d9190611fba565b6001600160a01b038c165f90815260ff60205260408120919450600191908f8f858181106116cd576116cd61207a565b9050602002013581526020019081526020015f205f6101000a81548160ff02191690831515021790555061176a8d8d8381811061170c5761170c61207a565b905060200201358c8c8c858181106117265761172661207a565b905060200201358b8b8681811061173f5761173f61207a565b905060200201358a8a878181106117585761175861207a565b9050602002810190610589919061208e565b6117b4578c8c828181106117805761178061207a565b60405163dab3a3fb60e01b8152602090910292909201356004830152506001600160a01b038c166024820152604401610a88565b806117be816120d4565b91505061155e565b5050995099975050505050505050565b5f80826001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611814573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118389190611fcd565b604051634721e29d60e11b81526001600160a01b0386811660048301529190911690638e43c53a90602401602060405180830381865afa15801561187e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118a291906120ec565b90505f836001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119059190611fcd565b60405163133a0ab960e31b815260ff841660048201526001600160a01b0391909116906399d055c890602401602060405180830381865afa15801561194c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119709190611fcd565b604051636564598360e11b81526001600160a01b0387811660048301529192505f9183169063cac8b30690602401602060405180830381865afa1580156119b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119dd9190611f7c565b60405163107d446b60e31b8152600481018290529091506001600160a01b038316906383ea235890602401602060405180830381865afa158015611a23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a479190611fcd565b9695505050505050565b5f82611a5d8584611b08565b14949350505050565b611a708282610c5c565b610c2557611a7d81611b54565b611a88836020611b66565b604051602001611a99929190612129565b60408051601f198184030181529082905262461bcd60e51b8252610a889160040161219d565b60975460ff16610c5a5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a88565b5f81815b8451811015611b4c57611b3882868381518110611b2b57611b2b61207a565b6020026020010151611d03565b915080611b44816120d4565b915050611b0c565b509392505050565b60606105be6001600160a01b03831660145b60605f611b748360026121cf565b611b7f906002611fba565b67ffffffffffffffff811115611b9757611b976121e6565b6040519080825280601f01601f191660200182016040528015611bc1576020820181803683370190505b509050600360fc1b815f81518110611bdb57611bdb61207a565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611c0957611c0961207a565b60200101906001600160f81b03191690815f1a9053505f611c2b8460026121cf565b611c36906001611fba565b90505b6001811115611cad576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611c6a57611c6a61207a565b1a60f81b828281518110611c8057611c8061207a565b60200101906001600160f81b03191690815f1a90535060049490941c93611ca6816121fa565b9050611c39565b508315611cfc5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a88565b9392505050565b5f818310611d1d575f828152602084905260409020611cfc565b5f838152602083905260409020611cfc565b5f60208284031215611d3f575f80fd5b81356001600160e01b031981168114611cfc575f80fd5b5f6101008284031215611d67575f80fd5b50919050565b5f60208284031215611d7d575f80fd5b5035919050565b6001600160a01b0381168114610b69575f80fd5b5f8060408385031215611da9575f80fd5b823591506020830135611dbb81611d84565b809150509250929050565b5f60208284031215611dd6575f80fd5b8135611cfc81611d84565b5f8083601f840112611df1575f80fd5b50813567ffffffffffffffff811115611e08575f80fd5b6020830191508360208260051b8501011115611e22575f80fd5b9250929050565b5f805f805f805f806080898b031215611e40575f80fd5b883567ffffffffffffffff80821115611e57575f80fd5b611e638c838d01611de1565b909a50985060208b0135915080821115611e7b575f80fd5b611e878c838d01611de1565b909850965060408b0135915080821115611e9f575f80fd5b611eab8c838d01611de1565b909650945060608b0135915080821115611ec3575f80fd5b50611ed08b828c01611de1565b999c989b5096995094979396929594505050565b5f8060408385031215611ef5575f80fd5b8235611f0081611d84565b946020939093013593505050565b5f805f805f8060a08789031215611f23575f80fd5b863595506020870135611f3581611d84565b94506040870135935060608701359250608087013567ffffffffffffffff811115611f5e575f80fd5b611f6a89828a01611de1565b979a9699509497509295939492505050565b5f60208284031215611f8c575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105be576105be611f93565b808201808211156105be576105be611f93565b5f60208284031215611fdd575f80fd5b8151611cfc81611d84565b60ff81168114610b69575f80fd5b81358155602082013560018201556040820135600282015560038101606083013561202081611fe8565b815460ff191660ff919091161790556080820135600482015560a0820135600582015560c0820135600682015560e090910135600790910155565b5f6020828403121561206b575f80fd5b81518015158114611cfc575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f808335601e198436030181126120a3575f80fd5b83018035915067ffffffffffffffff8211156120bd575f80fd5b6020019150600581901b3603821315611e22575f80fd5b5f600182016120e5576120e5611f93565b5060010190565b5f602082840312156120fc575f80fd5b8151611cfc81611fe8565b5f5b83811015612121578181015183820152602001612109565b50505f910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351612160816017850160208801612107565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612191816028840160208801612107565b01602801949350505050565b602081525f82518060208401526121bb816040850160208701612107565b601f01601f19169190910160400192915050565b80820281158282048414176105be576105be611f93565b634e487b7160e01b5f52604160045260245ffd5b5f8161220857612208611f93565b505f19019056fea2646970667358221220d573332ed7b9bcec49bb7e97c10116027a80a59fec7a7d99393b6286aeed54a764736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // SocializingPoolABI is the input ABI used to generate the binding from. diff --git a/testing/contracts/VaultFactory.go b/testing/contracts/VaultFactory.go new file mode 100644 index 000000000..efedd7f4a --- /dev/null +++ b/testing/contracts/VaultFactory.go @@ -0,0 +1,1816 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contracts + +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 +) + +// VaultFactoryMetaData contains all meta data concerning the VaultFactory contract. +var VaultFactoryMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nodeDistributor\",\"type\":\"address\"}],\"name\":\"NodeELRewardVaultCreated\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"vaultProxyImplementation\",\"type\":\"address\"}],\"name\":\"UpdatedVaultProxyImplementation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"withdrawVault\",\"type\":\"address\"}],\"name\":\"WithdrawVaultCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NODE_REGISTRY_CONTRACT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"computeNodeELRewardVaultAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_validatorCount\",\"type\":\"uint256\"}],\"name\":\"computeWithdrawVaultAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"deployNodeELRewardVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_validatorCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"}],\"name\":\"deployWithdrawVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_withdrawVault\",\"type\":\"address\"}],\"name\":\"getValidatorWithdrawCredential\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"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\":\"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\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_vaultProxyImpl\",\"type\":\"address\"}],\"name\":\"updateVaultProxyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b5060405162001b0838038062001b0883398101604081905262000033916200033d565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001d7565b6200010e82620001d7565b6200011862000202565b609780546001600160a01b0319166001600160a01b038416179055604051620001419062000313565b604051809103905ff0801580156200015b573d5f803e3d5ffd5b50609880546001600160a01b0319166001600160a01b0392909216919091179055620001885f8462000270565b8015620001ce575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505062000373565b6001600160a01b038116620001ff5760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff166200026e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff166200030f575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620002ce3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b610773806200139583390190565b80516001600160a01b038116811462000338575f80fd5b919050565b5f80604083850312156200034f575f80fd5b6200035a8362000321565b91506200036a6020840162000321565b90509250929050565b61101480620003815f395ff3fe608060405234801561000f575f80fd5b5060043610610106575f3560e01c806391d148541161009e578063ae4e4e451161006e578063ae4e4e451461022e578063ca934f601461028e578063d547741f146102a1578063ee5fca3b146102b4578063f8bc93a5146102c7575f80fd5b806391d14854146101ee5780639ee804cb14610201578063a217fddf14610214578063ab4f36d51461021b575f80fd5b8063490ffa35116100d9578063490ffa351461018a5780636a0b6881146101b557806374903b02146101c85780637f70ce0d146101db575f80fd5b806301ffc9a71461010a578063248a9ca3146101325780632f2ff15d1461016257806336568abe14610177575b5f80fd5b61011d610118366004610d24565b6102ee565b60405190151581526020015b60405180910390f35b610154610140366004610d4b565b5f9081526065602052604090206001015490565b604051908152602001610129565b610175610170366004610d7d565b610324565b005b610175610185366004610d7d565b61034d565b60975461019d906001600160a01b031681565b6040516001600160a01b039091168152602001610129565b61019d6101c3366004610db7565b6103d0565b61019d6101d6366004610ddf565b610541565b61019d6101e9366004610e0f565b6105df565b61011d6101fc366004610d7d565b61075a565b61017561020f366004610e45565b610784565b6101545f81565b610175610229366004610e45565b6107ed565b61028161023c366004610e45565b60408051600160f81b60208201525f6021820152606083811b6bffffffffffffffffffffffff1916602c83015291016040516020818303038152906040529050919050565b6040516101299190610eab565b61019d61029c366004610db7565b61084e565b6101756102af366004610d7d565b6108e4565b60985461019d906001600160a01b031681565b6101547f5f937b69bc198c032799e5628d33386025c498d279cec8ad3c304e5c00bb19f681565b5f6001600160e01b03198216637965db0b60e01b148061031e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f8281526065602052604090206001015461033e81610908565b6103488383610915565b505050565b6001600160a01b03811633146103c25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6103cc828261099a565b5050565b5f7f5f937b69bc198c032799e5628d33386025c498d279cec8ad3c304e5c00bb19f66103fb81610908565b6040805160ff861660208201529081018490525f9060029060600160408051601f198184030181529082905261043091610ebd565b602060405180830381855afa15801561044b573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061046e9190610ed8565b6098549091505f90610489906001600160a01b031683610a00565b609754604051630483167960e21b81525f600482015260ff89166024820152604481018890526001600160a01b03918216606482015291925082169063120c59e4906084015f604051808303815f87803b1580156104e5575f80fd5b505af11580156104f7573d5f803e3d5ffd5b50506040516001600160a01b03841681527f534e63617d48745c45efd754f53f9292453257107e03d0140db96fc8e3bf7ec99250602001905060405180910390a195945050505050565b6040805160ff85166020820152908101839052606081018290525f90819060029060800160408051601f198184030181529082905261057f91610ebd565b602060405180830381855afa15801561059a573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906105bd9190610ed8565b6098549091506105d6906001600160a01b031682610a9a565b95945050505050565b5f7f5f937b69bc198c032799e5628d33386025c498d279cec8ad3c304e5c00bb19f661060a81610908565b6040805160ff88166020820152908101869052606081018590525f9060029060800160408051601f198184030181529082905261064691610ebd565b602060405180830381855afa158015610661573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906106849190610ed8565b6098549091505f9061069f906001600160a01b031683610a00565b609754604051630483167960e21b81526001600482015260ff8b166024820152604481018890526001600160a01b03918216606482015291925082169063120c59e4906084015f604051808303815f87803b1580156106fc575f80fd5b505af115801561070e573d5f803e3d5ffd5b50506040516001600160a01b03841681527f3961159e01aea37eec106905b883c13f18c7c19abfde04fef6835c94d2af51b99250602001905060405180910390a1979650505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f61078e81610908565b61079782610afc565b609780546001600160a01b0319166001600160a01b0384169081179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485906020015b60405180910390a15050565b5f6107f781610908565b61080082610afc565b609880546001600160a01b0319166001600160a01b0384169081179091556040519081527f77358c5e9bc05f53688720682a283a5de55b771a614836c83cb1428deb2ece2d906020016107e1565b6040805160ff841660208201529081018290525f90819060029060600160408051601f198184030181529082905261088591610ebd565b602060405180830381855afa1580156108a0573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906108c39190610ed8565b6098549091506108dc906001600160a01b031682610a9a565b949350505050565b5f828152606560205260409020600101546108fe81610908565b610348838361099a565b6109128133610b23565b50565b61091f828261075a565b6103cc575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556109563390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6109a4828261075a565b156103cc575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b03811661031e5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c656400000000000000000060448201526064016103b9565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101205f905b9392505050565b6001600160a01b0381166109125760405163d92e233d60e01b815260040160405180910390fd5b610b2d828261075a565b6103cc57610b3a81610b7c565b610b45836020610b8e565b604051602001610b56929190610eef565b60408051601f198184030181529082905262461bcd60e51b82526103b991600401610eab565b606061031e6001600160a01b03831660145b60605f610b9c836002610f77565b610ba7906002610f8e565b67ffffffffffffffff811115610bbf57610bbf610fa1565b6040519080825280601f01601f191660200182016040528015610be9576020820181803683370190505b509050600360fc1b815f81518110610c0357610c03610fb5565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110610c3157610c31610fb5565b60200101906001600160f81b03191690815f1a9053505f610c53846002610f77565b610c5e906001610f8e565b90505b6001811115610cd5576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610c9257610c92610fb5565b1a60f81b828281518110610ca857610ca8610fb5565b60200101906001600160f81b03191690815f1a90535060049490941c93610cce81610fc9565b9050610c61565b508315610af55760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016103b9565b5f60208284031215610d34575f80fd5b81356001600160e01b031981168114610af5575f80fd5b5f60208284031215610d5b575f80fd5b5035919050565b80356001600160a01b0381168114610d78575f80fd5b919050565b5f8060408385031215610d8e575f80fd5b82359150610d9e60208401610d62565b90509250929050565b803560ff81168114610d78575f80fd5b5f8060408385031215610dc8575f80fd5b610dd183610da7565b946020939093013593505050565b5f805f60608486031215610df1575f80fd5b610dfa84610da7565b95602085013595506040909401359392505050565b5f805f8060808587031215610e22575f80fd5b610e2b85610da7565b966020860135965060408601359560600135945092505050565b5f60208284031215610e55575f80fd5b610af582610d62565b5f5b83811015610e78578181015183820152602001610e60565b50505f910152565b5f8151808452610e97816020860160208601610e5e565b601f01601f19169290920160200192915050565b602081525f610af56020830184610e80565b5f8251610ece818460208701610e5e565b9190910192915050565b5f60208284031215610ee8575f80fd5b5051919050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351610f26816017850160208801610e5e565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610f57816028840160208801610e5e565b01602801949350505050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761031e5761031e610f63565b8082018082111561031e5761031e610f63565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81610fd757610fd7610f63565b505f19019056fea264697066735822122013081fda5548d27aa7ad80c727a3e4863c1952dd02f6bec4c7424da0b7d865c964736f6c63430008140033608060405234801561000f575f80fd5b506107568061001d5f395ff3fe608060405260043610610090575f3560e01c80637ef4947d116100585780637ef4947d146103045780638da5cb5b1461031c5780639ee804cb1461033b578063af640d0f1461035a578063bc5920ba1461037d57610090565b8063120c59e41461022b578063392e53cd1461024c5780633e0dc34e1461027f578063490ffa35146102b05780637cc0bb90146102e7575b5f3660605f8060019054906101000a900460ff166101215760035f9054906101000a90046001600160a01b03166001600160a01b031663e8fe18736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061011c9190610630565b610195565b60035f9054906101000a90046001600160a01b03166001600160a01b0316636d28ad1c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610171573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101959190610630565b90505f80826001600160a01b031686866040516101b3929190610652565b5f60405180830381855af49150503d805f81146101eb576040519150601f19603f3d011682016040523d82523d5f602084013e6101f0565b606091505b50915091508161021d578060405162461bcd60e51b81526004016102149190610661565b60405180910390fd5b805195506020019350505050f35b348015610236575f80fd5b5061024a6102453660046106ac565b610391565b005b348015610257575f80fd5b505f5461026a9062010000900460ff1681565b60405190151581526020015b60405180910390f35b34801561028a575f80fd5b505f5461029e906301000000900460ff1681565b60405160ff9091168152602001610276565b3480156102bb575f80fd5b506003546102cf906001600160a01b031681565b6040516001600160a01b039091168152602001610276565b3480156102f2575f80fd5b505f5461026a90610100900460ff1681565b34801561030f575f80fd5b505f5461026a9060ff1681565b348015610327575f80fd5b506002546102cf906001600160a01b031681565b348015610346575f80fd5b5061024a610355366004610705565b6104a2565b348015610365575f80fd5b5061036f60015481565b604051908152602001610276565b348015610388575f80fd5b5061024a61052a565b5f5462010000900460ff16156103b95760405162dc149f60e41b815260040160405180910390fd5b6103c2816105f2565b5f80546201000062ffff00199091166101008715150262ff00001916171763ff0000001916630100000060ff8616021790556001829055600380546001600160a01b0319166001600160a01b03831690811790915560408051636e9960c360e01b81529051636e9960c3916004808201926020929091908290030181865afa158015610450573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104749190610630565b600280546001600160a01b0319166001600160a01b0392909216918217905561049c906105f2565b50505050565b6002546001600160a01b031633146104cd57604051632e6c18c960e11b815260040160405180910390fd5b6104d6816105f2565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a150565b60035f9054906101000a90046001600160a01b03166001600160a01b0316636e9960c36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561057a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059e9190610630565b600280546001600160a01b0319166001600160a01b039290921691821790556040519081527f957090e72c0a1b3ebf83c682eb8c1f88c2a18cd0578b91a819efb28859f0f3a39060200160405180910390a1565b6001600160a01b0381166106195760405163d92e233d60e01b815260040160405180910390fd5b50565b6001600160a01b0381168114610619575f80fd5b5f60208284031215610640575f80fd5b815161064b8161061c565b9392505050565b818382375f9101908152919050565b5f6020808352835180828501525f5b8181101561068c57858101830151858201604001528201610670565b505f604082860101526040601f19601f8301168501019250505092915050565b5f805f80608085870312156106bf575f80fd5b843580151581146106ce575f80fd5b9350602085013560ff811681146106e3575f80fd5b92506040850135915060608501356106fa8161061c565b939692955090935050565b5f60208284031215610715575f80fd5b813561064b8161061c56fea264697066735822122032304ea603f2de08d0b88b402f1d134232dce29b0fb9b0d9bd6b8fdb821fc23b64736f6c63430008140033", +} + +// VaultFactoryABI is the input ABI used to generate the binding from. +// Deprecated: Use VaultFactoryMetaData.ABI instead. +var VaultFactoryABI = VaultFactoryMetaData.ABI + +// VaultFactoryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use VaultFactoryMetaData.Bin instead. +var VaultFactoryBin = VaultFactoryMetaData.Bin + +// DeployVaultFactory deploys a new Ethereum contract, binding an instance of VaultFactory to it. +func DeployVaultFactory(auth *bind.TransactOpts, backend bind.ContractBackend, _admin common.Address, _staderConfig common.Address) (common.Address, *types.Transaction, *VaultFactory, error) { + parsed, err := VaultFactoryMetaData.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(VaultFactoryBin), backend, _admin, _staderConfig) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &VaultFactory{VaultFactoryCaller: VaultFactoryCaller{contract: contract}, VaultFactoryTransactor: VaultFactoryTransactor{contract: contract}, VaultFactoryFilterer: VaultFactoryFilterer{contract: contract}}, nil +} + +// VaultFactory is an auto generated Go binding around an Ethereum contract. +type VaultFactory struct { + VaultFactoryCaller // Read-only binding to the contract + VaultFactoryTransactor // Write-only binding to the contract + VaultFactoryFilterer // Log filterer for contract events +} + +// VaultFactoryCaller is an auto generated read-only Go binding around an Ethereum contract. +type VaultFactoryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// VaultFactoryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type VaultFactoryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// VaultFactoryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type VaultFactoryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// VaultFactorySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type VaultFactorySession struct { + Contract *VaultFactory // 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 +} + +// VaultFactoryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type VaultFactoryCallerSession struct { + Contract *VaultFactoryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// VaultFactoryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type VaultFactoryTransactorSession struct { + Contract *VaultFactoryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// VaultFactoryRaw is an auto generated low-level Go binding around an Ethereum contract. +type VaultFactoryRaw struct { + Contract *VaultFactory // Generic contract binding to access the raw methods on +} + +// VaultFactoryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type VaultFactoryCallerRaw struct { + Contract *VaultFactoryCaller // Generic read-only contract binding to access the raw methods on +} + +// VaultFactoryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type VaultFactoryTransactorRaw struct { + Contract *VaultFactoryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewVaultFactory creates a new instance of VaultFactory, bound to a specific deployed contract. +func NewVaultFactory(address common.Address, backend bind.ContractBackend) (*VaultFactory, error) { + contract, err := bindVaultFactory(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &VaultFactory{VaultFactoryCaller: VaultFactoryCaller{contract: contract}, VaultFactoryTransactor: VaultFactoryTransactor{contract: contract}, VaultFactoryFilterer: VaultFactoryFilterer{contract: contract}}, nil +} + +// NewVaultFactoryCaller creates a new read-only instance of VaultFactory, bound to a specific deployed contract. +func NewVaultFactoryCaller(address common.Address, caller bind.ContractCaller) (*VaultFactoryCaller, error) { + contract, err := bindVaultFactory(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &VaultFactoryCaller{contract: contract}, nil +} + +// NewVaultFactoryTransactor creates a new write-only instance of VaultFactory, bound to a specific deployed contract. +func NewVaultFactoryTransactor(address common.Address, transactor bind.ContractTransactor) (*VaultFactoryTransactor, error) { + contract, err := bindVaultFactory(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &VaultFactoryTransactor{contract: contract}, nil +} + +// NewVaultFactoryFilterer creates a new log filterer instance of VaultFactory, bound to a specific deployed contract. +func NewVaultFactoryFilterer(address common.Address, filterer bind.ContractFilterer) (*VaultFactoryFilterer, error) { + contract, err := bindVaultFactory(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &VaultFactoryFilterer{contract: contract}, nil +} + +// bindVaultFactory binds a generic wrapper to an already deployed contract. +func bindVaultFactory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := VaultFactoryMetaData.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 (_VaultFactory *VaultFactoryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _VaultFactory.Contract.VaultFactoryCaller.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 (_VaultFactory *VaultFactoryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _VaultFactory.Contract.VaultFactoryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_VaultFactory *VaultFactoryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _VaultFactory.Contract.VaultFactoryTransactor.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 (_VaultFactory *VaultFactoryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _VaultFactory.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 (_VaultFactory *VaultFactoryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _VaultFactory.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_VaultFactory *VaultFactoryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _VaultFactory.Contract.contract.Transact(opts, method, params...) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_VaultFactory *VaultFactoryCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _VaultFactory.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_VaultFactory *VaultFactorySession) DEFAULTADMINROLE() ([32]byte, error) { + return _VaultFactory.Contract.DEFAULTADMINROLE(&_VaultFactory.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_VaultFactory *VaultFactoryCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _VaultFactory.Contract.DEFAULTADMINROLE(&_VaultFactory.CallOpts) +} + +// NODEREGISTRYCONTRACT is a free data retrieval call binding the contract method 0xf8bc93a5. +// +// Solidity: function NODE_REGISTRY_CONTRACT() view returns(bytes32) +func (_VaultFactory *VaultFactoryCaller) NODEREGISTRYCONTRACT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _VaultFactory.contract.Call(opts, &out, "NODE_REGISTRY_CONTRACT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// NODEREGISTRYCONTRACT is a free data retrieval call binding the contract method 0xf8bc93a5. +// +// Solidity: function NODE_REGISTRY_CONTRACT() view returns(bytes32) +func (_VaultFactory *VaultFactorySession) NODEREGISTRYCONTRACT() ([32]byte, error) { + return _VaultFactory.Contract.NODEREGISTRYCONTRACT(&_VaultFactory.CallOpts) +} + +// NODEREGISTRYCONTRACT is a free data retrieval call binding the contract method 0xf8bc93a5. +// +// Solidity: function NODE_REGISTRY_CONTRACT() view returns(bytes32) +func (_VaultFactory *VaultFactoryCallerSession) NODEREGISTRYCONTRACT() ([32]byte, error) { + return _VaultFactory.Contract.NODEREGISTRYCONTRACT(&_VaultFactory.CallOpts) +} + +// ComputeNodeELRewardVaultAddress is a free data retrieval call binding the contract method 0xca934f60. +// +// Solidity: function computeNodeELRewardVaultAddress(uint8 _poolId, uint256 _operatorId) view returns(address) +func (_VaultFactory *VaultFactoryCaller) ComputeNodeELRewardVaultAddress(opts *bind.CallOpts, _poolId uint8, _operatorId *big.Int) (common.Address, error) { + var out []interface{} + err := _VaultFactory.contract.Call(opts, &out, "computeNodeELRewardVaultAddress", _poolId, _operatorId) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ComputeNodeELRewardVaultAddress is a free data retrieval call binding the contract method 0xca934f60. +// +// Solidity: function computeNodeELRewardVaultAddress(uint8 _poolId, uint256 _operatorId) view returns(address) +func (_VaultFactory *VaultFactorySession) ComputeNodeELRewardVaultAddress(_poolId uint8, _operatorId *big.Int) (common.Address, error) { + return _VaultFactory.Contract.ComputeNodeELRewardVaultAddress(&_VaultFactory.CallOpts, _poolId, _operatorId) +} + +// ComputeNodeELRewardVaultAddress is a free data retrieval call binding the contract method 0xca934f60. +// +// Solidity: function computeNodeELRewardVaultAddress(uint8 _poolId, uint256 _operatorId) view returns(address) +func (_VaultFactory *VaultFactoryCallerSession) ComputeNodeELRewardVaultAddress(_poolId uint8, _operatorId *big.Int) (common.Address, error) { + return _VaultFactory.Contract.ComputeNodeELRewardVaultAddress(&_VaultFactory.CallOpts, _poolId, _operatorId) +} + +// ComputeWithdrawVaultAddress is a free data retrieval call binding the contract method 0x74903b02. +// +// Solidity: function computeWithdrawVaultAddress(uint8 _poolId, uint256 _operatorId, uint256 _validatorCount) view returns(address) +func (_VaultFactory *VaultFactoryCaller) ComputeWithdrawVaultAddress(opts *bind.CallOpts, _poolId uint8, _operatorId *big.Int, _validatorCount *big.Int) (common.Address, error) { + var out []interface{} + err := _VaultFactory.contract.Call(opts, &out, "computeWithdrawVaultAddress", _poolId, _operatorId, _validatorCount) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ComputeWithdrawVaultAddress is a free data retrieval call binding the contract method 0x74903b02. +// +// Solidity: function computeWithdrawVaultAddress(uint8 _poolId, uint256 _operatorId, uint256 _validatorCount) view returns(address) +func (_VaultFactory *VaultFactorySession) ComputeWithdrawVaultAddress(_poolId uint8, _operatorId *big.Int, _validatorCount *big.Int) (common.Address, error) { + return _VaultFactory.Contract.ComputeWithdrawVaultAddress(&_VaultFactory.CallOpts, _poolId, _operatorId, _validatorCount) +} + +// ComputeWithdrawVaultAddress is a free data retrieval call binding the contract method 0x74903b02. +// +// Solidity: function computeWithdrawVaultAddress(uint8 _poolId, uint256 _operatorId, uint256 _validatorCount) view returns(address) +func (_VaultFactory *VaultFactoryCallerSession) ComputeWithdrawVaultAddress(_poolId uint8, _operatorId *big.Int, _validatorCount *big.Int) (common.Address, error) { + return _VaultFactory.Contract.ComputeWithdrawVaultAddress(&_VaultFactory.CallOpts, _poolId, _operatorId, _validatorCount) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_VaultFactory *VaultFactoryCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _VaultFactory.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_VaultFactory *VaultFactorySession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _VaultFactory.Contract.GetRoleAdmin(&_VaultFactory.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_VaultFactory *VaultFactoryCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _VaultFactory.Contract.GetRoleAdmin(&_VaultFactory.CallOpts, role) +} + +// GetValidatorWithdrawCredential is a free data retrieval call binding the contract method 0xae4e4e45. +// +// Solidity: function getValidatorWithdrawCredential(address _withdrawVault) pure returns(bytes) +func (_VaultFactory *VaultFactoryCaller) GetValidatorWithdrawCredential(opts *bind.CallOpts, _withdrawVault common.Address) ([]byte, error) { + var out []interface{} + err := _VaultFactory.contract.Call(opts, &out, "getValidatorWithdrawCredential", _withdrawVault) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// GetValidatorWithdrawCredential is a free data retrieval call binding the contract method 0xae4e4e45. +// +// Solidity: function getValidatorWithdrawCredential(address _withdrawVault) pure returns(bytes) +func (_VaultFactory *VaultFactorySession) GetValidatorWithdrawCredential(_withdrawVault common.Address) ([]byte, error) { + return _VaultFactory.Contract.GetValidatorWithdrawCredential(&_VaultFactory.CallOpts, _withdrawVault) +} + +// GetValidatorWithdrawCredential is a free data retrieval call binding the contract method 0xae4e4e45. +// +// Solidity: function getValidatorWithdrawCredential(address _withdrawVault) pure returns(bytes) +func (_VaultFactory *VaultFactoryCallerSession) GetValidatorWithdrawCredential(_withdrawVault common.Address) ([]byte, error) { + return _VaultFactory.Contract.GetValidatorWithdrawCredential(&_VaultFactory.CallOpts, _withdrawVault) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_VaultFactory *VaultFactoryCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _VaultFactory.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_VaultFactory *VaultFactorySession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _VaultFactory.Contract.HasRole(&_VaultFactory.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_VaultFactory *VaultFactoryCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _VaultFactory.Contract.HasRole(&_VaultFactory.CallOpts, role, account) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_VaultFactory *VaultFactoryCaller) StaderConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _VaultFactory.contract.Call(opts, &out, "staderConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_VaultFactory *VaultFactorySession) StaderConfig() (common.Address, error) { + return _VaultFactory.Contract.StaderConfig(&_VaultFactory.CallOpts) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_VaultFactory *VaultFactoryCallerSession) StaderConfig() (common.Address, error) { + return _VaultFactory.Contract.StaderConfig(&_VaultFactory.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_VaultFactory *VaultFactoryCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _VaultFactory.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 (_VaultFactory *VaultFactorySession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _VaultFactory.Contract.SupportsInterface(&_VaultFactory.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_VaultFactory *VaultFactoryCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _VaultFactory.Contract.SupportsInterface(&_VaultFactory.CallOpts, interfaceId) +} + +// VaultProxyImplementation is a free data retrieval call binding the contract method 0xee5fca3b. +// +// Solidity: function vaultProxyImplementation() view returns(address) +func (_VaultFactory *VaultFactoryCaller) VaultProxyImplementation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _VaultFactory.contract.Call(opts, &out, "vaultProxyImplementation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// VaultProxyImplementation is a free data retrieval call binding the contract method 0xee5fca3b. +// +// Solidity: function vaultProxyImplementation() view returns(address) +func (_VaultFactory *VaultFactorySession) VaultProxyImplementation() (common.Address, error) { + return _VaultFactory.Contract.VaultProxyImplementation(&_VaultFactory.CallOpts) +} + +// VaultProxyImplementation is a free data retrieval call binding the contract method 0xee5fca3b. +// +// Solidity: function vaultProxyImplementation() view returns(address) +func (_VaultFactory *VaultFactoryCallerSession) VaultProxyImplementation() (common.Address, error) { + return _VaultFactory.Contract.VaultProxyImplementation(&_VaultFactory.CallOpts) +} + +// DeployNodeELRewardVault is a paid mutator transaction binding the contract method 0x6a0b6881. +// +// Solidity: function deployNodeELRewardVault(uint8 _poolId, uint256 _operatorId) returns(address) +func (_VaultFactory *VaultFactoryTransactor) DeployNodeELRewardVault(opts *bind.TransactOpts, _poolId uint8, _operatorId *big.Int) (*types.Transaction, error) { + return _VaultFactory.contract.Transact(opts, "deployNodeELRewardVault", _poolId, _operatorId) +} + +// DeployNodeELRewardVault is a paid mutator transaction binding the contract method 0x6a0b6881. +// +// Solidity: function deployNodeELRewardVault(uint8 _poolId, uint256 _operatorId) returns(address) +func (_VaultFactory *VaultFactorySession) DeployNodeELRewardVault(_poolId uint8, _operatorId *big.Int) (*types.Transaction, error) { + return _VaultFactory.Contract.DeployNodeELRewardVault(&_VaultFactory.TransactOpts, _poolId, _operatorId) +} + +// DeployNodeELRewardVault is a paid mutator transaction binding the contract method 0x6a0b6881. +// +// Solidity: function deployNodeELRewardVault(uint8 _poolId, uint256 _operatorId) returns(address) +func (_VaultFactory *VaultFactoryTransactorSession) DeployNodeELRewardVault(_poolId uint8, _operatorId *big.Int) (*types.Transaction, error) { + return _VaultFactory.Contract.DeployNodeELRewardVault(&_VaultFactory.TransactOpts, _poolId, _operatorId) +} + +// DeployWithdrawVault is a paid mutator transaction binding the contract method 0x7f70ce0d. +// +// Solidity: function deployWithdrawVault(uint8 _poolId, uint256 _operatorId, uint256 _validatorCount, uint256 _validatorId) returns(address) +func (_VaultFactory *VaultFactoryTransactor) DeployWithdrawVault(opts *bind.TransactOpts, _poolId uint8, _operatorId *big.Int, _validatorCount *big.Int, _validatorId *big.Int) (*types.Transaction, error) { + return _VaultFactory.contract.Transact(opts, "deployWithdrawVault", _poolId, _operatorId, _validatorCount, _validatorId) +} + +// DeployWithdrawVault is a paid mutator transaction binding the contract method 0x7f70ce0d. +// +// Solidity: function deployWithdrawVault(uint8 _poolId, uint256 _operatorId, uint256 _validatorCount, uint256 _validatorId) returns(address) +func (_VaultFactory *VaultFactorySession) DeployWithdrawVault(_poolId uint8, _operatorId *big.Int, _validatorCount *big.Int, _validatorId *big.Int) (*types.Transaction, error) { + return _VaultFactory.Contract.DeployWithdrawVault(&_VaultFactory.TransactOpts, _poolId, _operatorId, _validatorCount, _validatorId) +} + +// DeployWithdrawVault is a paid mutator transaction binding the contract method 0x7f70ce0d. +// +// Solidity: function deployWithdrawVault(uint8 _poolId, uint256 _operatorId, uint256 _validatorCount, uint256 _validatorId) returns(address) +func (_VaultFactory *VaultFactoryTransactorSession) DeployWithdrawVault(_poolId uint8, _operatorId *big.Int, _validatorCount *big.Int, _validatorId *big.Int) (*types.Transaction, error) { + return _VaultFactory.Contract.DeployWithdrawVault(&_VaultFactory.TransactOpts, _poolId, _operatorId, _validatorCount, _validatorId) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_VaultFactory *VaultFactoryTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _VaultFactory.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_VaultFactory *VaultFactorySession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _VaultFactory.Contract.GrantRole(&_VaultFactory.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_VaultFactory *VaultFactoryTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _VaultFactory.Contract.GrantRole(&_VaultFactory.TransactOpts, role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_VaultFactory *VaultFactoryTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _VaultFactory.contract.Transact(opts, "renounceRole", role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_VaultFactory *VaultFactorySession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _VaultFactory.Contract.RenounceRole(&_VaultFactory.TransactOpts, role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_VaultFactory *VaultFactoryTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _VaultFactory.Contract.RenounceRole(&_VaultFactory.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_VaultFactory *VaultFactoryTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _VaultFactory.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_VaultFactory *VaultFactorySession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _VaultFactory.Contract.RevokeRole(&_VaultFactory.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_VaultFactory *VaultFactoryTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _VaultFactory.Contract.RevokeRole(&_VaultFactory.TransactOpts, role, account) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_VaultFactory *VaultFactoryTransactor) UpdateStaderConfig(opts *bind.TransactOpts, _staderConfig common.Address) (*types.Transaction, error) { + return _VaultFactory.contract.Transact(opts, "updateStaderConfig", _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_VaultFactory *VaultFactorySession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _VaultFactory.Contract.UpdateStaderConfig(&_VaultFactory.TransactOpts, _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_VaultFactory *VaultFactoryTransactorSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _VaultFactory.Contract.UpdateStaderConfig(&_VaultFactory.TransactOpts, _staderConfig) +} + +// UpdateVaultProxyAddress is a paid mutator transaction binding the contract method 0xab4f36d5. +// +// Solidity: function updateVaultProxyAddress(address _vaultProxyImpl) returns() +func (_VaultFactory *VaultFactoryTransactor) UpdateVaultProxyAddress(opts *bind.TransactOpts, _vaultProxyImpl common.Address) (*types.Transaction, error) { + return _VaultFactory.contract.Transact(opts, "updateVaultProxyAddress", _vaultProxyImpl) +} + +// UpdateVaultProxyAddress is a paid mutator transaction binding the contract method 0xab4f36d5. +// +// Solidity: function updateVaultProxyAddress(address _vaultProxyImpl) returns() +func (_VaultFactory *VaultFactorySession) UpdateVaultProxyAddress(_vaultProxyImpl common.Address) (*types.Transaction, error) { + return _VaultFactory.Contract.UpdateVaultProxyAddress(&_VaultFactory.TransactOpts, _vaultProxyImpl) +} + +// UpdateVaultProxyAddress is a paid mutator transaction binding the contract method 0xab4f36d5. +// +// Solidity: function updateVaultProxyAddress(address _vaultProxyImpl) returns() +func (_VaultFactory *VaultFactoryTransactorSession) UpdateVaultProxyAddress(_vaultProxyImpl common.Address) (*types.Transaction, error) { + return _VaultFactory.Contract.UpdateVaultProxyAddress(&_VaultFactory.TransactOpts, _vaultProxyImpl) +} + +// VaultFactoryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the VaultFactory contract. +type VaultFactoryInitializedIterator struct { + Event *VaultFactoryInitialized // 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 *VaultFactoryInitializedIterator) 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(VaultFactoryInitialized) + if err := 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(VaultFactoryInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *VaultFactoryInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *VaultFactoryInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// VaultFactoryInitialized represents a Initialized event raised by the VaultFactory contract. +type VaultFactoryInitialized 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 (_VaultFactory *VaultFactoryFilterer) FilterInitialized(opts *bind.FilterOpts) (*VaultFactoryInitializedIterator, error) { + + logs, sub, err := _VaultFactory.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &VaultFactoryInitializedIterator{contract: _VaultFactory.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 (_VaultFactory *VaultFactoryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *VaultFactoryInitialized) (event.Subscription, error) { + + logs, sub, err := _VaultFactory.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(VaultFactoryInitialized) + if err := _VaultFactory.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 (_VaultFactory *VaultFactoryFilterer) ParseInitialized(log types.Log) (*VaultFactoryInitialized, error) { + event := new(VaultFactoryInitialized) + if err := _VaultFactory.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// VaultFactoryNodeELRewardVaultCreatedIterator is returned from FilterNodeELRewardVaultCreated and is used to iterate over the raw logs and unpacked data for NodeELRewardVaultCreated events raised by the VaultFactory contract. +type VaultFactoryNodeELRewardVaultCreatedIterator struct { + Event *VaultFactoryNodeELRewardVaultCreated // 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 *VaultFactoryNodeELRewardVaultCreatedIterator) 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(VaultFactoryNodeELRewardVaultCreated) + if err := 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(VaultFactoryNodeELRewardVaultCreated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *VaultFactoryNodeELRewardVaultCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *VaultFactoryNodeELRewardVaultCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// VaultFactoryNodeELRewardVaultCreated represents a NodeELRewardVaultCreated event raised by the VaultFactory contract. +type VaultFactoryNodeELRewardVaultCreated struct { + NodeDistributor common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNodeELRewardVaultCreated is a free log retrieval operation binding the contract event 0x534e63617d48745c45efd754f53f9292453257107e03d0140db96fc8e3bf7ec9. +// +// Solidity: event NodeELRewardVaultCreated(address nodeDistributor) +func (_VaultFactory *VaultFactoryFilterer) FilterNodeELRewardVaultCreated(opts *bind.FilterOpts) (*VaultFactoryNodeELRewardVaultCreatedIterator, error) { + + logs, sub, err := _VaultFactory.contract.FilterLogs(opts, "NodeELRewardVaultCreated") + if err != nil { + return nil, err + } + return &VaultFactoryNodeELRewardVaultCreatedIterator{contract: _VaultFactory.contract, event: "NodeELRewardVaultCreated", logs: logs, sub: sub}, nil +} + +// WatchNodeELRewardVaultCreated is a free log subscription operation binding the contract event 0x534e63617d48745c45efd754f53f9292453257107e03d0140db96fc8e3bf7ec9. +// +// Solidity: event NodeELRewardVaultCreated(address nodeDistributor) +func (_VaultFactory *VaultFactoryFilterer) WatchNodeELRewardVaultCreated(opts *bind.WatchOpts, sink chan<- *VaultFactoryNodeELRewardVaultCreated) (event.Subscription, error) { + + logs, sub, err := _VaultFactory.contract.WatchLogs(opts, "NodeELRewardVaultCreated") + 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(VaultFactoryNodeELRewardVaultCreated) + if err := _VaultFactory.contract.UnpackLog(event, "NodeELRewardVaultCreated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseNodeELRewardVaultCreated is a log parse operation binding the contract event 0x534e63617d48745c45efd754f53f9292453257107e03d0140db96fc8e3bf7ec9. +// +// Solidity: event NodeELRewardVaultCreated(address nodeDistributor) +func (_VaultFactory *VaultFactoryFilterer) ParseNodeELRewardVaultCreated(log types.Log) (*VaultFactoryNodeELRewardVaultCreated, error) { + event := new(VaultFactoryNodeELRewardVaultCreated) + if err := _VaultFactory.contract.UnpackLog(event, "NodeELRewardVaultCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// VaultFactoryRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the VaultFactory contract. +type VaultFactoryRoleAdminChangedIterator struct { + Event *VaultFactoryRoleAdminChanged // 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 *VaultFactoryRoleAdminChangedIterator) 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(VaultFactoryRoleAdminChanged) + if err := 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(VaultFactoryRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *VaultFactoryRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *VaultFactoryRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// VaultFactoryRoleAdminChanged represents a RoleAdminChanged event raised by the VaultFactory contract. +type VaultFactoryRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_VaultFactory *VaultFactoryFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*VaultFactoryRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _VaultFactory.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &VaultFactoryRoleAdminChangedIterator{contract: _VaultFactory.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_VaultFactory *VaultFactoryFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *VaultFactoryRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _VaultFactory.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(VaultFactoryRoleAdminChanged) + if err := _VaultFactory.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_VaultFactory *VaultFactoryFilterer) ParseRoleAdminChanged(log types.Log) (*VaultFactoryRoleAdminChanged, error) { + event := new(VaultFactoryRoleAdminChanged) + if err := _VaultFactory.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// VaultFactoryRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the VaultFactory contract. +type VaultFactoryRoleGrantedIterator struct { + Event *VaultFactoryRoleGranted // 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 *VaultFactoryRoleGrantedIterator) 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(VaultFactoryRoleGranted) + if err := 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(VaultFactoryRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *VaultFactoryRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *VaultFactoryRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// VaultFactoryRoleGranted represents a RoleGranted event raised by the VaultFactory contract. +type VaultFactoryRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_VaultFactory *VaultFactoryFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*VaultFactoryRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _VaultFactory.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &VaultFactoryRoleGrantedIterator{contract: _VaultFactory.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_VaultFactory *VaultFactoryFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *VaultFactoryRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _VaultFactory.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, 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(VaultFactoryRoleGranted) + if err := _VaultFactory.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_VaultFactory *VaultFactoryFilterer) ParseRoleGranted(log types.Log) (*VaultFactoryRoleGranted, error) { + event := new(VaultFactoryRoleGranted) + if err := _VaultFactory.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// VaultFactoryRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the VaultFactory contract. +type VaultFactoryRoleRevokedIterator struct { + Event *VaultFactoryRoleRevoked // 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 *VaultFactoryRoleRevokedIterator) 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(VaultFactoryRoleRevoked) + if err := 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(VaultFactoryRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *VaultFactoryRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *VaultFactoryRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// VaultFactoryRoleRevoked represents a RoleRevoked event raised by the VaultFactory contract. +type VaultFactoryRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_VaultFactory *VaultFactoryFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*VaultFactoryRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _VaultFactory.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &VaultFactoryRoleRevokedIterator{contract: _VaultFactory.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_VaultFactory *VaultFactoryFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *VaultFactoryRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _VaultFactory.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, 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(VaultFactoryRoleRevoked) + if err := _VaultFactory.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_VaultFactory *VaultFactoryFilterer) ParseRoleRevoked(log types.Log) (*VaultFactoryRoleRevoked, error) { + event := new(VaultFactoryRoleRevoked) + if err := _VaultFactory.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// VaultFactoryUpdatedStaderConfigIterator is returned from FilterUpdatedStaderConfig and is used to iterate over the raw logs and unpacked data for UpdatedStaderConfig events raised by the VaultFactory contract. +type VaultFactoryUpdatedStaderConfigIterator struct { + Event *VaultFactoryUpdatedStaderConfig // 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 *VaultFactoryUpdatedStaderConfigIterator) 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(VaultFactoryUpdatedStaderConfig) + if err := 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(VaultFactoryUpdatedStaderConfig) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *VaultFactoryUpdatedStaderConfigIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *VaultFactoryUpdatedStaderConfigIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// VaultFactoryUpdatedStaderConfig represents a UpdatedStaderConfig event raised by the VaultFactory contract. +type VaultFactoryUpdatedStaderConfig struct { + StaderConfig common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedStaderConfig is a free log retrieval operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_VaultFactory *VaultFactoryFilterer) FilterUpdatedStaderConfig(opts *bind.FilterOpts) (*VaultFactoryUpdatedStaderConfigIterator, error) { + + logs, sub, err := _VaultFactory.contract.FilterLogs(opts, "UpdatedStaderConfig") + if err != nil { + return nil, err + } + return &VaultFactoryUpdatedStaderConfigIterator{contract: _VaultFactory.contract, event: "UpdatedStaderConfig", logs: logs, sub: sub}, nil +} + +// WatchUpdatedStaderConfig is a free log subscription operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_VaultFactory *VaultFactoryFilterer) WatchUpdatedStaderConfig(opts *bind.WatchOpts, sink chan<- *VaultFactoryUpdatedStaderConfig) (event.Subscription, error) { + + logs, sub, err := _VaultFactory.contract.WatchLogs(opts, "UpdatedStaderConfig") + 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(VaultFactoryUpdatedStaderConfig) + if err := _VaultFactory.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedStaderConfig is a log parse operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_VaultFactory *VaultFactoryFilterer) ParseUpdatedStaderConfig(log types.Log) (*VaultFactoryUpdatedStaderConfig, error) { + event := new(VaultFactoryUpdatedStaderConfig) + if err := _VaultFactory.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// VaultFactoryUpdatedVaultProxyImplementationIterator is returned from FilterUpdatedVaultProxyImplementation and is used to iterate over the raw logs and unpacked data for UpdatedVaultProxyImplementation events raised by the VaultFactory contract. +type VaultFactoryUpdatedVaultProxyImplementationIterator struct { + Event *VaultFactoryUpdatedVaultProxyImplementation // 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 *VaultFactoryUpdatedVaultProxyImplementationIterator) 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(VaultFactoryUpdatedVaultProxyImplementation) + if err := 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(VaultFactoryUpdatedVaultProxyImplementation) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *VaultFactoryUpdatedVaultProxyImplementationIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *VaultFactoryUpdatedVaultProxyImplementationIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// VaultFactoryUpdatedVaultProxyImplementation represents a UpdatedVaultProxyImplementation event raised by the VaultFactory contract. +type VaultFactoryUpdatedVaultProxyImplementation struct { + VaultProxyImplementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedVaultProxyImplementation is a free log retrieval operation binding the contract event 0x77358c5e9bc05f53688720682a283a5de55b771a614836c83cb1428deb2ece2d. +// +// Solidity: event UpdatedVaultProxyImplementation(address vaultProxyImplementation) +func (_VaultFactory *VaultFactoryFilterer) FilterUpdatedVaultProxyImplementation(opts *bind.FilterOpts) (*VaultFactoryUpdatedVaultProxyImplementationIterator, error) { + + logs, sub, err := _VaultFactory.contract.FilterLogs(opts, "UpdatedVaultProxyImplementation") + if err != nil { + return nil, err + } + return &VaultFactoryUpdatedVaultProxyImplementationIterator{contract: _VaultFactory.contract, event: "UpdatedVaultProxyImplementation", logs: logs, sub: sub}, nil +} + +// WatchUpdatedVaultProxyImplementation is a free log subscription operation binding the contract event 0x77358c5e9bc05f53688720682a283a5de55b771a614836c83cb1428deb2ece2d. +// +// Solidity: event UpdatedVaultProxyImplementation(address vaultProxyImplementation) +func (_VaultFactory *VaultFactoryFilterer) WatchUpdatedVaultProxyImplementation(opts *bind.WatchOpts, sink chan<- *VaultFactoryUpdatedVaultProxyImplementation) (event.Subscription, error) { + + logs, sub, err := _VaultFactory.contract.WatchLogs(opts, "UpdatedVaultProxyImplementation") + 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(VaultFactoryUpdatedVaultProxyImplementation) + if err := _VaultFactory.contract.UnpackLog(event, "UpdatedVaultProxyImplementation", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedVaultProxyImplementation is a log parse operation binding the contract event 0x77358c5e9bc05f53688720682a283a5de55b771a614836c83cb1428deb2ece2d. +// +// Solidity: event UpdatedVaultProxyImplementation(address vaultProxyImplementation) +func (_VaultFactory *VaultFactoryFilterer) ParseUpdatedVaultProxyImplementation(log types.Log) (*VaultFactoryUpdatedVaultProxyImplementation, error) { + event := new(VaultFactoryUpdatedVaultProxyImplementation) + if err := _VaultFactory.contract.UnpackLog(event, "UpdatedVaultProxyImplementation", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// VaultFactoryWithdrawVaultCreatedIterator is returned from FilterWithdrawVaultCreated and is used to iterate over the raw logs and unpacked data for WithdrawVaultCreated events raised by the VaultFactory contract. +type VaultFactoryWithdrawVaultCreatedIterator struct { + Event *VaultFactoryWithdrawVaultCreated // 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 *VaultFactoryWithdrawVaultCreatedIterator) 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(VaultFactoryWithdrawVaultCreated) + if err := 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(VaultFactoryWithdrawVaultCreated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *VaultFactoryWithdrawVaultCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *VaultFactoryWithdrawVaultCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// VaultFactoryWithdrawVaultCreated represents a WithdrawVaultCreated event raised by the VaultFactory contract. +type VaultFactoryWithdrawVaultCreated struct { + WithdrawVault common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawVaultCreated is a free log retrieval operation binding the contract event 0x3961159e01aea37eec106905b883c13f18c7c19abfde04fef6835c94d2af51b9. +// +// Solidity: event WithdrawVaultCreated(address withdrawVault) +func (_VaultFactory *VaultFactoryFilterer) FilterWithdrawVaultCreated(opts *bind.FilterOpts) (*VaultFactoryWithdrawVaultCreatedIterator, error) { + + logs, sub, err := _VaultFactory.contract.FilterLogs(opts, "WithdrawVaultCreated") + if err != nil { + return nil, err + } + return &VaultFactoryWithdrawVaultCreatedIterator{contract: _VaultFactory.contract, event: "WithdrawVaultCreated", logs: logs, sub: sub}, nil +} + +// WatchWithdrawVaultCreated is a free log subscription operation binding the contract event 0x3961159e01aea37eec106905b883c13f18c7c19abfde04fef6835c94d2af51b9. +// +// Solidity: event WithdrawVaultCreated(address withdrawVault) +func (_VaultFactory *VaultFactoryFilterer) WatchWithdrawVaultCreated(opts *bind.WatchOpts, sink chan<- *VaultFactoryWithdrawVaultCreated) (event.Subscription, error) { + + logs, sub, err := _VaultFactory.contract.WatchLogs(opts, "WithdrawVaultCreated") + 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(VaultFactoryWithdrawVaultCreated) + if err := _VaultFactory.contract.UnpackLog(event, "WithdrawVaultCreated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawVaultCreated is a log parse operation binding the contract event 0x3961159e01aea37eec106905b883c13f18c7c19abfde04fef6835c94d2af51b9. +// +// Solidity: event WithdrawVaultCreated(address withdrawVault) +func (_VaultFactory *VaultFactoryFilterer) ParseWithdrawVaultCreated(log types.Log) (*VaultFactoryWithdrawVaultCreated, error) { + event := new(VaultFactoryWithdrawVaultCreated) + if err := _VaultFactory.contract.UnpackLog(event, "WithdrawVaultCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/testing/contracts/VaultProxy.go b/testing/contracts/VaultProxy.go index 5586f8416..38ffad732 100644 --- a/testing/contracts/VaultProxy.go +++ b/testing/contracts/VaultProxy.go @@ -31,8 +31,8 @@ var ( // VaultProxyMetaData contains all meta data concerning the VaultProxy contract. var VaultProxyMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_isValidatorWithdrawalVault\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"UpdatedOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"id\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isValidatorWithdrawalVault\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolId\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultSettleStatus\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b506040516107a73803806107a783398101604081905261002e9161015f565b6100378161011a565b5f80546201000062ffff00199091166101008715150262ff00001916171763ff0000001916630100000060ff8616021790556001829055600380546001600160a01b0319166001600160a01b03831690811790915560408051636e9960c360e01b81529051636e9960c3916004808201926020929091908290030181865afa1580156100c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e991906101b8565b600280546001600160a01b0319166001600160a01b039290921691821790556101119061011a565b505050506101d8565b6001600160a01b0381166101415760405163d92e233d60e01b815260040160405180910390fd5b50565b80516001600160a01b038116811461015a575f80fd5b919050565b5f805f8060808587031215610172575f80fd5b84518015158114610181575f80fd5b602086015190945060ff81168114610197575f80fd5b604086015190935091506101ad60608601610144565b905092959194509250565b5f602082840312156101c8575f80fd5b6101d182610144565b9392505050565b6105c2806101e55f395ff3fe608060405260043610610085575f3560e01c80637ef4947d116100585780637ef4947d146102d85780638da5cb5b146102f05780639ee804cb1461030f578063af640d0f14610330578063bc5920ba1461035357610085565b8063392e53cd146102205780633e0dc34e14610253578063490ffa35146102845780637cc0bb90146102bb575b5f3660605f8060019054906101000a900460ff166101165760035f9054906101000a90046001600160a01b03166001600160a01b031663e8fe18736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100ed573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061011191906104f5565b61018a565b60035f9054906101000a90046001600160a01b03166001600160a01b0316636d28ad1c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610166573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061018a91906104f5565b90505f80826001600160a01b031686866040516101a8929190610517565b5f60405180830381855af49150503d805f81146101e0576040519150601f19603f3d011682016040523d82523d5f602084013e6101e5565b606091505b509150915081610212578060405162461bcd60e51b81526004016102099190610526565b60405180910390fd5b805195506020019350505050f35b34801561022b575f80fd5b505f5461023e9062010000900460ff1681565b60405190151581526020015b60405180910390f35b34801561025e575f80fd5b505f54610272906301000000900460ff1681565b60405160ff909116815260200161024a565b34801561028f575f80fd5b506003546102a3906001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b3480156102c6575f80fd5b505f5461023e90610100900460ff1681565b3480156102e3575f80fd5b505f5461023e9060ff1681565b3480156102fb575f80fd5b506002546102a3906001600160a01b031681565b34801561031a575f80fd5b5061032e610329366004610571565b610367565b005b34801561033b575f80fd5b5061034560015481565b60405190815260200161024a565b34801561035e575f80fd5b5061032e6103ef565b6002546001600160a01b0316331461039257604051632e6c18c960e11b815260040160405180910390fd5b61039b816104b7565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a150565b60035f9054906101000a90046001600160a01b03166001600160a01b0316636e9960c36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561043f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046391906104f5565b600280546001600160a01b0319166001600160a01b039290921691821790556040519081527f957090e72c0a1b3ebf83c682eb8c1f88c2a18cd0578b91a819efb28859f0f3a39060200160405180910390a1565b6001600160a01b0381166104de5760405163d92e233d60e01b815260040160405180910390fd5b50565b6001600160a01b03811681146104de575f80fd5b5f60208284031215610505575f80fd5b8151610510816104e1565b9392505050565b818382375f9101908152919050565b5f6020808352835180828501525f5b8181101561055157858101830151858201604001528201610535565b505f604082860101526040601f19601f8301168501019250505092915050565b5f60208284031215610581575f80fd5b8135610510816104e156fea264697066735822122059452f4aea1751c54e15abdc5f1bdcf91c9a15d15e004de54e9cfb13c077959664736f6c63430008140033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"UpdatedOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"id\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_isValidatorWithdrawalVault\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"initialise\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isValidatorWithdrawalVault\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolId\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultSettleStatus\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b506107568061001d5f395ff3fe608060405260043610610090575f3560e01c80637ef4947d116100585780637ef4947d146103045780638da5cb5b1461031c5780639ee804cb1461033b578063af640d0f1461035a578063bc5920ba1461037d57610090565b8063120c59e41461022b578063392e53cd1461024c5780633e0dc34e1461027f578063490ffa35146102b05780637cc0bb90146102e7575b5f3660605f8060019054906101000a900460ff166101215760035f9054906101000a90046001600160a01b03166001600160a01b031663e8fe18736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061011c9190610630565b610195565b60035f9054906101000a90046001600160a01b03166001600160a01b0316636d28ad1c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610171573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101959190610630565b90505f80826001600160a01b031686866040516101b3929190610652565b5f60405180830381855af49150503d805f81146101eb576040519150601f19603f3d011682016040523d82523d5f602084013e6101f0565b606091505b50915091508161021d578060405162461bcd60e51b81526004016102149190610661565b60405180910390fd5b805195506020019350505050f35b348015610236575f80fd5b5061024a6102453660046106ac565b610391565b005b348015610257575f80fd5b505f5461026a9062010000900460ff1681565b60405190151581526020015b60405180910390f35b34801561028a575f80fd5b505f5461029e906301000000900460ff1681565b60405160ff9091168152602001610276565b3480156102bb575f80fd5b506003546102cf906001600160a01b031681565b6040516001600160a01b039091168152602001610276565b3480156102f2575f80fd5b505f5461026a90610100900460ff1681565b34801561030f575f80fd5b505f5461026a9060ff1681565b348015610327575f80fd5b506002546102cf906001600160a01b031681565b348015610346575f80fd5b5061024a610355366004610705565b6104a2565b348015610365575f80fd5b5061036f60015481565b604051908152602001610276565b348015610388575f80fd5b5061024a61052a565b5f5462010000900460ff16156103b95760405162dc149f60e41b815260040160405180910390fd5b6103c2816105f2565b5f80546201000062ffff00199091166101008715150262ff00001916171763ff0000001916630100000060ff8616021790556001829055600380546001600160a01b0319166001600160a01b03831690811790915560408051636e9960c360e01b81529051636e9960c3916004808201926020929091908290030181865afa158015610450573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104749190610630565b600280546001600160a01b0319166001600160a01b0392909216918217905561049c906105f2565b50505050565b6002546001600160a01b031633146104cd57604051632e6c18c960e11b815260040160405180910390fd5b6104d6816105f2565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a150565b60035f9054906101000a90046001600160a01b03166001600160a01b0316636e9960c36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561057a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059e9190610630565b600280546001600160a01b0319166001600160a01b039290921691821790556040519081527f957090e72c0a1b3ebf83c682eb8c1f88c2a18cd0578b91a819efb28859f0f3a39060200160405180910390a1565b6001600160a01b0381166106195760405163d92e233d60e01b815260040160405180910390fd5b50565b6001600160a01b0381168114610619575f80fd5b5f60208284031215610640575f80fd5b815161064b8161061c565b9392505050565b818382375f9101908152919050565b5f6020808352835180828501525f5b8181101561068c57858101830151858201604001528201610670565b505f604082860101526040601f19601f8301168501019250505092915050565b5f805f80608085870312156106bf575f80fd5b843580151581146106ce575f80fd5b9350602085013560ff811681146106e3575f80fd5b92506040850135915060608501356106fa8161061c565b939692955090935050565b5f60208284031215610715575f80fd5b813561064b8161061c56fea264697066735822122032304ea603f2de08d0b88b402f1d134232dce29b0fb9b0d9bd6b8fdb821fc23b64736f6c63430008140033", } // VaultProxyABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var VaultProxyABI = VaultProxyMetaData.ABI var VaultProxyBin = VaultProxyMetaData.Bin // DeployVaultProxy deploys a new Ethereum contract, binding an instance of VaultProxy to it. -func DeployVaultProxy(auth *bind.TransactOpts, backend bind.ContractBackend, _isValidatorWithdrawalVault bool, _poolId uint8, _id *big.Int, _staderConfig common.Address) (common.Address, *types.Transaction, *VaultProxy, error) { +func DeployVaultProxy(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *VaultProxy, error) { parsed, err := VaultProxyMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployVaultProxy(auth *bind.TransactOpts, backend bind.ContractBackend, _is return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(VaultProxyBin), backend, _isValidatorWithdrawalVault, _poolId, _id, _staderConfig) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(VaultProxyBin), backend) if err != nil { return common.Address{}, nil, nil, err } @@ -419,6 +419,27 @@ func (_VaultProxy *VaultProxyCallerSession) VaultSettleStatus() (bool, error) { return _VaultProxy.Contract.VaultSettleStatus(&_VaultProxy.CallOpts) } +// Initialise is a paid mutator transaction binding the contract method 0x120c59e4. +// +// Solidity: function initialise(bool _isValidatorWithdrawalVault, uint8 _poolId, uint256 _id, address _staderConfig) returns() +func (_VaultProxy *VaultProxyTransactor) Initialise(opts *bind.TransactOpts, _isValidatorWithdrawalVault bool, _poolId uint8, _id *big.Int, _staderConfig common.Address) (*types.Transaction, error) { + return _VaultProxy.contract.Transact(opts, "initialise", _isValidatorWithdrawalVault, _poolId, _id, _staderConfig) +} + +// Initialise is a paid mutator transaction binding the contract method 0x120c59e4. +// +// Solidity: function initialise(bool _isValidatorWithdrawalVault, uint8 _poolId, uint256 _id, address _staderConfig) returns() +func (_VaultProxy *VaultProxySession) Initialise(_isValidatorWithdrawalVault bool, _poolId uint8, _id *big.Int, _staderConfig common.Address) (*types.Transaction, error) { + return _VaultProxy.Contract.Initialise(&_VaultProxy.TransactOpts, _isValidatorWithdrawalVault, _poolId, _id, _staderConfig) +} + +// Initialise is a paid mutator transaction binding the contract method 0x120c59e4. +// +// Solidity: function initialise(bool _isValidatorWithdrawalVault, uint8 _poolId, uint256 _id, address _staderConfig) returns() +func (_VaultProxy *VaultProxyTransactorSession) Initialise(_isValidatorWithdrawalVault bool, _poolId uint8, _id *big.Int, _staderConfig common.Address) (*types.Transaction, error) { + return _VaultProxy.Contract.Initialise(&_VaultProxy.TransactOpts, _isValidatorWithdrawalVault, _poolId, _id, _staderConfig) +} + // UpdateOwner is a paid mutator transaction binding the contract method 0xbc5920ba. // // Solidity: function updateOwner() returns() diff --git a/testing/deployHelper_test.go b/testing/deployHelper_test.go index 305ef7f39..f97d7997d 100644 --- a/testing/deployHelper_test.go +++ b/testing/deployHelper_test.go @@ -63,80 +63,79 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { mn, _ := stdCfContract.MANAGER(&bind.CallOpts{}) _, err = stdCfContract.GrantRole(auth, mn, fromAddress) require.Nil(t, err) - auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + + // am, _ := stdCfContract.ADMIN(&bind.CallOpts{}) + _, err = stdCfContract.UpdateAdmin(auth, fromAddress) require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) // deploy the ethx contract ethXAddr, _, ethxContract, err := contracts.DeployETHX(auth, client, fromAddress, staderCfAddress) require.Nil(t, err) fmt.Printf("EthXAddr %+v", ethXAddr.Hex()) - - auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) - require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) ethxContract.UpdateStaderConfig(auth, staderCfAddress) - auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) - require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) // Deploy node permission regis plNodeRegistryAddr, _, nrContact, err := contracts.DeployPermissionlessNodeRegistry(auth, client, fromAddress, staderCfAddress) require.Nil(t, err) - auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) - require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) _, err = stdCfContract.UpdatePermissionlessNodeRegistry(auth, plNodeRegistryAddr) require.Nil(t, err) - auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) - require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) // Permissionless pool permissionlessPoolAddr, _, _, err := contracts.DeployPermissionlessPool(auth, client, fromAddress, staderCfAddress) - - require.Nil(t, err) - auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) _, err = stdCfContract.UpdatePermissionlessPool(auth, permissionlessPoolAddr) require.Nil(t, err) - auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) - require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) // PoolUtils poolUtils, _, poolUtilsContract, err := contracts.DeployPoolUtils(auth, client, fromAddress, staderCfAddress) require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) - auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) - - require.Nil(t, err) poolUtilsContract.AddNewPool(auth, uint8(1), permissionlessPoolAddr) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) - auth, err = GetNextTransaction(client, fromAddress, privateKey, chainID) - require.Nil(t, err) + x, err := poolUtilsContract.GetPoolIdArray(&bind.CallOpts{}) + fmt.Printf("X %+v", x) + require.Nil(t, err) _, err = stdCfContract.UpdatePoolUtils(auth, poolUtils) require.Nil(t, err) auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) - // Vault proxy - // auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) - // vaultProxyAddr, _, _, err := contracts.DeployVaultProxy( - // auth, - // client, - // true, - // 1, - // big.NewInt(1), - // staderCfAddress, - // ) - // require.Nil(t, err) - // auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + // Vault factory + vaultFactoryAddr, _, vaultFactoryContract, err := contracts.DeployVaultFactory( + auth, + client, + fromAddress, + staderCfAddress, + ) + require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + + nrcRole, err := vaultFactoryContract.NODEREGISTRYCONTRACT(&bind.CallOpts{}) + require.Nil(t, err) + _, err = vaultFactoryContract.GrantRole(auth, nrcRole, plNodeRegistryAddr) + require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) - // _, err = stdCfContract.UpdateVaultFactory(auth, vaultProxyAddr) - // require.Nil(t, err) - // auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + _, err = stdCfContract.UpdateVaultFactory(auth, vaultFactoryAddr) + require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) - // vaultStore, err := stdCfContract.GetVaultFactory(&bind.CallOpts{}) - // require.Nil(t, err) - // require.Equal(t, vaultStore, vaultProxyAddr) + vaultStore, err := stdCfContract.GetVaultFactory(&bind.CallOpts{}) + require.Nil(t, err) + require.Equal(t, vaultStore, vaultFactoryAddr) // SocializingPool spAddr, _, _, err := contracts.DeploySocializingPool(auth, client, fromAddress, staderCfAddress) diff --git a/testing/node_test.go b/testing/node_test.go index ffb097e3a..022a27874 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -38,6 +38,21 @@ func (s *StaderNodeSuite) TestNodeDaemon() { time.Sleep(time.Second * 10) } +// func (s *StaderNodeSuite) TestNodeDeposit() { +// a := os.Args +// err := s.app.Run([]string{ +// a[0], +// "api", +// "validator", +// "deposit", +// "9000000000000000000", +// "0", +// "1", +// "false", +// }) +// assert.Nil(s.T(), err) +// } + // func (s *StaderNodeSuite) TestNode2() { // time.Sleep(time.Second * 20) // } From ff8a9360b937fbac0246fb6c854187c604406db7 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 20 Jun 2023 19:39:22 +0700 Subject: [PATCH 28/90] add scripts --- .github/workflows/go_test.yml | 2 +- anvil_test_node.sh | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100755 anvil_test_node.sh diff --git a/.github/workflows/go_test.yml b/.github/workflows/go_test.yml index f4c57e1f2..d231ca920 100644 --- a/.github/workflows/go_test.yml +++ b/.github/workflows/go_test.yml @@ -11,7 +11,7 @@ jobs: uses: foundry-rs/foundry-toolchain@v1 - name: Run avil run: | - anvil + nohup ./anvil_test_node.sh - name: Install and start kurtosis run: | diff --git a/anvil_test_node.sh b/anvil_test_node.sh new file mode 100755 index 000000000..2bf82fc89 --- /dev/null +++ b/anvil_test_node.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +set -Eeuo pipefail + +exec anvil \ + --balance 1000000000 \ + --gas-limit 1000000000 \ From 951bc36d8fe7e18796ac1b01b1c2817a9334b55b Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 20 Jun 2023 19:41:10 +0700 Subject: [PATCH 29/90] Refactor --- .github/workflows/go_test.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/go_test.yml b/.github/workflows/go_test.yml index d231ca920..b0f7b62a7 100644 --- a/.github/workflows/go_test.yml +++ b/.github/workflows/go_test.yml @@ -9,9 +9,7 @@ jobs: - name: Install Foundry uses: foundry-rs/foundry-toolchain@v1 - - name: Run avil - run: | - nohup ./anvil_test_node.sh + - name: Install and start kurtosis run: | @@ -26,6 +24,9 @@ jobs: uses: actions/setup-go@v4 with: go-version: '1.19.x' + - name: Run avil + run: | + nohup ./anvil_test_node.sh - name: Install dependencies run: go mod download all - name: Test with the Go CLI From 6016f14c89bb1835d4ee0ce70c32e656dff8593f Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 20 Jun 2023 19:44:38 +0700 Subject: [PATCH 30/90] Update CLI --- .github/workflows/go_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/go_test.yml b/.github/workflows/go_test.yml index b0f7b62a7..46dabb582 100644 --- a/.github/workflows/go_test.yml +++ b/.github/workflows/go_test.yml @@ -26,7 +26,7 @@ jobs: go-version: '1.19.x' - name: Run avil run: | - nohup ./anvil_test_node.sh + nohup ./anvil_test_node.sh & - name: Install dependencies run: go mod download all - name: Test with the Go CLI From 0a529b795edcd060d7f0673c898a4e6f3f9955e1 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 20 Jun 2023 20:35:32 +0700 Subject: [PATCH 31/90] Put back config --- testing/configHelper_test.go | 85 ++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 42 deletions(-) diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index 53d88ef7a..291801aca 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -5,7 +5,10 @@ import ( "fmt" "os" "path/filepath" + "time" + "github.com/alecthomas/assert" + "github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context" "github.com/mitchellh/go-homedir" "github.com/sirupsen/logrus" "github.com/stader-labs/stader-node/shared/services" @@ -188,48 +191,46 @@ func (s *StaderNodeSuite) setConfig(c *cli.Context, elURL string, clURL string) func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { t := s.T() - /* - logrus.Info("------------ CONNECTING TO KURTOSIS ENGINE ---------------") - kurtosis_context.NewKurtosisContextFromLocalEngine() - kurtosisCtx, err := kurtosis_context.NewKurtosisContextFromLocalEngine() - assert.NoError(t, err, "An error occurred connecting to the Kurtosis engine") - - enclaveId := fmt.Sprintf("%s-%d", enclaveIdPrefix, time.Now().Unix()) - - enclaveCtx, err := kurtosisCtx.CreateEnclave(ctx, enclaveId, isPartitioningEnabled) - - s.kurtosisCtx = kurtosisCtx - s.enclaveId = enclaveId - assert.NoError(t, err, "An error occurred creating the enclave") - - logrus.Info("------------ EXECUTING PACKAGE ---------------") - - starlarkRunResult, err := enclaveCtx.RunStarlarkRemotePackageBlocking(ctx, remotePackage, useDefaultMainFile, useDefaultFunctionName, emptyParams, defaultDryRun, defaultParallelism) - - assert.NoError(t, err, "An error executing loading the package") - assert.Nil(t, starlarkRunResult.InterpretationError) - assert.Empty(t, starlarkRunResult.ValidationErrors) - assert.Nil(t, starlarkRunResult.ExecutionError) - - logrus.Info("------------ EXECUTING TESTS ---------------") - beaconContext, err := enclaveCtx.GetServiceContext(clClientBeacon) - assert.Nil(t, err) - apiServicePublicPorts := beaconContext.GetPublicPorts() - assert.NotNil(t, apiServicePublicPorts) - apiServiceHttpPortSpec, found := apiServicePublicPorts["http"] - assert.True(t, found) - clPort := apiServiceHttpPortSpec.GetNumber() - - elContext, err := enclaveCtx.GetServiceContext(elCient) - assert.Nil(t, err) - elPublicPorts := elContext.GetPublicPorts() - assert.NotNil(t, apiServicePublicPorts) - apiServiceHttpPortSpec, found = elPublicPorts["rpc"] - assert.True(t, found) - elPort := apiServiceHttpPortSpec.GetNumber() - - */ - clUrl := fmt.Sprintf("http://127.0.0.1:62043") + logrus.Info("------------ CONNECTING TO KURTOSIS ENGINE ---------------") + kurtosis_context.NewKurtosisContextFromLocalEngine() + kurtosisCtx, err := kurtosis_context.NewKurtosisContextFromLocalEngine() + assert.NoError(t, err, "An error occurred connecting to the Kurtosis engine") + + enclaveId := fmt.Sprintf("%s-%d", enclaveIdPrefix, time.Now().Unix()) + + enclaveCtx, err := kurtosisCtx.CreateEnclave(ctx, enclaveId, isPartitioningEnabled) + + s.kurtosisCtx = kurtosisCtx + s.enclaveId = enclaveId + assert.NoError(t, err, "An error occurred creating the enclave") + + logrus.Info("------------ EXECUTING PACKAGE ---------------") + + starlarkRunResult, err := enclaveCtx.RunStarlarkRemotePackageBlocking(ctx, remotePackage, useDefaultMainFile, useDefaultFunctionName, emptyParams, defaultDryRun, defaultParallelism) + + assert.NoError(t, err, "An error executing loading the package") + assert.Nil(t, starlarkRunResult.InterpretationError) + assert.Empty(t, starlarkRunResult.ValidationErrors) + assert.Nil(t, starlarkRunResult.ExecutionError) + + logrus.Info("------------ EXECUTING TESTS ---------------") + beaconContext, err := enclaveCtx.GetServiceContext(clClientBeacon) + assert.Nil(t, err) + apiServicePublicPorts := beaconContext.GetPublicPorts() + assert.NotNil(t, apiServicePublicPorts) + apiServiceHttpPortSpec, found := apiServicePublicPorts["http"] + assert.True(t, found) + clPort := apiServiceHttpPortSpec.GetNumber() + + elContext, err := enclaveCtx.GetServiceContext(elCient) + assert.Nil(t, err) + elPublicPorts := elContext.GetPublicPorts() + assert.NotNil(t, apiServicePublicPorts) + apiServiceHttpPortSpec, found = elPublicPorts["rpc"] + assert.True(t, found) + // elPort := apiServiceHttpPortSpec.GetNumber() + + clUrl := fmt.Sprintf("http://127.0.0.1:%d", clPort) elUrl := fmt.Sprintf("http://127.0.0.1:8545") s.setConfig(c, elUrl, clUrl) From 88b7bfef2458e0b197a75774a6732fb6eab49eaf Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 20 Jun 2023 21:17:30 +0700 Subject: [PATCH 32/90] Fix build --- stader-cli/validator/export.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/stader-cli/validator/export.go b/stader-cli/validator/export.go index 56dec55e4..c5459344a 100644 --- a/stader-cli/validator/export.go +++ b/stader-cli/validator/export.go @@ -11,7 +11,6 @@ import ( "github.com/stader-labs/stader-node/shared/utils/math" "github.com/stader-labs/stader-node/stader-lib/types" "github.com/stader-labs/stader-node/stader-lib/utils/eth" - "github.com/test-go/testify/require" "github.com/urfave/cli" ) @@ -54,7 +53,9 @@ func exportValidatorStatus(c *cli.Context) error { fmt.Printf("Exporting validator status for %d validators\n\n", len(status.ValidatorInfos)) file, err := os.Create("validator_info.csv") - require.Nil(t, err) + if err != nil { + return err + } defer file.Close() csvWriter := csv.NewWriter(file) From 387c5a8261e5f2014954b3836a32505d917ecee5 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 20 Jun 2023 22:48:24 +0700 Subject: [PATCH 33/90] Refactor --- go.mod | 2 -- go.sum | 6 +----- shared/services/bc-manager.go | 2 -- testing/configHelper_test.go | 39 +++++++++++++++++------------------ testing/node_test.go | 6 +++--- 5 files changed, 23 insertions(+), 32 deletions(-) diff --git a/go.mod b/go.mod index 0375d6b5b..f17e28eac 100644 --- a/go.mod +++ b/go.mod @@ -39,11 +39,9 @@ require ( github.com/rivo/tview v0.0.0-20230530133550-8bd761dda819 // indirect github.com/sethvargo/go-password v0.2.0 github.com/shirou/gopsutil/v3 v3.23.1 - github.com/sirupsen/logrus v1.9.3 github.com/stader-labs/ethcli-ui/configuration v0.0.0-20230602142021-378099c5eca8 github.com/stader-labs/ethcli-ui/wizard v0.0.0-20230602142021-378099c5eca8 github.com/stretchr/testify v1.8.4 - github.com/test-go/testify v1.1.4 // indirect github.com/tyler-smith/go-bip39 v1.1.0 github.com/ulikunitz/xz v0.5.11 // indirect github.com/urfave/cli v1.22.10 diff --git a/go.sum b/go.sum index 8a1d70704..c7ee27ec0 100644 --- a/go.sum +++ b/go.sum @@ -1905,9 +1905,8 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= -github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= @@ -1984,8 +1983,6 @@ github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161/go.mod h1:wM7WEv github.com/templexxx/xor v0.0.0-20191217153810-f85b25db303b/go.mod h1:5XA7W9S6mni3h5uvOC75dA3m9CCCaS83lltmc0ukdi4= github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= -github.com/test-go/testify v1.1.4 h1:Tf9lntrKUMHiXQ07qBScBTSA0dhYQlu83hswqelv1iE= -github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU= github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e h1:cR8/SYRgyQCt5cNCMniB/ZScMkhI9nk8U5C7SbISXjo= github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e/go.mod h1:Tu4lItkATkonrYuvtVjG0/rhy15qrNGNTjPdaphtZ/8= github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= @@ -2493,7 +2490,6 @@ golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220731174439-a90be440212d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/shared/services/bc-manager.go b/shared/services/bc-manager.go index de9f0e199..3b9eac114 100644 --- a/shared/services/bc-manager.go +++ b/shared/services/bc-manager.go @@ -75,8 +75,6 @@ func NewBeaconClientManager(cfg *config.StaderConfig) (*BeaconClientManager, err return nil, fmt.Errorf("Unknown Consensus client mode '%v'", cfg.ConsensusClientMode.Value) } - primaryProvider = "http://127.0.0.1:62043" - // Fallback CC var fallbackProvider string if cfg.UseFallbackClients.Value == true { diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index 291801aca..215dca618 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -7,10 +7,8 @@ import ( "path/filepath" "time" - "github.com/alecthomas/assert" "github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context" "github.com/mitchellh/go-homedir" - "github.com/sirupsen/logrus" "github.com/stader-labs/stader-node/shared/services" "github.com/stader-labs/stader-node/shared/services/passwords" "github.com/stader-labs/stader-node/shared/services/stader" @@ -177,6 +175,7 @@ func (s *StaderNodeSuite) setConfig(c *cli.Context, elURL string, clURL string) cfg.Native.EcHttpUrl.Value = elURL cfg.Native.ConsensusClient.Value = clURL + cfg.Native.CcHttpUrl.Value = clURL cfg.ChangeNetwork(cfgtypes.Network_Local) path, err := homedir.Expand(ConfigPath) @@ -191,10 +190,10 @@ func (s *StaderNodeSuite) setConfig(c *cli.Context, elURL string, clURL string) func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { t := s.T() - logrus.Info("------------ CONNECTING TO KURTOSIS ENGINE ---------------") + fmt.Println("------------ CONNECTING TO KURTOSIS ENGINE ---------------") kurtosis_context.NewKurtosisContextFromLocalEngine() kurtosisCtx, err := kurtosis_context.NewKurtosisContextFromLocalEngine() - assert.NoError(t, err, "An error occurred connecting to the Kurtosis engine") + require.NoError(t, err, "An error occurred connecting to the Kurtosis engine") enclaveId := fmt.Sprintf("%s-%d", enclaveIdPrefix, time.Now().Unix()) @@ -202,41 +201,41 @@ func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { s.kurtosisCtx = kurtosisCtx s.enclaveId = enclaveId - assert.NoError(t, err, "An error occurred creating the enclave") + require.NoError(t, err, "An error occurred creating the enclave") - logrus.Info("------------ EXECUTING PACKAGE ---------------") + fmt.Println("------------ EXECUTING PACKAGE ---------------") starlarkRunResult, err := enclaveCtx.RunStarlarkRemotePackageBlocking(ctx, remotePackage, useDefaultMainFile, useDefaultFunctionName, emptyParams, defaultDryRun, defaultParallelism) - assert.NoError(t, err, "An error executing loading the package") - assert.Nil(t, starlarkRunResult.InterpretationError) - assert.Empty(t, starlarkRunResult.ValidationErrors) - assert.Nil(t, starlarkRunResult.ExecutionError) + require.NoError(t, err, "An error executing loading the package") + require.Nil(t, starlarkRunResult.InterpretationError) + require.Empty(t, starlarkRunResult.ValidationErrors) + require.Nil(t, starlarkRunResult.ExecutionError) - logrus.Info("------------ EXECUTING TESTS ---------------") + fmt.Println("------------ EXECUTING TESTS ---------------") beaconContext, err := enclaveCtx.GetServiceContext(clClientBeacon) - assert.Nil(t, err) + require.Nil(t, err) apiServicePublicPorts := beaconContext.GetPublicPorts() - assert.NotNil(t, apiServicePublicPorts) + require.NotNil(t, apiServicePublicPorts) apiServiceHttpPortSpec, found := apiServicePublicPorts["http"] - assert.True(t, found) + require.True(t, found) clPort := apiServiceHttpPortSpec.GetNumber() elContext, err := enclaveCtx.GetServiceContext(elCient) - assert.Nil(t, err) + require.Nil(t, err) elPublicPorts := elContext.GetPublicPorts() - assert.NotNil(t, apiServicePublicPorts) + require.NotNil(t, apiServicePublicPorts) apiServiceHttpPortSpec, found = elPublicPorts["rpc"] - assert.True(t, found) - // elPort := apiServiceHttpPortSpec.GetNumber() + require.True(t, found) + elPort := apiServiceHttpPortSpec.GetNumber() clUrl := fmt.Sprintf("http://127.0.0.1:%d", clPort) - elUrl := fmt.Sprintf("http://127.0.0.1:8545") + elUrl := fmt.Sprintf("http://127.0.0.1:%d", elPort) s.setConfig(c, elUrl, clUrl) s.setupWallet(ctx, c) - logrus.Info("------------ DEPLOYING CONTRACT ---------------") + fmt.Println("------------ DEPLOYING CONTRACT ---------------") deployContracts(t, c, elUrl) } diff --git a/testing/node_test.go b/testing/node_test.go index 022a27874..6d96a65f4 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -3,6 +3,7 @@ package testing import ( "context" "flag" + "fmt" "os" "testing" "time" @@ -10,7 +11,6 @@ import ( // store "github.com/stader-labs/stader-node/stader-lib/contracts" "github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context" "github.com/mitchellh/go-homedir" - "github.com/sirupsen/logrus" //stader/register.go @@ -77,7 +77,7 @@ func (s *StaderNodeSuite) SetupSuite() { s.staderConfig(ctx, c) - logrus.Println("Done SetupSuite()") + fmt.Println("Done SetupSuite()") go func() { a := os.Args @@ -95,7 +95,7 @@ func (s *StaderNodeSuite) SetupSuite() { // run once, after test suite methods func (s *StaderNodeSuite) TearDownSuite() { - logrus.Println("TearDown StaderNodeSuite") + fmt.Println("TearDown StaderNodeSuite") defer func() { if s.kurtosisCtx != nil { From 0acfc069f1de3b1639d044298f227c0a666c52af Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 20 Jun 2023 22:53:51 +0700 Subject: [PATCH 34/90] Update ec --- testing/configHelper_test.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index 215dca618..c9f0170b1 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -221,16 +221,16 @@ func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { require.True(t, found) clPort := apiServiceHttpPortSpec.GetNumber() - elContext, err := enclaveCtx.GetServiceContext(elCient) - require.Nil(t, err) - elPublicPorts := elContext.GetPublicPorts() - require.NotNil(t, apiServicePublicPorts) - apiServiceHttpPortSpec, found = elPublicPorts["rpc"] - require.True(t, found) - elPort := apiServiceHttpPortSpec.GetNumber() + // elContext, err := enclaveCtx.GetServiceContext(elCient) + // require.Nil(t, err) + // elPublicPorts := elContext.GetPublicPorts() + // require.NotNil(t, apiServicePublicPorts) + // apiServiceHttpPortSpec, found = elPublicPorts["rpc"] + // require.True(t, found) + // elPort := apiServiceHttpPortSpec.GetNumber() clUrl := fmt.Sprintf("http://127.0.0.1:%d", clPort) - elUrl := fmt.Sprintf("http://127.0.0.1:%d", elPort) + elUrl := fmt.Sprintf("http://127.0.0.1:%d", 8545) s.setConfig(c, elUrl, clUrl) s.setupWallet(ctx, c) From c6a15464f6b320fb7cb29a5dbaf9b03ca7da04d1 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 21 Jun 2023 01:01:10 +0700 Subject: [PATCH 35/90] Refactor --- shared/services/config/stadernode-config.go | 2 +- shared/services/wallet/node.go | 10 ++-- stader-lib/node/validator.go | 6 +-- testing/configHelper_test.go | 50 +++++++++---------- .../contracts/PermissionlessNodeRegistry.go | 2 +- testing/deployHelper_test.go | 4 ++ testing/node_test.go | 28 +++++------ 7 files changed, 53 insertions(+), 49 deletions(-) diff --git a/shared/services/config/stadernode-config.go b/shared/services/config/stadernode-config.go index 260b540e9..37e51aa46 100644 --- a/shared/services/config/stadernode-config.go +++ b/shared/services/config/stadernode-config.go @@ -236,7 +236,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Prater: 5, // Goerli config.Network_Devnet: 5, // Also goerli config.Network_Zhejiang: 1337803, // Zhejiang - config.Network_Local: 3151908, // Zhejiang + config.Network_Local: 31337, // Zhejiang }, ethxTokenAddress: map[config.Network]string{ diff --git a/shared/services/wallet/node.go b/shared/services/wallet/node.go index 94fd6ae5b..3fdbf2256 100644 --- a/shared/services/wallet/node.go +++ b/shared/services/wallet/node.go @@ -79,10 +79,12 @@ func (w *Wallet) GetNodeAccountTransactor() (*bind.TransactOpts, error) { } // Create & return transactor - transactor, err := bind.NewKeyedTransactorWithChainID(privateKey, w.chainID) - transactor.GasFeeCap = w.maxFee - transactor.GasTipCap = w.maxPriorityFee - transactor.GasLimit = w.gasLimit + /// TODO: CHEKC THIS + transactor, err := bind.NewKeyedTransactorWithChainID(privateKey, big.NewInt(31337)) + // transactor.GasFeeCap = big.NewInt(10000000000) + // transactor.GasTipCap = big.NewInt(10000000000) + transactor.GasLimit = uint64(10000000) + transactor.GasPrice = big.NewInt(10000000000) transactor.Context = context.Background() return transactor, err diff --git a/stader-lib/node/validator.go b/stader-lib/node/validator.go index d875f7c8c..fb9ade290 100644 --- a/stader-lib/node/validator.go +++ b/stader-lib/node/validator.go @@ -20,9 +20,9 @@ func EstimateAddValidatorKeys(pnr *stader.PermissionlessNodeRegistryContractMana func AddValidatorKeys(pnr *stader.PermissionlessNodeRegistryContractManager, pubKeys [][]byte, preDepositSignatures [][]byte, depositSignatures [][]byte, opts *bind.TransactOpts) (*types.Transaction, error) { tx, err := pnr.PermissionlessNodeRegistry.AddValidatorKeys( opts, - [][]byte{}, - [][]byte{}, - [][]byte{}, + pubKeys, + preDepositSignatures, + depositSignatures, ) if err != nil { return nil, fmt.Errorf("could not add validator keys: %w", err) diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index c9f0170b1..35ac86980 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -5,9 +5,7 @@ import ( "fmt" "os" "path/filepath" - "time" - "github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context" "github.com/mitchellh/go-homedir" "github.com/stader-labs/stader-node/shared/services" "github.com/stader-labs/stader-node/shared/services/passwords" @@ -190,36 +188,36 @@ func (s *StaderNodeSuite) setConfig(c *cli.Context, elURL string, clURL string) func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { t := s.T() - fmt.Println("------------ CONNECTING TO KURTOSIS ENGINE ---------------") - kurtosis_context.NewKurtosisContextFromLocalEngine() - kurtosisCtx, err := kurtosis_context.NewKurtosisContextFromLocalEngine() - require.NoError(t, err, "An error occurred connecting to the Kurtosis engine") + // fmt.Println("------------ CONNECTING TO KURTOSIS ENGINE ---------------") + // kurtosis_context.NewKurtosisContextFromLocalEngine() + // kurtosisCtx, err := kurtosis_context.NewKurtosisContextFromLocalEngine() + // require.NoError(t, err, "An error occurred connecting to the Kurtosis engine") - enclaveId := fmt.Sprintf("%s-%d", enclaveIdPrefix, time.Now().Unix()) + // enclaveId := fmt.Sprintf("%s-%d", enclaveIdPrefix, time.Now().Unix()) - enclaveCtx, err := kurtosisCtx.CreateEnclave(ctx, enclaveId, isPartitioningEnabled) + // enclaveCtx, err := kurtosisCtx.CreateEnclave(ctx, enclaveId, isPartitioningEnabled) - s.kurtosisCtx = kurtosisCtx - s.enclaveId = enclaveId - require.NoError(t, err, "An error occurred creating the enclave") + // s.kurtosisCtx = kurtosisCtx + // s.enclaveId = enclaveId + // require.NoError(t, err, "An error occurred creating the enclave") - fmt.Println("------------ EXECUTING PACKAGE ---------------") + // fmt.Println("------------ EXECUTING PACKAGE ---------------") - starlarkRunResult, err := enclaveCtx.RunStarlarkRemotePackageBlocking(ctx, remotePackage, useDefaultMainFile, useDefaultFunctionName, emptyParams, defaultDryRun, defaultParallelism) + // starlarkRunResult, err := enclaveCtx.RunStarlarkRemotePackageBlocking(ctx, remotePackage, useDefaultMainFile, useDefaultFunctionName, emptyParams, defaultDryRun, defaultParallelism) - require.NoError(t, err, "An error executing loading the package") - require.Nil(t, starlarkRunResult.InterpretationError) - require.Empty(t, starlarkRunResult.ValidationErrors) - require.Nil(t, starlarkRunResult.ExecutionError) + // require.NoError(t, err, "An error executing loading the package") + // require.Nil(t, starlarkRunResult.InterpretationError) + // require.Empty(t, starlarkRunResult.ValidationErrors) + // require.Nil(t, starlarkRunResult.ExecutionError) - fmt.Println("------------ EXECUTING TESTS ---------------") - beaconContext, err := enclaveCtx.GetServiceContext(clClientBeacon) - require.Nil(t, err) - apiServicePublicPorts := beaconContext.GetPublicPorts() - require.NotNil(t, apiServicePublicPorts) - apiServiceHttpPortSpec, found := apiServicePublicPorts["http"] - require.True(t, found) - clPort := apiServiceHttpPortSpec.GetNumber() + // fmt.Println("------------ EXECUTING TESTS ---------------") + // beaconContext, err := enclaveCtx.GetServiceContext(clClientBeacon) + // require.Nil(t, err) + // apiServicePublicPorts := beaconContext.GetPublicPorts() + // require.NotNil(t, apiServicePublicPorts) + // apiServiceHttpPortSpec, found := apiServicePublicPorts["http"] + // require.True(t, found) + // _ = apiServiceHttpPortSpec.GetNumber() // elContext, err := enclaveCtx.GetServiceContext(elCient) // require.Nil(t, err) @@ -229,7 +227,7 @@ func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { // require.True(t, found) // elPort := apiServiceHttpPortSpec.GetNumber() - clUrl := fmt.Sprintf("http://127.0.0.1:%d", clPort) + clUrl := fmt.Sprintf("http://127.0.0.1:%d", 54645) elUrl := fmt.Sprintf("http://127.0.0.1:%d", 8545) s.setConfig(c, elUrl, clUrl) diff --git a/testing/contracts/PermissionlessNodeRegistry.go b/testing/contracts/PermissionlessNodeRegistry.go index 15c912e81..3dc6ca088 100644 --- a/testing/contracts/PermissionlessNodeRegistry.go +++ b/testing/contracts/PermissionlessNodeRegistry.go @@ -44,7 +44,7 @@ type Validator struct { // PermissionlessNodeRegistryMetaData contains all meta data concerning the PermissionlessNodeRegistry contract. var PermissionlessNodeRegistryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CooldownNotComplete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicatePoolIDOrPoolNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InSufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBondEthValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidKeyCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartAndEndIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MisMatchingInputKeysSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoChangeInState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSDCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorAlreadyOnBoardedInProtocol\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorIsDeactivate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorNotOnBoarded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PageNumberIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PubkeyAlreadyExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyVerifiedKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyWithdrawnKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UNEXPECTED_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"maxKeyLimitReached\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"AddedValidatorKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"DecreasedTotalActiveValidatorCount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"IncreasedTotalActiveValidatorCount\",\"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\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nodeRewardAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"OnboardedOperator\",\"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\":\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredCollateralToPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"batchKeyDepositLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedInputKeyCountLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"UpdatedMaxNonTerminalKeyPerOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"UpdatedNextQueuedValidatorIndex\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardAddress\",\"type\":\"address\"}],\"name\":\"UpdatedOperatorDetails\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"UpdatedSocializingPoolState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"}],\"name\":\"UpdatedValidatorDepositBlock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedVerifiedKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedWithdrawnKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedAsFrontRunned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedReadyToDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorStatusMarkedAsInvalidSignature\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COLLATERAL_ETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRONT_RUN_PENALTY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ID\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_depositSignature\",\"type\":\"bytes[]\"}],\"name\":\"addValidatorKeys\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"changeSocializingPoolState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllNodeELVaultAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorRewardAddress\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalKeys\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getSocializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsByOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"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\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"increaseTotalActiveValidatorCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inputKeyCountLimit\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_readyToDepositPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_frontRunPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_invalidSignaturePubkey\",\"type\":\"bytes[]\"}],\"name\":\"markValidatorReadyToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNonTerminalKeyPerOperator\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextQueuedValidatorIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextValidatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nodeELRewardVaultByOperatorId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_operatorRewardAddress\",\"type\":\"address\"}],\"name\":\"onboardNodeOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorIDByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"operatorStructById\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"operatorRewardAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorAddress\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queuedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"socializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"totalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferCollateralToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"}],\"name\":\"updateDepositStatusAndBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_inputKeyCountLimit\",\"type\":\"uint16\"}],\"name\":\"updateInputKeyCountLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"updateMaxNonTerminalKeyPerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"updateNextQueuedValidatorIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_rewardAddress\",\"type\":\"address\"}],\"name\":\"updateOperatorDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateVerifiedKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"validatorIdByPubkey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorIdsByOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorRegistry\",\"outputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifiedKeyBatchSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"withdrawnValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b5060405162004c7238038062004c728339810160408190526200003391620004c6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001f1565b6200010e82620001f1565b620001186200021c565b6200012262000278565b6200012c620002dc565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff00009091166a01000000000000000000006001600160a01b0386160261ffff1916171762010000600160501b03191662320000179055603260fc55620001a25f8462000340565b8015620001e8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620004fc565b6001600160a01b038116620002195760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002765760405162461bcd60e51b815260206004820152602b60248201525f8051602062004c5283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002d25760405162461bcd60e51b815260206004820152602b60248201525f8051602062004c5283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b62000276620003e3565b5f54610100900460ff16620003365760405162461bcd60e51b815260206004820152602b60248201525f8051602062004c5283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200027662000449565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16620003df575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200039e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff166200043d5760405162461bcd60e51b815260206004820152602b60248201525f8051602062004c5283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff16620004a35760405162461bcd60e51b815260206004820152602b60248201525f8051602062004c5283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b0381168114620004c1575f80fd5b919050565b5f8060408385031215620004d8575f80fd5b620004e383620004aa565b9150620004f360208401620004aa565b90509250929050565b614748806200050a5f395ff3fe60806040526004361061035b575f3560e01c806383ea2358116101bd578063bb7306bf116100f2578063deacde2b11610092578063ebb5c1741161006d578063ebb5c17414610a64578063f7c0918914610a90578063f90b083814610aa5578063f9c4dda414610ac4575f80fd5b8063deacde2b146109fe578063e0bf8b5314610a11578063e0d7d0e914610a3e575f80fd5b8063c8a00e7a116100cd578063c8a00e7a14610964578063cac8b30614610994578063d547741f146109c0578063d5e1e5ce146109df575f80fd5b8063bb7306bf146108f1578063bc4a3ad51461090c578063c34ade5c14610938575f80fd5b8063998888981161015d578063ab3e71eb11610138578063ab3e71eb14610884578063af533aa814610899578063b01db078146108b8578063b8d2f06c146108d2575f80fd5b806399888898146108335780639ee804cb14610852578063a217fddf14610871575f80fd5b806384b0fa4c1161019857806384b0fa4c146107aa5780638a25bcec146107c057806391d14854146107df5780639344b242146107fe575f80fd5b806383ea23581461073257806384522a6d1461076a5780638456cb5914610796575f80fd5b806349911bfb116102935780635c2c30a511610233578063683547b81161020e578063683547b8146106c757806374338e6d146106f357806377c359e1146107095780637bd977d91461071e575f80fd5b80635c2c30a5146106595780635c975abb1461069157806360c3cf3f146106a8575f80fd5b806358a994ea1161026e57806358a994ea146105c957806359c3c9b7146105e85780635a1239c1146106075780635ae7f25d1461063a575f80fd5b806349911bfb1461055c5780634f59ed801461057157806350d5d7ab1461058c575f80fd5b80632d1dbd74116102fe57806336514d9f116102d957806336514d9f146104e457806336568abe146105035780633f4ba83a14610522578063490ffa3514610536575f80fd5b80632d1dbd74146104845780632d32924f146104995780632f2ff15d146104c5575f80fd5b8063186d954111610339578063186d9541146103eb578063248a9ca31461040a5780632517cfbf14610446578063264f27f314610465575f80fd5b806301ffc9a71461035f578063044d2fe81461039357806313797bff146103ca575b5f80fd5b34801561036a575f80fd5b5061037e610379366004613bea565b610afb565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103b26103ad366004613c76565b610b31565b6040516001600160a01b03909116815260200161038a565b3480156103d5575f80fd5b506103e96103e4366004613d19565b610f50565b005b3480156103f6575f80fd5b506103e9610405366004613dab565b611397565b348015610415575f80fd5b50610438610424366004613dab565b5f9081526065602052604090206001015490565b60405190815260200161038a565b348015610451575f80fd5b506103e9610460366004613dc2565b611447565b348015610470575f80fd5b506103e961047f366004613de3565b6114a9565b34801561048f575f80fd5b5061043860fd5481565b3480156104a4575f80fd5b506104b86104b3366004613e21565b6116f4565b60405161038a9190613e41565b3480156104d0575f80fd5b506103e96104df366004613e8d565b611828565b3480156104ef575f80fd5b5061037e6104fe366004613ebb565b61184c565b34801561050e575f80fd5b506103e961051d366004613e8d565b611879565b34801561052d575f80fd5b506103e96118fc565b348015610541575f80fd5b5060fb546103b290600160501b90046001600160a01b031681565b348015610567575f80fd5b5061043860ff5481565b34801561057c575f80fd5b50610438673782dace9d90000081565b348015610597575f80fd5b5060fb546105b1906201000090046001600160401b031681565b6040516001600160401b03909116815260200161038a565b3480156105d4575f80fd5b506103e96105e3366004613eed565b611924565b3480156105f3575f80fd5b506103e9610602366004613dab565b611aa2565b348015610612575f80fd5b50610626610621366004613dab565b611b42565b60405161038a989796959493929190613fc0565b348015610645575f80fd5b506103e9610654366004613dab565b611d24565b348015610664575f80fd5b5061043861067336600461404d565b80516020818301810180516101038252928201919093012091525481565b34801561069c575f80fd5b5060975460ff1661037e565b3480156106b3575f80fd5b506103e96106c23660046140f7565b611e8b565b3480156106d2575f80fd5b506106e66106e136600461411d565b611f05565b60405161038a919061414f565b3480156106fe575f80fd5b506104386101005481565b348015610714575f80fd5b5061010154610438565b348015610729575f80fd5b506104386122bc565b34801561073d575f80fd5b506103b261074c366004613dab565b5f90815261010560205260409020600201546001600160a01b031690565b348015610775575f80fd5b50610438610784366004613dab565b6101086020525f908152604090205481565b3480156107a1575f80fd5b506103e96122d3565b3480156107b5575f80fd5b506104386101015481565b3480156107cb575f80fd5b506105b16107da36600461411d565b6122f9565b3480156107ea575f80fd5b5061037e6107f9366004613e8d565b6123c4565b348015610809575f80fd5b506103b2610818366004613dab565b6101096020525f90815260409020546001600160a01b031681565b34801561083e575f80fd5b506106e661084d366004613e21565b6123ee565b34801561085d575f80fd5b506103e961086c366004614239565b612739565b34801561087c575f80fd5b506104385f81565b34801561088f575f80fd5b5061043860fc5481565b3480156108a4575f80fd5b506103e96108b3366004613dab565b6127c2565b3480156108c3575f80fd5b50673782dace9d900000610438565b3480156108dd575f80fd5b506103e96108ec366004613dab565b612815565b3480156108fc575f80fd5b506104386729a2241af62c000081565b348015610917575f80fd5b50610438610926366004613dab565b6101046020525f908152604090205481565b348015610943575f80fd5b50610438610952366004613dab565b5f908152610107602052604090205490565b34801561096f575f80fd5b5061098361097e366004613dab565b6128a0565b60405161038a959493929190614254565b34801561099f575f80fd5b506104386109ae366004614239565b6101066020525f908152604090205481565b3480156109cb575f80fd5b506103e96109da366004613e8d565b612969565b3480156109ea575f80fd5b506104386109f9366004613e21565b61298d565b6103e9610a0c366004613d19565b6129b9565b348015610a1c575f80fd5b5060fb54610a2b9061ffff1681565b60405161ffff909116815260200161038a565b348015610a49575f80fd5b50610a52600181565b60405160ff909116815260200161038a565b348015610a6f575f80fd5b50610438610a7e366004613dab565b5f908152610108602052604090205490565b348015610a9b575f80fd5b5061043860fe5481565b348015610ab0575f80fd5b506103b2610abf366004614298565b6129d3565b348015610acf575f80fd5b5061037e610ade366004614239565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b2b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b3a612c3c565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb091906142b3565b905060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2791906142b3565b604051636fc4c27f60e11b8152600160048201526001600160a01b039182169183169063df8984fe90602401602060405180830381865afa158015610c6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9291906142b3565b6001600160a01b031614610cb9576040516303b8ffef60e41b815260040160405180910390fd5b604051639f7053f560e01b81526001600160a01b03821690639f7053f590610ce790889088906004016142f6565b5f604051808303815f87803b158015610cfe575f80fd5b505af1158015610d10573d5f803e3d5ffd5b50505050610d1d83612c82565b604051633e71376960e21b81523360048201526001600160a01b0382169063f9c4dda490602401602060405180830381865afa158015610d5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d839190614311565b15610da15760405163707999fb60e11b815260040160405180910390fd5b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e1791906142b3565b60fd54604051636a0b688160e01b81526001600482015260248101919091526001600160a01b039190911690636a0b6881906044016020604051808303815f875af1158015610e68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8c91906142b3565b60fd545f9081526101096020526040902080546001600160a01b0319166001600160a01b038316179055905086610ec35780610f38565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3891906142b3565b9250610f4687878787612ca9565b5050949350505050565b610f58612e37565b610f60612c3c565b60fb5460408051633871d0f160e01b81529051610fde923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd9919061432c565b612e90565b60fc5485908490839081610ff28486614357565b610ffc9190614357565b111561101b5760405163525e3de760e01b815260040160405180910390fd5b5f5b838110156110e4575f6101038b8b8481811061103b5761103b61436a565b905060200281019061104d919061437e565b60405161105b9291906143c0565b908152602001604051809103902054905061107581612f1c565b61107e81612f68565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b848181106110b1576110b161436a565b90506020028101906110c3919061437e565b836040516110d3939291906143cf565b60405180910390a15060010161101d565b5081156111c15760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116091906142b3565b6001600160a01b0316638d0d8cb66111806729a2241af62c0000856143f2565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156111a9575f80fd5b505af11580156111bb573d5f803e3d5ffd5b50505050505b5f5b828110156112b7575f6101038989848181106111e1576111e161436a565b90506020028101906111f3919061437e565b6040516112019291906143c0565b908152602001604051809103902054905061121b81612f1c565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b834668989848181106112845761128461436a565b9050602002810190611296919061437e565b836040516112a6939291906143cf565b60405180910390a1506001016111c3565b505f5b81811015611381575f6101038787848181106112d8576112d861436a565b90506020028101906112ea919061437e565b6040516112f89291906143c0565b908152602001604051809103902054905061131281612f1c565b61131b81612fa9565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f87878481811061134e5761134e61436a565b9050602002810190611360919061437e565b83604051611370939291906143cf565b60405180910390a1506001016112ba565b5050505061138f600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b815290516113ec923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb54611465903390600160501b90046001600160a01b0316613138565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c369060200161143c565b60fb5460408051633871d0f160e01b815290516114fe923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa15801561154c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611570919061432c565b81111561159057604051639519af4360e01b815260040160405180910390fd5b5f5b818110156116e5575f6101038585848181106115b0576115b061436a565b90506020028101906115c2919061437e565b6040516115d09291906143c0565b90815260200160405180910390205490506115ea816131bd565b611607576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b158015611669575f80fd5b505af115801561167b573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf798585848181106116b2576116b261436a565b90506020028101906116c4919061437e565b836040516116d4939291906143cf565b60405180910390a150600101611592565b506116ef81613408565b505050565b6060825f03611716576040516334d6e01560e01b815260040160405180910390fd5b5f82611723600186614409565b61172d91906143f2565b611738906001614357565b90505f6117458483614357565b905060fd548111611756578061175a565b60fd545b90505f82821161176a575f611774565b6117748383614409565b6001600160401b0381111561178b5761178b614039565b6040519080825280602002602001820160405280156117b4578160200160208202803683370190505b509050825b8281101561181e575f81815261010960205260409020546001600160a01b0316826117e48684614409565b815181106117f4576117f461436a565b6001600160a01b0390921660209283029190910190910152806118168161441c565b9150506117b9565b5095945050505050565b5f8281526065602052604090206001015461184281613453565b6116ef838361345d565b5f61010383836040516118609291906143c0565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146118ee5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6118f882826134e2565b5050565b60fb5461191a903390600160501b90046001600160a01b0316613548565b6119226135cd565b565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611975573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199991906142b3565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b81526004016119c69291906142f6565b5f604051808303815f87803b1580156119dd575f80fd5b505af11580156119ef573d5f803e3d5ffd5b505050506119fc81612c82565b611a053361361f565b50335f9081526101066020908152604080832054808452610105909252909120600101611a338486836144b1565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d8726977790611a949087908790879061456c565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b81529051611af7923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b806101015f828254611b099190614357565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f29060200161143c565b6101026020525f90815260409020805460018201805460ff9092169291611b6890614434565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9490614434565b8015611bdf5780601f10611bb657610100808354040283529160200191611bdf565b820191905f5260205f20905b815481529060010190602001808311611bc257829003601f168201915b505050505090806002018054611bf490614434565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2090614434565b8015611c6b5780601f10611c4257610100808354040283529160200191611c6b565b820191905f5260205f20905b815481529060010190602001808311611c4e57829003601f168201915b505050505090806003018054611c8090614434565b80601f0160208091040260200160405190810160405280929190818152602001828054611cac90614434565b8015611cf75780601f10611cce57610100808354040283529160200191611cf7565b820191905f5260205f20905b815481529060010190602001808311611cda57829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611d2c612e37565b60fb5460408051637a87fa0b60e01b81529051611d81923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df691906142b3565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611e2e575f80fd5b505af1158015611e40573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a81604051611e7691815260200190565b60405180910390a1611e88600160c955565b50565b60fb54611ea9903390600160501b90046001600160a01b0316613548565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a29060200161143c565b6060825f03611f27576040516334d6e01560e01b815260040160405180910390fd5b5f82611f34600186614409565b611f3e91906143f2565b90505f611f4b8483614357565b6001600160a01b0387165f9081526101066020526040812054919250819003611f875760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311611fa35782611fa5565b805b92505f848411611fb5575f611fbf565b611fbf8585614409565b6001600160401b03811115611fd657611fd6614039565b60405190808252806020026020018201604052801561200f57816020015b611ffc613ba0565b815260200190600190039081611ff45790505b509050845b848110156122af575f8481526101076020526040812080548390811061203c5761203c61436a565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff16600581111561207e5761207e613f3f565b600581111561208f5761208f613f3f565b81526020016001820180546120a390614434565b80601f01602080910402602001604051908101604052809291908181526020018280546120cf90614434565b801561211a5780601f106120f15761010080835404028352916020019161211a565b820191905f5260205f20905b8154815290600101906020018083116120fd57829003601f168201915b5050505050815260200160028201805461213390614434565b80601f016020809104026020016040519081016040528092919081815260200182805461215f90614434565b80156121aa5780601f10612181576101008083540402835291602001916121aa565b820191905f5260205f20905b81548152906001019060200180831161218d57829003601f168201915b505050505081526020016003820180546121c390614434565b80601f01602080910402602001604051908101604052809291908181526020018280546121ef90614434565b801561223a5780601f106122115761010080835404028352916020019161223a565b820191905f5260205f20905b81548152906001019060200180831161221d57829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152836122808985614409565b815181106122905761229061436a565b60200260200101819052505080806122a79061441c565b915050612014565b5098975050505050505050565b5f6101005460ff546122ce9190614409565b905090565b60fb546122f1903390600160501b90046001600160a01b0316613548565b61192261368d565b5f8183111561231b5760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f90815261010660205260408120549061234b825f908152610107602052604090205490565b905080841161235a578361235c565b805b93505f855b858110156123b9575f848152610107602052604081208054839081106123895761238961436a565b905f5260205f200154905061239d816136ca565b156123b057826123ac81614597565b9350505b50600101612361565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f03612410576040516334d6e01560e01b815260040160405180910390fd5b5f8261241d600186614409565b61242791906143f2565b612432906001614357565b90505f61243f8483614357565b905060fe5481116124505780612454565b60fe545b90505f846001600160401b0381111561246f5761246f614039565b6040519080825280602002602001820160405280156124a857816020015b612495613ba0565b81526020019060019003908161248d5790505b5090505f835b8381101561272d576124bf816131bd565b1561271b575f818152610102602052604090819020815161010081019092528054829060ff1660058111156124f6576124f6613f3f565b600581111561250757612507613f3f565b815260200160018201805461251b90614434565b80601f016020809104026020016040519081016040528092919081815260200182805461254790614434565b80156125925780601f1061256957610100808354040283529160200191612592565b820191905f5260205f20905b81548152906001019060200180831161257557829003601f168201915b505050505081526020016002820180546125ab90614434565b80601f01602080910402602001604051908101604052809291908181526020018280546125d790614434565b80156126225780601f106125f957610100808354040283529160200191612622565b820191905f5260205f20905b81548152906001019060200180831161260557829003601f168201915b5050505050815260200160038201805461263b90614434565b80601f016020809104026020016040519081016040528092919081815260200182805461266790614434565b80156126b25780601f10612689576101008083540402835291602001916126b2565b820191905f5260205f20905b81548152906001019060200180831161269557829003601f168201915b505050918352505060048201546001600160a01b03166020820152600582015460408201526006820154606082015260079091015460809091015283518490849081106127015761270161436a565b602002602001018190525081806127179061441c565b9250505b806127258161441c565b9150506124ae565b50815295945050505050565b5f61274381613453565b61274c82612c82565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb546127e0903390600160501b90046001600160a01b0316613138565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b49060200161143c565b60fb5460408051637a87fa0b60e01b8152905161286a923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da99060200161143c565b6101056020525f90815260409020805460018201805460ff80841694610100909404169291906128cf90614434565b80601f01602080910402602001604051908101604052809291908181526020018280546128fb90614434565b80156129465780601f1061291d57610100808354040283529160200191612946565b820191905f5260205f20905b81548152906001019060200180831161292957829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f8281526065602052604090206001015461298381613453565b6116ef83836134e2565b610107602052815f5260405f2081815481106129a7575f80fd5b905f5260205f20015f91509150505481565b6129c1612e37565b6129c9612c3c565b61138f600160c955565b5f806129de3361361f565b5f818152610105602052604090205490915083151561010090910460ff16151503612a1c57604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a91919061432c565b5f8281526101086020526040902054612aaa9190614357565b431015612aca5760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b031691508215612bc1576001600160a01b0382163115612b4957816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612b32575f80fd5b505af1158015612b44573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b9a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bbe91906142b3565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff16156119225760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016118e5565b6001600160a01b038116611e885760405163d92e233d60e01b815260040160405180910390fd5b6040518060a00160405280600115158152602001851515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b0384166020808401919091523360409384015260fd548252610105815290829020835181549285015161ffff1990931690151561ff0019161761010092151592909202919091178155908201516001820190612d5f90826145bc565b5060608201516002820180546001600160a01b03199081166001600160a01b039384161790915560809093015160039092018054909316911617905560fd8054335f90815261010660209081526040808320849055928252610108905290812043905581549190612dcf8361441c565b9190505550336001600160a01b03167f55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd482600160fd54612e0f9190614409565b604080516001600160a01b039093168352602083019190915287151590820152606001611a94565b600260c95403612e895760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016118e5565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa158015612edb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eff9190614311565b6116ef5760405163168dfea160e01b815260040160405180910390fd5b801580612f4a57505f818152610102602052604081205460ff166005811115612f4757612f47613f3f565b14155b15611e88576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff805484526101049092528220839055805491612fa18361441c565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa158015613026573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061304a91906142b3565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130cd919061432c565b6130df90673782dace9d900000614409565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b15801561311c575f80fd5b505af115801561312e573d5f803e3d5ffd5b5050505050505050565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa15801561317c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131a09190614311565b6118f85760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff1660058111156131f2576131f2613f3f565b600581111561320357613203613f3f565b815260200160018201805461321790614434565b80601f016020809104026020016040519081016040528092919081815260200182805461324390614434565b801561328e5780601f106132655761010080835404028352916020019161328e565b820191905f5260205f20905b81548152906001019060200180831161327157829003601f168201915b505050505081526020016002820180546132a790614434565b80601f01602080910402602001604051908101604052809291908181526020018280546132d390614434565b801561331e5780601f106132f55761010080835404028352916020019161331e565b820191905f5260205f20905b81548152906001019060200180831161330157829003601f168201915b5050505050815260200160038201805461333790614434565b80601f016020809104026020016040519081016040528092919081815260200182805461336390614434565b80156133ae5780601f10613385576101008083540402835291602001916133ae565b820191905f5260205f20905b81548152906001019060200180831161339157829003601f168201915b50505091835250506004828101546001600160a01b0316602083015260058301546040830152600683015460608301526007909201546080909101529091508151600581111561340057613400613f3f565b149392505050565b806101015f82825461341a9190614409565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece39060200161143c565b611e888133613950565b61346782826123c4565b6118f8575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561349e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6134ec82826123c4565b156118f8575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa15801561358c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135b09190614311565b6118f85760405163c4230ae360e01b815260040160405180910390fd5b6135d56139a9565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381165f9081526101066020526040812054908190036136595760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff166136885760405163c11cb1df60e01b815260040160405180910390fd5b919050565b613695612c3c565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586136023390565b5f818152610102602052604080822081516101008101909252805483929190829060ff1660058111156136ff576136ff613f3f565b600581111561371057613710613f3f565b815260200160018201805461372490614434565b80601f016020809104026020016040519081016040528092919081815260200182805461375090614434565b801561379b5780601f106137725761010080835404028352916020019161379b565b820191905f5260205f20905b81548152906001019060200180831161377e57829003601f168201915b505050505081526020016002820180546137b490614434565b80601f01602080910402602001604051908101604052809291908181526020018280546137e090614434565b801561382b5780601f106138025761010080835404028352916020019161382b565b820191905f5260205f20905b81548152906001019060200180831161380e57829003601f168201915b5050505050815260200160038201805461384490614434565b80601f016020809104026020016040519081016040528092919081815260200182805461387090614434565b80156138bb5780601f10613892576101008083540402835291602001916138bb565b820191905f5260205f20905b81548152906001019060200180831161389e57829003601f168201915b505050918352505060048201546001600160a01b031660208201526005808301546040830152600683015460608301526007909201546080909101529091508151600581111561390d5761390d613f3f565b148061392b575060028151600581111561392957613929613f3f565b145b80613948575060018151600581111561394657613946613f3f565b145b159392505050565b61395a82826123c4565b6118f857613967816139f2565b613972836020613a04565b604051602001613983929190614677565b60408051601f198184030181529082905262461bcd60e51b82526118e5916004016146eb565b60975460ff166119225760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016118e5565b6060610b2b6001600160a01b03831660145b60605f613a128360026143f2565b613a1d906002614357565b6001600160401b03811115613a3457613a34614039565b6040519080825280601f01601f191660200182016040528015613a5e576020820181803683370190505b509050600360fc1b815f81518110613a7857613a7861436a565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110613aa657613aa661436a565b60200101906001600160f81b03191690815f1a9053505f613ac88460026143f2565b613ad3906001614357565b90505b6001811115613b4a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613b0757613b0761436a565b1a60f81b828281518110613b1d57613b1d61436a565b60200101906001600160f81b03191690815f1a90535060049490941c93613b43816146fd565b9050613ad6565b508315613b995760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016118e5565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f60208284031215613bfa575f80fd5b81356001600160e01b031981168114613b99575f80fd5b8015158114611e88575f80fd5b5f8083601f840112613c2e575f80fd5b5081356001600160401b03811115613c44575f80fd5b602083019150836020828501011115613c5b575f80fd5b9250929050565b6001600160a01b0381168114611e88575f80fd5b5f805f8060608587031215613c89575f80fd5b8435613c9481613c11565b935060208501356001600160401b03811115613cae575f80fd5b613cba87828801613c1e565b9094509250506040850135613cce81613c62565b939692955090935050565b5f8083601f840112613ce9575f80fd5b5081356001600160401b03811115613cff575f80fd5b6020830191508360208260051b8501011115613c5b575f80fd5b5f805f805f8060608789031215613d2e575f80fd5b86356001600160401b0380821115613d44575f80fd5b613d508a838b01613cd9565b90985096506020890135915080821115613d68575f80fd5b613d748a838b01613cd9565b90965094506040890135915080821115613d8c575f80fd5b50613d9989828a01613cd9565b979a9699509497509295939492505050565b5f60208284031215613dbb575f80fd5b5035919050565b5f60208284031215613dd2575f80fd5b813561ffff81168114613b99575f80fd5b5f8060208385031215613df4575f80fd5b82356001600160401b03811115613e09575f80fd5b613e1585828601613cd9565b90969095509350505050565b5f8060408385031215613e32575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b81811015613e815783516001600160a01b031683529284019291840191600101613e5c565b50909695505050505050565b5f8060408385031215613e9e575f80fd5b823591506020830135613eb081613c62565b809150509250929050565b5f8060208385031215613ecc575f80fd5b82356001600160401b03811115613ee1575f80fd5b613e1585828601613c1e565b5f805f60408486031215613eff575f80fd5b83356001600160401b03811115613f14575f80fd5b613f2086828701613c1e565b9094509250506020840135613f3481613c62565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110613f6f57634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015613f8d578181015183820152602001613f75565b50505f910152565b5f8151808452613fac816020860160208601613f73565b601f01601f19169290920160200192915050565b5f610100613fce838c613f53565b806020840152613fe08184018b613f95565b90508281036040840152613ff4818a613f95565b905082810360608401526140088189613f95565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561405d575f80fd5b81356001600160401b0380821115614073575f80fd5b818401915084601f830112614086575f80fd5b81358181111561409857614098614039565b604051601f8201601f19908116603f011681019083821181831017156140c0576140c0614039565b816040528281528760208487010111156140d8575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f60208284031215614107575f80fd5b81356001600160401b0381168114613b99575f80fd5b5f805f6060848603121561412f575f80fd5b833561413a81613c62565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b8381101561422b57603f198984030185528151610100614195858351613f53565b88820151818a8701526141aa82870182613f95565b91505087820151858203898701526141c28282613f95565b915050606080830151868303828801526141dc8382613f95565b925050506080808301516141fa828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e09182015191909401529386019390860190600101614174565b509098975050505050505050565b5f60208284031215614249575f80fd5b8135613b9981613c62565b8515158152841515602082015260a060408201525f61427660a0830186613f95565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f602082840312156142a8575f80fd5b8135613b9981613c11565b5f602082840312156142c3575f80fd5b8151613b9981613c62565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6143096020830184866142ce565b949350505050565b5f60208284031215614321575f80fd5b8151613b9981613c11565b5f6020828403121561433c575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2b57610b2b614343565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112614393575f80fd5b8301803591506001600160401b038211156143ac575f80fd5b602001915036819003821315613c5b575f80fd5b818382375f9101908152919050565b604081525f6143e26040830185876142ce565b9050826020830152949350505050565b8082028115828204841417610b2b57610b2b614343565b81810381811115610b2b57610b2b614343565b5f6001820161442d5761442d614343565b5060010190565b600181811c9082168061444857607f821691505b60208210810361446657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156116ef575f81815260208120601f850160051c810160208610156144925750805b601f850160051c820191505b8181101561138f5782815560010161449e565b6001600160401b038311156144c8576144c8614039565b6144dc836144d68354614434565b8361446c565b5f601f84116001811461450d575f85156144f65750838201355b5f19600387901b1c1916600186901b178355614565565b5f83815260209020601f19861690835b8281101561453d578685013582556020948501946001909201910161451d565b5086821015614559575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f61457f6040830185876142ce565b905060018060a01b0383166020830152949350505050565b5f6001600160401b038083168181036145b2576145b2614343565b6001019392505050565b81516001600160401b038111156145d5576145d5614039565b6145e9816145e38454614434565b8461446c565b602080601f83116001811461461c575f84156146055750858301515b5f19600386901b1c1916600185901b17855561138f565b5f85815260208120601f198616915b8281101561464a5788860151825594840194600190910190840161462b565b508582101561466757878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516146ae816017850160208801613f73565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516146df816028840160208801613f73565b01602801949350505050565b602081525f613b996020830184613f95565b5f8161470b5761470b614343565b505f19019056fea26469706673582212208594ebb7d050f482beea031d7de363a87238502910d422af432180af383ad7b364736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + Bin: "0x608060405234801562000010575f80fd5b5060405162005666380380620056668339810160408190526200003391620004c6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001f1565b6200010e82620001f1565b620001186200021c565b6200012262000278565b6200012c620002dc565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff00009091166a01000000000000000000006001600160a01b0386160261ffff1916171762010000600160501b03191662320000179055603260fc55620001a25f8462000340565b8015620001e8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620004fc565b6001600160a01b038116620002195760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002765760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002d25760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b62000276620003e3565b5f54610100900460ff16620003365760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200027662000449565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16620003df575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200039e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff166200043d5760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff16620004a35760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b0381168114620004c1575f80fd5b919050565b5f8060408385031215620004d8575f80fd5b620004e383620004aa565b9150620004f360208401620004aa565b90509250929050565b61513c806200050a5f395ff3fe60806040526004361061035b575f3560e01c806383ea2358116101bd578063bb7306bf116100f2578063deacde2b11610092578063ebb5c1741161006d578063ebb5c17414610a64578063f7c0918914610a90578063f90b083814610aa5578063f9c4dda414610ac4575f80fd5b8063deacde2b146109fe578063e0bf8b5314610a11578063e0d7d0e914610a3e575f80fd5b8063c8a00e7a116100cd578063c8a00e7a14610964578063cac8b30614610994578063d547741f146109c0578063d5e1e5ce146109df575f80fd5b8063bb7306bf146108f1578063bc4a3ad51461090c578063c34ade5c14610938575f80fd5b8063998888981161015d578063ab3e71eb11610138578063ab3e71eb14610884578063af533aa814610899578063b01db078146108b8578063b8d2f06c146108d2575f80fd5b806399888898146108335780639ee804cb14610852578063a217fddf14610871575f80fd5b806384b0fa4c1161019857806384b0fa4c146107aa5780638a25bcec146107c057806391d14854146107df5780639344b242146107fe575f80fd5b806383ea23581461073257806384522a6d1461076a5780638456cb5914610796575f80fd5b806349911bfb116102935780635c2c30a511610233578063683547b81161020e578063683547b8146106c757806374338e6d146106f357806377c359e1146107095780637bd977d91461071e575f80fd5b80635c2c30a5146106595780635c975abb1461069157806360c3cf3f146106a8575f80fd5b806358a994ea1161026e57806358a994ea146105c957806359c3c9b7146105e85780635a1239c1146106075780635ae7f25d1461063a575f80fd5b806349911bfb1461055c5780634f59ed801461057157806350d5d7ab1461058c575f80fd5b80632d1dbd74116102fe57806336514d9f116102d957806336514d9f146104e457806336568abe146105035780633f4ba83a14610522578063490ffa3514610536575f80fd5b80632d1dbd74146104845780632d32924f146104995780632f2ff15d146104c5575f80fd5b8063186d954111610339578063186d9541146103eb578063248a9ca31461040a5780632517cfbf14610446578063264f27f314610465575f80fd5b806301ffc9a71461035f578063044d2fe81461039357806313797bff146103ca575b5f80fd5b34801561036a575f80fd5b5061037e6103793660046144ce565b610afb565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103b26103ad36600461455a565b610b31565b6040516001600160a01b03909116815260200161038a565b3480156103d5575f80fd5b506103e96103e43660046145fd565b610f50565b005b3480156103f6575f80fd5b506103e961040536600461468f565b611397565b348015610415575f80fd5b5061043861042436600461468f565b5f9081526065602052604090206001015490565b60405190815260200161038a565b348015610451575f80fd5b506103e96104603660046146a6565b611447565b348015610470575f80fd5b506103e961047f3660046146c7565b6114a9565b34801561048f575f80fd5b5061043860fd5481565b3480156104a4575f80fd5b506104b86104b3366004614705565b6116f4565b60405161038a9190614725565b3480156104d0575f80fd5b506103e96104df366004614771565b611828565b3480156104ef575f80fd5b5061037e6104fe36600461479f565b61184c565b34801561050e575f80fd5b506103e961051d366004614771565b611879565b34801561052d575f80fd5b506103e96118fc565b348015610541575f80fd5b5060fb546103b290600160501b90046001600160a01b031681565b348015610567575f80fd5b5061043860ff5481565b34801561057c575f80fd5b50610438673782dace9d90000081565b348015610597575f80fd5b5060fb546105b1906201000090046001600160401b031681565b6040516001600160401b03909116815260200161038a565b3480156105d4575f80fd5b506103e96105e33660046147d1565b611924565b3480156105f3575f80fd5b506103e961060236600461468f565b611aa2565b348015610612575f80fd5b5061062661062136600461468f565b611b42565b60405161038a9897969594939291906148a4565b348015610645575f80fd5b506103e961065436600461468f565b611d24565b348015610664575f80fd5b50610438610673366004614931565b80516020818301810180516101038252928201919093012091525481565b34801561069c575f80fd5b5060975460ff1661037e565b3480156106b3575f80fd5b506103e96106c23660046149db565b611e8b565b3480156106d2575f80fd5b506106e66106e1366004614a01565b611f05565b60405161038a9190614a33565b3480156106fe575f80fd5b506104386101005481565b348015610714575f80fd5b5061010154610438565b348015610729575f80fd5b506104386122bc565b34801561073d575f80fd5b506103b261074c36600461468f565b5f90815261010560205260409020600201546001600160a01b031690565b348015610775575f80fd5b5061043861078436600461468f565b6101086020525f908152604090205481565b3480156107a1575f80fd5b506103e96122d3565b3480156107b5575f80fd5b506104386101015481565b3480156107cb575f80fd5b506105b16107da366004614a01565b6122f9565b3480156107ea575f80fd5b5061037e6107f9366004614771565b6123c4565b348015610809575f80fd5b506103b261081836600461468f565b6101096020525f90815260409020546001600160a01b031681565b34801561083e575f80fd5b506106e661084d366004614705565b6123ee565b34801561085d575f80fd5b506103e961086c366004614b1d565b612739565b34801561087c575f80fd5b506104385f81565b34801561088f575f80fd5b5061043860fc5481565b3480156108a4575f80fd5b506103e96108b336600461468f565b6127c2565b3480156108c3575f80fd5b50673782dace9d900000610438565b3480156108dd575f80fd5b506103e96108ec36600461468f565b612815565b3480156108fc575f80fd5b506104386729a2241af62c000081565b348015610917575f80fd5b5061043861092636600461468f565b6101046020525f908152604090205481565b348015610943575f80fd5b5061043861095236600461468f565b5f908152610107602052604090205490565b34801561096f575f80fd5b5061098361097e36600461468f565b6128a0565b60405161038a959493929190614b38565b34801561099f575f80fd5b506104386109ae366004614b1d565b6101066020525f908152604090205481565b3480156109cb575f80fd5b506103e96109da366004614771565b612969565b3480156109ea575f80fd5b506104386109f9366004614705565b61298d565b6103e9610a0c3660046145fd565b6129b9565b348015610a1c575f80fd5b5060fb54610a2b9061ffff1681565b60405161ffff909116815260200161038a565b348015610a49575f80fd5b50610a52600181565b60405160ff909116815260200161038a565b348015610a6f575f80fd5b50610438610a7e36600461468f565b5f908152610108602052604090205490565b348015610a9b575f80fd5b5061043860fe5481565b348015610ab0575f80fd5b506103b2610abf366004614b7c565b61309c565b348015610acf575f80fd5b5061037e610ade366004614b1d565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b2b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b3a613305565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb09190614b97565b905060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c279190614b97565b604051636fc4c27f60e11b8152600160048201526001600160a01b039182169183169063df8984fe90602401602060405180830381865afa158015610c6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c929190614b97565b6001600160a01b031614610cb9576040516303b8ffef60e41b815260040160405180910390fd5b604051639f7053f560e01b81526001600160a01b03821690639f7053f590610ce79088908890600401614bda565b5f604051808303815f87803b158015610cfe575f80fd5b505af1158015610d10573d5f803e3d5ffd5b50505050610d1d8361334b565b604051633e71376960e21b81523360048201526001600160a01b0382169063f9c4dda490602401602060405180830381865afa158015610d5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d839190614bf5565b15610da15760405163707999fb60e11b815260040160405180910390fd5b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e179190614b97565b60fd54604051636a0b688160e01b81526001600482015260248101919091526001600160a01b039190911690636a0b6881906044016020604051808303815f875af1158015610e68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8c9190614b97565b60fd545f9081526101096020526040902080546001600160a01b0319166001600160a01b038316179055905086610ec35780610f38565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f389190614b97565b9250610f4687878787613372565b5050949350505050565b610f58613500565b610f60613305565b60fb5460408051633871d0f160e01b81529051610fde923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd99190614c10565b613559565b60fc5485908490839081610ff28486614c3b565b610ffc9190614c3b565b111561101b5760405163525e3de760e01b815260040160405180910390fd5b5f5b838110156110e4575f6101038b8b8481811061103b5761103b614c4e565b905060200281019061104d9190614c62565b60405161105b929190614ca4565b9081526020016040518091039020549050611075816135e5565b61107e81613631565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b848181106110b1576110b1614c4e565b90506020028101906110c39190614c62565b836040516110d393929190614cb3565b60405180910390a15060010161101d565b5081156111c15760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111609190614b97565b6001600160a01b0316638d0d8cb66111806729a2241af62c000085614cd6565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156111a9575f80fd5b505af11580156111bb573d5f803e3d5ffd5b50505050505b5f5b828110156112b7575f6101038989848181106111e1576111e1614c4e565b90506020028101906111f39190614c62565b604051611201929190614ca4565b908152602001604051809103902054905061121b816135e5565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b8346689898481811061128457611284614c4e565b90506020028101906112969190614c62565b836040516112a693929190614cb3565b60405180910390a1506001016111c3565b505f5b81811015611381575f6101038787848181106112d8576112d8614c4e565b90506020028101906112ea9190614c62565b6040516112f8929190614ca4565b9081526020016040518091039020549050611312816135e5565b61131b81613672565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f87878481811061134e5761134e614c4e565b90506020028101906113609190614c62565b8360405161137093929190614cb3565b60405180910390a1506001016112ba565b5050505061138f600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b815290516113ec923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb54611465903390600160501b90046001600160a01b0316613801565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c369060200161143c565b60fb5460408051633871d0f160e01b815290516114fe923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa15801561154c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115709190614c10565b81111561159057604051639519af4360e01b815260040160405180910390fd5b5f5b818110156116e5575f6101038585848181106115b0576115b0614c4e565b90506020028101906115c29190614c62565b6040516115d0929190614ca4565b90815260200160405180910390205490506115ea81613886565b611607576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b158015611669575f80fd5b505af115801561167b573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf798585848181106116b2576116b2614c4e565b90506020028101906116c49190614c62565b836040516116d493929190614cb3565b60405180910390a150600101611592565b506116ef81613ad1565b505050565b6060825f03611716576040516334d6e01560e01b815260040160405180910390fd5b5f82611723600186614ced565b61172d9190614cd6565b611738906001614c3b565b90505f6117458483614c3b565b905060fd548111611756578061175a565b60fd545b90505f82821161176a575f611774565b6117748383614ced565b6001600160401b0381111561178b5761178b61491d565b6040519080825280602002602001820160405280156117b4578160200160208202803683370190505b509050825b8281101561181e575f81815261010960205260409020546001600160a01b0316826117e48684614ced565b815181106117f4576117f4614c4e565b6001600160a01b03909216602092830291909101909101528061181681614d00565b9150506117b9565b5095945050505050565b5f8281526065602052604090206001015461184281613b1c565b6116ef8383613b26565b5f6101038383604051611860929190614ca4565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146118ee5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6118f88282613bab565b5050565b60fb5461191a903390600160501b90046001600160a01b0316613c11565b611922613c96565b565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611975573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119999190614b97565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b81526004016119c6929190614bda565b5f604051808303815f87803b1580156119dd575f80fd5b505af11580156119ef573d5f803e3d5ffd5b505050506119fc8161334b565b611a0533613ce8565b50335f9081526101066020908152604080832054808452610105909252909120600101611a33848683614d95565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d8726977790611a9490879087908790614e50565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b81529051611af7923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b806101015f828254611b099190614c3b565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f29060200161143c565b6101026020525f90815260409020805460018201805460ff9092169291611b6890614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9490614d18565b8015611bdf5780601f10611bb657610100808354040283529160200191611bdf565b820191905f5260205f20905b815481529060010190602001808311611bc257829003601f168201915b505050505090806002018054611bf490614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2090614d18565b8015611c6b5780601f10611c4257610100808354040283529160200191611c6b565b820191905f5260205f20905b815481529060010190602001808311611c4e57829003601f168201915b505050505090806003018054611c8090614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054611cac90614d18565b8015611cf75780601f10611cce57610100808354040283529160200191611cf7565b820191905f5260205f20905b815481529060010190602001808311611cda57829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611d2c613500565b60fb5460408051637a87fa0b60e01b81529051611d81923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df69190614b97565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611e2e575f80fd5b505af1158015611e40573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a81604051611e7691815260200190565b60405180910390a1611e88600160c955565b50565b60fb54611ea9903390600160501b90046001600160a01b0316613c11565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a29060200161143c565b6060825f03611f27576040516334d6e01560e01b815260040160405180910390fd5b5f82611f34600186614ced565b611f3e9190614cd6565b90505f611f4b8483614c3b565b6001600160a01b0387165f9081526101066020526040812054919250819003611f875760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311611fa35782611fa5565b805b92505f848411611fb5575f611fbf565b611fbf8585614ced565b6001600160401b03811115611fd657611fd661491d565b60405190808252806020026020018201604052801561200f57816020015b611ffc614484565b815260200190600190039081611ff45790505b509050845b848110156122af575f8481526101076020526040812080548390811061203c5761203c614c4e565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff16600581111561207e5761207e614823565b600581111561208f5761208f614823565b81526020016001820180546120a390614d18565b80601f01602080910402602001604051908101604052809291908181526020018280546120cf90614d18565b801561211a5780601f106120f15761010080835404028352916020019161211a565b820191905f5260205f20905b8154815290600101906020018083116120fd57829003601f168201915b5050505050815260200160028201805461213390614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461215f90614d18565b80156121aa5780601f10612181576101008083540402835291602001916121aa565b820191905f5260205f20905b81548152906001019060200180831161218d57829003601f168201915b505050505081526020016003820180546121c390614d18565b80601f01602080910402602001604051908101604052809291908181526020018280546121ef90614d18565b801561223a5780601f106122115761010080835404028352916020019161223a565b820191905f5260205f20905b81548152906001019060200180831161221d57829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152836122808985614ced565b8151811061229057612290614c4e565b60200260200101819052505080806122a790614d00565b915050612014565b5098975050505050505050565b5f6101005460ff546122ce9190614ced565b905090565b60fb546122f1903390600160501b90046001600160a01b0316613c11565b611922613d56565b5f8183111561231b5760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f90815261010660205260408120549061234b825f908152610107602052604090205490565b905080841161235a578361235c565b805b93505f855b858110156123b9575f8481526101076020526040812080548390811061238957612389614c4e565b905f5260205f200154905061239d81613d93565b156123b057826123ac81614e7b565b9350505b50600101612361565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f03612410576040516334d6e01560e01b815260040160405180910390fd5b5f8261241d600186614ced565b6124279190614cd6565b612432906001614c3b565b90505f61243f8483614c3b565b905060fe5481116124505780612454565b60fe545b90505f846001600160401b0381111561246f5761246f61491d565b6040519080825280602002602001820160405280156124a857816020015b612495614484565b81526020019060019003908161248d5790505b5090505f835b8381101561272d576124bf81613886565b1561271b575f818152610102602052604090819020815161010081019092528054829060ff1660058111156124f6576124f6614823565b600581111561250757612507614823565b815260200160018201805461251b90614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461254790614d18565b80156125925780601f1061256957610100808354040283529160200191612592565b820191905f5260205f20905b81548152906001019060200180831161257557829003601f168201915b505050505081526020016002820180546125ab90614d18565b80601f01602080910402602001604051908101604052809291908181526020018280546125d790614d18565b80156126225780601f106125f957610100808354040283529160200191612622565b820191905f5260205f20905b81548152906001019060200180831161260557829003601f168201915b5050505050815260200160038201805461263b90614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461266790614d18565b80156126b25780601f10612689576101008083540402835291602001916126b2565b820191905f5260205f20905b81548152906001019060200180831161269557829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152835184908490811061270157612701614c4e565b6020026020010181905250818061271790614d00565b9250505b8061272581614d00565b9150506124ae565b50815295945050505050565b5f61274381613b1c565b61274c8261334b565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb546127e0903390600160501b90046001600160a01b0316613801565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b49060200161143c565b60fb5460408051637a87fa0b60e01b8152905161286a923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da99060200161143c565b6101056020525f90815260409020805460018201805460ff80841694610100909404169291906128cf90614d18565b80601f01602080910402602001604051908101604052809291908181526020018280546128fb90614d18565b80156129465780601f1061291d57610100808354040283529160200191612946565b820191905f5260205f20905b81548152906001019060200180831161292957829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f8281526065602052604090206001015461298381613b1c565b6116ef8383613bab565b610107602052815f5260405f2081815481106129a7575f80fd5b905f5260205f20015f91509150505481565b6129c1613500565b6129c9613305565b5f6129d333613ce8565b90505f806129e388878686614019565b915091505f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a39573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614b97565b90505f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad59190614b97565b90505f5b84811015612f3457816001600160a01b0316639f55941b8d8d84818110612b0257612b02614c4e565b9050602002810190612b149190614c62565b8d8d86818110612b2657612b26614c4e565b9050602002810190612b389190614c62565b8d8d88818110612b4a57612b4a614c4e565b9050602002810190612b5c9190614c62565b6040518763ffffffff1660e01b8152600401612b7d96959493929190614ea0565b5f604051808303815f87803b158015612b94575f80fd5b505af1158015612ba6573d5f803e3d5ffd5b505050505f836001600160a01b0316637f70ce0d6001898589612bc99190614c3b565b60fe546040516001600160e01b031960e087901b16815260ff90941660048501526024840192909252604483015260648201526084016020604051808303815f875af1158015612c1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c3f9190614b97565b604080516101008101909152909150805f81526020018e8e85818110612c6757612c67614c4e565b9050602002810190612c799190614c62565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018c8c85818110612cc457612cc4614c4e565b9050602002810190612cd69190614c62565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018a8a85818110612d2157612d21614c4e565b9050602002810190612d339190614c62565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b03841660208084019190915260408084018c905260608401839052608090930182905260fe54825261010290522081518154829060ff19166001836005811115612dbb57612dbb614823565b021790555060208201516001820190612dd49082614ee8565b5060408201516002820190612de99082614ee8565b5060608201516003820190612dfe9082614ee8565b5060808201516004820180546001600160a01b0319166001600160a01b0390921691909117905560a0820151600582015560c0820151600682015560e09091015160079091015560fe546101038e8e85818110612e5d57612e5d614c4e565b9050602002810190612e6f9190614c62565b604051612e7d929190614ca4565b9081526040805160209281900383019020929092555f898152610107825291822060fe5481546001810183559184529190922090910155337fab5128638b64e6216e80dfafa70d3cb6d54913a536dc41e76eb4a04cfbe979cf8e8e85818110612ee857612ee8614c4e565b9050602002810190612efa9190614c62565b60fe54604051612f0c93929190614cb3565b60405180910390a260fe8054905f612f2383614d00565b919050555081600101915050612ad9565b5060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f86573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612faa9190614b97565b6001600160a01b031663eda0ae128560fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561300a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061302e9190614c10565b6130389190614cd6565b8d8d8d8d8b8a6040518863ffffffff1660e01b815260040161305f9695949392919061502f565b5f604051808303818588803b158015613076575f80fd5b505af1158015613088573d5f803e3d5ffd5b5050505050505050505061138f600160c955565b5f806130a733613ce8565b5f818152610105602052604090205490915083151561010090910460ff161515036130e557604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613136573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061315a9190614c10565b5f82815261010860205260409020546131739190614c3b565b4310156131935760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b03169150821561328a576001600160a01b038216311561321257816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156131fb575f80fd5b505af115801561320d573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613263573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132879190614b97565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff16156119225760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016118e5565b6001600160a01b038116611e885760405163d92e233d60e01b815260040160405180910390fd5b6040518060a00160405280600115158152602001851515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b0384166020808401919091523360409384015260fd548252610105815290829020835181549285015161ffff1990931690151561ff00191617610100921515929092029190911781559082015160018201906134289082614ee8565b5060608201516002820180546001600160a01b03199081166001600160a01b039384161790915560809093015160039092018054909316911617905560fd8054335f9081526101066020908152604080832084905592825261010890529081204390558154919061349883614d00565b9190505550336001600160a01b03167f55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd482600160fd546134d89190614ced565b604080516001600160a01b039093168352602083019190915287151590820152606001611a94565b600260c954036135525760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016118e5565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa1580156135a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135c89190614bf5565b6116ef5760405163168dfea160e01b815260040160405180910390fd5b80158061361357505f818152610102602052604081205460ff16600581111561361057613610614823565b14155b15611e88576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff80548452610104909252822083905580549161366a83614d00565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa1580156136ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137139190614b97565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa158015613772573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137969190614c10565b6137a890673782dace9d900000614ced565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b1580156137e5575f80fd5b505af11580156137f7573d5f803e3d5ffd5b5050505050505050565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa158015613845573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138699190614bf5565b6118f85760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff1660058111156138bb576138bb614823565b60058111156138cc576138cc614823565b81526020016001820180546138e090614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461390c90614d18565b80156139575780601f1061392e57610100808354040283529160200191613957565b820191905f5260205f20905b81548152906001019060200180831161393a57829003601f168201915b5050505050815260200160028201805461397090614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461399c90614d18565b80156139e75780601f106139be576101008083540402835291602001916139e7565b820191905f5260205f20905b8154815290600101906020018083116139ca57829003601f168201915b50505050508152602001600382018054613a0090614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054613a2c90614d18565b8015613a775780601f10613a4e57610100808354040283529160200191613a77565b820191905f5260205f20905b815481529060010190602001808311613a5a57829003601f168201915b50505091835250506004828101546001600160a01b03166020830152600583015460408301526006830154606083015260079092015460809091015290915081516005811115613ac957613ac9614823565b149392505050565b806101015f828254613ae39190614ced565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece39060200161143c565b611e888133614234565b613b3082826123c4565b6118f8575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613b673390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b613bb582826123c4565b156118f8575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015613c55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c799190614bf5565b6118f85760405163c4230ae360e01b815260040160405180910390fd5b613c9e61428d565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381165f908152610106602052604081205490819003613d225760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff16613d515760405163c11cb1df60e01b815260040160405180910390fd5b919050565b613d5e613305565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613ccb3390565b5f818152610102602052604080822081516101008101909252805483929190829060ff166005811115613dc857613dc8614823565b6005811115613dd957613dd9614823565b8152602001600182018054613ded90614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054613e1990614d18565b8015613e645780601f10613e3b57610100808354040283529160200191613e64565b820191905f5260205f20905b815481529060010190602001808311613e4757829003601f168201915b50505050508152602001600282018054613e7d90614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054613ea990614d18565b8015613ef45780601f10613ecb57610100808354040283529160200191613ef4565b820191905f5260205f20905b815481529060010190602001808311613ed757829003601f168201915b50505050508152602001600382018054613f0d90614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054613f3990614d18565b8015613f845780601f10613f5b57610100808354040283529160200191613f84565b820191905f5260205f20905b815481529060010190602001808311613f6757829003601f168201915b505050918352505060048201546001600160a01b0316602082015260058083015460408301526006830154606083015260079092015460809091015290915081516005811115613fd657613fd6614823565b1480613ff45750600281516005811115613ff257613ff2614823565b145b80614011575060018151600581111561400f5761400f614823565b145b159392505050565b5f80848614158061402a5750838614155b156140485760405163e5fe884360e01b815260040160405180910390fd5b85915081158061405d575060fb5461ffff1682115b1561407b576040516379b348ff60e11b815260040160405180910390fd5b505f8281526101076020526040812054906140973382846122f9565b60fb546001600160401b039182169250620100009004166140b88483614c3b565b11156140d757604051633e10caad60e21b815260040160405180910390fd5b6140e9673782dace9d90000084614cd6565b341461410857604051635aaa2d1f60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b031663aa9537956040518163ffffffff1660e01b8152600401602060405180830381865afa158015614159573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061417d9190614b97565b6001600160a01b031663b178e38e3360016141988786614c3b565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260ff90911660248301526044820152606401602060405180830381865afa1580156141e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061420d9190614bf5565b61422a57604051633bf053fd60e11b815260040160405180910390fd5b5094509492505050565b61423e82826123c4565b6118f85761424b816142d6565b6142568360206142e8565b60405160200161426792919061506b565b60408051601f198184030181529082905262461bcd60e51b82526118e5916004016150df565b60975460ff166119225760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016118e5565b6060610b2b6001600160a01b03831660145b60605f6142f6836002614cd6565b614301906002614c3b565b6001600160401b038111156143185761431861491d565b6040519080825280601f01601f191660200182016040528015614342576020820181803683370190505b509050600360fc1b815f8151811061435c5761435c614c4e565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061438a5761438a614c4e565b60200101906001600160f81b03191690815f1a9053505f6143ac846002614cd6565b6143b7906001614c3b565b90505b600181111561442e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106143eb576143eb614c4e565b1a60f81b82828151811061440157614401614c4e565b60200101906001600160f81b03191690815f1a90535060049490941c93614427816150f1565b90506143ba565b50831561447d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016118e5565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f602082840312156144de575f80fd5b81356001600160e01b03198116811461447d575f80fd5b8015158114611e88575f80fd5b5f8083601f840112614512575f80fd5b5081356001600160401b03811115614528575f80fd5b60208301915083602082850101111561453f575f80fd5b9250929050565b6001600160a01b0381168114611e88575f80fd5b5f805f806060858703121561456d575f80fd5b8435614578816144f5565b935060208501356001600160401b03811115614592575f80fd5b61459e87828801614502565b90945092505060408501356145b281614546565b939692955090935050565b5f8083601f8401126145cd575f80fd5b5081356001600160401b038111156145e3575f80fd5b6020830191508360208260051b850101111561453f575f80fd5b5f805f805f8060608789031215614612575f80fd5b86356001600160401b0380821115614628575f80fd5b6146348a838b016145bd565b9098509650602089013591508082111561464c575f80fd5b6146588a838b016145bd565b90965094506040890135915080821115614670575f80fd5b5061467d89828a016145bd565b979a9699509497509295939492505050565b5f6020828403121561469f575f80fd5b5035919050565b5f602082840312156146b6575f80fd5b813561ffff8116811461447d575f80fd5b5f80602083850312156146d8575f80fd5b82356001600160401b038111156146ed575f80fd5b6146f9858286016145bd565b90969095509350505050565b5f8060408385031215614716575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b818110156147655783516001600160a01b031683529284019291840191600101614740565b50909695505050505050565b5f8060408385031215614782575f80fd5b82359150602083013561479481614546565b809150509250929050565b5f80602083850312156147b0575f80fd5b82356001600160401b038111156147c5575f80fd5b6146f985828601614502565b5f805f604084860312156147e3575f80fd5b83356001600160401b038111156147f8575f80fd5b61480486828701614502565b909450925050602084013561481881614546565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b6006811061485357634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015614871578181015183820152602001614859565b50505f910152565b5f8151808452614890816020860160208601614857565b601f01601f19169290920160200192915050565b5f6101006148b2838c614837565b8060208401526148c48184018b614879565b905082810360408401526148d8818a614879565b905082810360608401526148ec8189614879565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215614941575f80fd5b81356001600160401b0380821115614957575f80fd5b818401915084601f83011261496a575f80fd5b81358181111561497c5761497c61491d565b604051601f8201601f19908116603f011681019083821181831017156149a4576149a461491d565b816040528281528760208487010111156149bc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f602082840312156149eb575f80fd5b81356001600160401b038116811461447d575f80fd5b5f805f60608486031215614a13575f80fd5b8335614a1e81614546565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b83811015614b0f57603f198984030185528151610100614a79858351614837565b88820151818a870152614a8e82870182614879565b9150508782015185820389870152614aa68282614879565b91505060608083015186830382880152614ac08382614879565b92505050608080830151614ade828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e09182015191909401529386019390860190600101614a58565b509098975050505050505050565b5f60208284031215614b2d575f80fd5b813561447d81614546565b8515158152841515602082015260a060408201525f614b5a60a0830186614879565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f60208284031215614b8c575f80fd5b813561447d816144f5565b5f60208284031215614ba7575f80fd5b815161447d81614546565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f614bed602083018486614bb2565b949350505050565b5f60208284031215614c05575f80fd5b815161447d816144f5565b5f60208284031215614c20575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2b57610b2b614c27565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112614c77575f80fd5b8301803591506001600160401b03821115614c90575f80fd5b60200191503681900382131561453f575f80fd5b818382375f9101908152919050565b604081525f614cc6604083018587614bb2565b9050826020830152949350505050565b8082028115828204841417610b2b57610b2b614c27565b81810381811115610b2b57610b2b614c27565b5f60018201614d1157614d11614c27565b5060010190565b600181811c90821680614d2c57607f821691505b602082108103614d4a57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156116ef575f81815260208120601f850160051c81016020861015614d765750805b601f850160051c820191505b8181101561138f57828155600101614d82565b6001600160401b03831115614dac57614dac61491d565b614dc083614dba8354614d18565b83614d50565b5f601f841160018114614df1575f8515614dda5750838201355b5f19600387901b1c1916600186901b178355614e49565b5f83815260209020601f19861690835b82811015614e215786850135825560209485019460019092019101614e01565b5086821015614e3d575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f614e63604083018587614bb2565b905060018060a01b0383166020830152949350505050565b5f6001600160401b03808316818103614e9657614e96614c27565b6001019392505050565b606081525f614eb360608301888a614bb2565b8281036020840152614ec6818789614bb2565b90508281036040840152614edb818587614bb2565b9998505050505050505050565b81516001600160401b03811115614f0157614f0161491d565b614f1581614f0f8454614d18565b84614d50565b602080601f831160018114614f48575f8415614f315750858301515b5f19600386901b1c1916600185901b17855561138f565b5f85815260208120601f198616915b82811015614f7657888601518255948401946001909101908401614f57565b5085821015614f9357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8183525f6020808501808196508560051b81019150845f5b878110156150225782840389528135601e19883603018112614fdb575f80fd5b870185810190356001600160401b03811115614ff5575f80fd5b803603821315615003575f80fd5b61500e868284614bb2565b9a87019a9550505090840190600101614fbb565b5091979650505050505050565b608081525f61504260808301888a614fa3565b8281036020840152615055818789614fa3565b6040840195909552505060600152949350505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516150a2816017850160208801614857565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516150d3816028840160208801614857565b01602801949350505050565b602081525f61447d6020830184614879565b5f816150ff576150ff614c27565b505f19019056fea264697066735822122038587c5537098698379d47e206c76731944e1671f5e10be7621fd6860ccddd1664736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // PermissionlessNodeRegistryABI is the input ABI used to generate the binding from. diff --git a/testing/deployHelper_test.go b/testing/deployHelper_test.go index f97d7997d..c7ebaab4a 100644 --- a/testing/deployHelper_test.go +++ b/testing/deployHelper_test.go @@ -165,6 +165,10 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { acc, err := w.GetNodeAccount() require.Nil(t, err) + send1EthTransaction(client, fromAddress, acc.Address, privateKey, chainID) + auth, err = GetNextTransaction(client, acc.Address, nodePrivateKey, chainID) + send1EthTransaction(client, fromAddress, acc.Address, privateKey, chainID) + auth, err = GetNextTransaction(client, acc.Address, nodePrivateKey, chainID) send1EthTransaction(client, fromAddress, acc.Address, privateKey, chainID) auth, err = GetNextTransaction(client, acc.Address, nodePrivateKey, chainID) diff --git a/testing/node_test.go b/testing/node_test.go index 6d96a65f4..ee9ca8ed1 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -38,20 +38,20 @@ func (s *StaderNodeSuite) TestNodeDaemon() { time.Sleep(time.Second * 10) } -// func (s *StaderNodeSuite) TestNodeDeposit() { -// a := os.Args -// err := s.app.Run([]string{ -// a[0], -// "api", -// "validator", -// "deposit", -// "9000000000000000000", -// "0", -// "1", -// "false", -// }) -// assert.Nil(s.T(), err) -// } +func (s *StaderNodeSuite) TestNodeDeposit() { + a := os.Args + err := s.app.Run([]string{ + a[0], + "api", + "validator", + "deposit", + "9000000000000000000", + "0", + "1", + "false", + }) + assert.Nil(s.T(), err) +} // func (s *StaderNodeSuite) TestNode2() { // time.Sleep(time.Second * 20) From 45c3a8214e69f0762bee08d3750eeeb745504025 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 21 Jun 2023 12:24:47 +0700 Subject: [PATCH 36/90] Refactor --- anvil_test_node.sh | 6 +- testing/configHelper_test.go | 99 +- .../contracts/PermissionlessNodeRegistry.go | 2 +- testing/contracts/SDCollateral.go | 2329 +++++++++++++++++ testing/deployHelper_test.go | 40 +- testing/node_test.go | 44 +- 6 files changed, 2445 insertions(+), 75 deletions(-) create mode 100644 testing/contracts/SDCollateral.go diff --git a/anvil_test_node.sh b/anvil_test_node.sh index 2bf82fc89..e24e77dad 100755 --- a/anvil_test_node.sh +++ b/anvil_test_node.sh @@ -1,7 +1,3 @@ #!/usr/bin/env bash -set -Eeuo pipefail - -exec anvil \ - --balance 1000000000 \ - --gas-limit 1000000000 \ +exec anvil \ No newline at end of file diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index 35ac86980..ba2e11ee4 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -5,7 +5,9 @@ import ( "fmt" "os" "path/filepath" + "time" + "github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context" "github.com/mitchellh/go-homedir" "github.com/stader-labs/stader-node/shared/services" "github.com/stader-labs/stader-node/shared/services/passwords" @@ -185,56 +187,65 @@ func (s *StaderNodeSuite) setConfig(c *cli.Context, elURL string, clURL string) require.Nil(s.T(), err) } -func (s *StaderNodeSuite) staderConfig(ctx context.Context, c *cli.Context) { +func (s *StaderNodeSuite) staderConfig( + ctx context.Context, + c *cli.Context, + clUrl *string, + elUrl *string, +) { t := s.T() - // fmt.Println("------------ CONNECTING TO KURTOSIS ENGINE ---------------") - // kurtosis_context.NewKurtosisContextFromLocalEngine() - // kurtosisCtx, err := kurtosis_context.NewKurtosisContextFromLocalEngine() - // require.NoError(t, err, "An error occurred connecting to the Kurtosis engine") - - // enclaveId := fmt.Sprintf("%s-%d", enclaveIdPrefix, time.Now().Unix()) - - // enclaveCtx, err := kurtosisCtx.CreateEnclave(ctx, enclaveId, isPartitioningEnabled) - - // s.kurtosisCtx = kurtosisCtx - // s.enclaveId = enclaveId - // require.NoError(t, err, "An error occurred creating the enclave") - - // fmt.Println("------------ EXECUTING PACKAGE ---------------") - - // starlarkRunResult, err := enclaveCtx.RunStarlarkRemotePackageBlocking(ctx, remotePackage, useDefaultMainFile, useDefaultFunctionName, emptyParams, defaultDryRun, defaultParallelism) - - // require.NoError(t, err, "An error executing loading the package") - // require.Nil(t, starlarkRunResult.InterpretationError) - // require.Empty(t, starlarkRunResult.ValidationErrors) - // require.Nil(t, starlarkRunResult.ExecutionError) - - // fmt.Println("------------ EXECUTING TESTS ---------------") - // beaconContext, err := enclaveCtx.GetServiceContext(clClientBeacon) - // require.Nil(t, err) - // apiServicePublicPorts := beaconContext.GetPublicPorts() - // require.NotNil(t, apiServicePublicPorts) - // apiServiceHttpPortSpec, found := apiServicePublicPorts["http"] - // require.True(t, found) - // _ = apiServiceHttpPortSpec.GetNumber() - - // elContext, err := enclaveCtx.GetServiceContext(elCient) - // require.Nil(t, err) - // elPublicPorts := elContext.GetPublicPorts() - // require.NotNil(t, apiServicePublicPorts) - // apiServiceHttpPortSpec, found = elPublicPorts["rpc"] - // require.True(t, found) - // elPort := apiServiceHttpPortSpec.GetNumber() - - clUrl := fmt.Sprintf("http://127.0.0.1:%d", 54645) - elUrl := fmt.Sprintf("http://127.0.0.1:%d", 8545) + if clUrl == nil && elUrl == nil { + fmt.Println("------------ CONNECTING TO KURTOSIS ENGINE ---------------") + kurtosis_context.NewKurtosisContextFromLocalEngine() + kurtosisCtx, err := kurtosis_context.NewKurtosisContextFromLocalEngine() + require.NoError(t, err, "An error occurred connecting to the Kurtosis engine") + + enclaveId := fmt.Sprintf("%s-%d", enclaveIdPrefix, time.Now().Unix()) + + enclaveCtx, err := kurtosisCtx.CreateEnclave(ctx, enclaveId, isPartitioningEnabled) + + s.kurtosisCtx = kurtosisCtx + s.enclaveId = enclaveId + require.NoError(t, err, "An error occurred creating the enclave") + + fmt.Println("------------ EXECUTING PACKAGE ---------------") + + starlarkRunResult, err := enclaveCtx.RunStarlarkRemotePackageBlocking(ctx, remotePackage, useDefaultMainFile, useDefaultFunctionName, emptyParams, defaultDryRun, defaultParallelism) + + require.NoError(t, err, "An error executing loading the package") + require.Nil(t, starlarkRunResult.InterpretationError) + require.Empty(t, starlarkRunResult.ValidationErrors) + require.Nil(t, starlarkRunResult.ExecutionError) + + fmt.Println("------------ EXECUTING TESTS ---------------") + beaconContext, err := enclaveCtx.GetServiceContext(clClientBeacon) + require.Nil(t, err) + apiServicePublicPorts := beaconContext.GetPublicPorts() + require.NotNil(t, apiServicePublicPorts) + apiServiceHttpPortSpec, found := apiServicePublicPorts["http"] + require.True(t, found) + clPort := apiServiceHttpPortSpec.GetNumber() + + elContext, err := enclaveCtx.GetServiceContext(elCient) + require.Nil(t, err) + elPublicPorts := elContext.GetPublicPorts() + require.NotNil(t, apiServicePublicPorts) + apiServiceHttpPortSpec, found = elPublicPorts["rpc"] + require.True(t, found) + elPort := apiServiceHttpPortSpec.GetNumber() + + if elUrl != nil { + *elUrl = fmt.Sprintf("http://127.0.0.1:%d", elPort) + } + *clUrl = fmt.Sprintf("http://127.0.0.1:%d", clPort) + } - s.setConfig(c, elUrl, clUrl) + s.setConfig(c, *elUrl, *clUrl) s.setupWallet(ctx, c) fmt.Println("------------ DEPLOYING CONTRACT ---------------") - deployContracts(t, c, elUrl) + deployContracts(t, c, *elUrl) } diff --git a/testing/contracts/PermissionlessNodeRegistry.go b/testing/contracts/PermissionlessNodeRegistry.go index 3dc6ca088..d225898e5 100644 --- a/testing/contracts/PermissionlessNodeRegistry.go +++ b/testing/contracts/PermissionlessNodeRegistry.go @@ -44,7 +44,7 @@ type Validator struct { // PermissionlessNodeRegistryMetaData contains all meta data concerning the PermissionlessNodeRegistry contract. var PermissionlessNodeRegistryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CooldownNotComplete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicatePoolIDOrPoolNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InSufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBondEthValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidKeyCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartAndEndIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MisMatchingInputKeysSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoChangeInState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSDCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorAlreadyOnBoardedInProtocol\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorIsDeactivate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorNotOnBoarded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PageNumberIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PubkeyAlreadyExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyVerifiedKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyWithdrawnKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UNEXPECTED_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"maxKeyLimitReached\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"AddedValidatorKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"DecreasedTotalActiveValidatorCount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"IncreasedTotalActiveValidatorCount\",\"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\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nodeRewardAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"OnboardedOperator\",\"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\":\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredCollateralToPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"batchKeyDepositLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedInputKeyCountLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"UpdatedMaxNonTerminalKeyPerOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"UpdatedNextQueuedValidatorIndex\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardAddress\",\"type\":\"address\"}],\"name\":\"UpdatedOperatorDetails\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"UpdatedSocializingPoolState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"}],\"name\":\"UpdatedValidatorDepositBlock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedVerifiedKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedWithdrawnKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedAsFrontRunned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedReadyToDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorStatusMarkedAsInvalidSignature\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COLLATERAL_ETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRONT_RUN_PENALTY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ID\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_depositSignature\",\"type\":\"bytes[]\"}],\"name\":\"addValidatorKeys\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"changeSocializingPoolState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllNodeELVaultAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorRewardAddress\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalKeys\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getSocializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsByOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"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\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"increaseTotalActiveValidatorCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inputKeyCountLimit\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_readyToDepositPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_frontRunPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_invalidSignaturePubkey\",\"type\":\"bytes[]\"}],\"name\":\"markValidatorReadyToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNonTerminalKeyPerOperator\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextQueuedValidatorIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextValidatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nodeELRewardVaultByOperatorId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_operatorRewardAddress\",\"type\":\"address\"}],\"name\":\"onboardNodeOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorIDByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"operatorStructById\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"operatorRewardAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorAddress\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queuedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"socializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"totalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferCollateralToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"}],\"name\":\"updateDepositStatusAndBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_inputKeyCountLimit\",\"type\":\"uint16\"}],\"name\":\"updateInputKeyCountLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"updateMaxNonTerminalKeyPerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"updateNextQueuedValidatorIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_rewardAddress\",\"type\":\"address\"}],\"name\":\"updateOperatorDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateVerifiedKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"validatorIdByPubkey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorIdsByOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorRegistry\",\"outputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifiedKeyBatchSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"withdrawnValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b5060405162005666380380620056668339810160408190526200003391620004c6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001f1565b6200010e82620001f1565b620001186200021c565b6200012262000278565b6200012c620002dc565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff00009091166a01000000000000000000006001600160a01b0386160261ffff1916171762010000600160501b03191662320000179055603260fc55620001a25f8462000340565b8015620001e8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620004fc565b6001600160a01b038116620002195760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002765760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002d25760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b62000276620003e3565b5f54610100900460ff16620003365760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200027662000449565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16620003df575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200039e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff166200043d5760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff16620004a35760405162461bcd60e51b815260206004820152602b60248201525f805160206200564683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b0381168114620004c1575f80fd5b919050565b5f8060408385031215620004d8575f80fd5b620004e383620004aa565b9150620004f360208401620004aa565b90509250929050565b61513c806200050a5f395ff3fe60806040526004361061035b575f3560e01c806383ea2358116101bd578063bb7306bf116100f2578063deacde2b11610092578063ebb5c1741161006d578063ebb5c17414610a64578063f7c0918914610a90578063f90b083814610aa5578063f9c4dda414610ac4575f80fd5b8063deacde2b146109fe578063e0bf8b5314610a11578063e0d7d0e914610a3e575f80fd5b8063c8a00e7a116100cd578063c8a00e7a14610964578063cac8b30614610994578063d547741f146109c0578063d5e1e5ce146109df575f80fd5b8063bb7306bf146108f1578063bc4a3ad51461090c578063c34ade5c14610938575f80fd5b8063998888981161015d578063ab3e71eb11610138578063ab3e71eb14610884578063af533aa814610899578063b01db078146108b8578063b8d2f06c146108d2575f80fd5b806399888898146108335780639ee804cb14610852578063a217fddf14610871575f80fd5b806384b0fa4c1161019857806384b0fa4c146107aa5780638a25bcec146107c057806391d14854146107df5780639344b242146107fe575f80fd5b806383ea23581461073257806384522a6d1461076a5780638456cb5914610796575f80fd5b806349911bfb116102935780635c2c30a511610233578063683547b81161020e578063683547b8146106c757806374338e6d146106f357806377c359e1146107095780637bd977d91461071e575f80fd5b80635c2c30a5146106595780635c975abb1461069157806360c3cf3f146106a8575f80fd5b806358a994ea1161026e57806358a994ea146105c957806359c3c9b7146105e85780635a1239c1146106075780635ae7f25d1461063a575f80fd5b806349911bfb1461055c5780634f59ed801461057157806350d5d7ab1461058c575f80fd5b80632d1dbd74116102fe57806336514d9f116102d957806336514d9f146104e457806336568abe146105035780633f4ba83a14610522578063490ffa3514610536575f80fd5b80632d1dbd74146104845780632d32924f146104995780632f2ff15d146104c5575f80fd5b8063186d954111610339578063186d9541146103eb578063248a9ca31461040a5780632517cfbf14610446578063264f27f314610465575f80fd5b806301ffc9a71461035f578063044d2fe81461039357806313797bff146103ca575b5f80fd5b34801561036a575f80fd5b5061037e6103793660046144ce565b610afb565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103b26103ad36600461455a565b610b31565b6040516001600160a01b03909116815260200161038a565b3480156103d5575f80fd5b506103e96103e43660046145fd565b610f50565b005b3480156103f6575f80fd5b506103e961040536600461468f565b611397565b348015610415575f80fd5b5061043861042436600461468f565b5f9081526065602052604090206001015490565b60405190815260200161038a565b348015610451575f80fd5b506103e96104603660046146a6565b611447565b348015610470575f80fd5b506103e961047f3660046146c7565b6114a9565b34801561048f575f80fd5b5061043860fd5481565b3480156104a4575f80fd5b506104b86104b3366004614705565b6116f4565b60405161038a9190614725565b3480156104d0575f80fd5b506103e96104df366004614771565b611828565b3480156104ef575f80fd5b5061037e6104fe36600461479f565b61184c565b34801561050e575f80fd5b506103e961051d366004614771565b611879565b34801561052d575f80fd5b506103e96118fc565b348015610541575f80fd5b5060fb546103b290600160501b90046001600160a01b031681565b348015610567575f80fd5b5061043860ff5481565b34801561057c575f80fd5b50610438673782dace9d90000081565b348015610597575f80fd5b5060fb546105b1906201000090046001600160401b031681565b6040516001600160401b03909116815260200161038a565b3480156105d4575f80fd5b506103e96105e33660046147d1565b611924565b3480156105f3575f80fd5b506103e961060236600461468f565b611aa2565b348015610612575f80fd5b5061062661062136600461468f565b611b42565b60405161038a9897969594939291906148a4565b348015610645575f80fd5b506103e961065436600461468f565b611d24565b348015610664575f80fd5b50610438610673366004614931565b80516020818301810180516101038252928201919093012091525481565b34801561069c575f80fd5b5060975460ff1661037e565b3480156106b3575f80fd5b506103e96106c23660046149db565b611e8b565b3480156106d2575f80fd5b506106e66106e1366004614a01565b611f05565b60405161038a9190614a33565b3480156106fe575f80fd5b506104386101005481565b348015610714575f80fd5b5061010154610438565b348015610729575f80fd5b506104386122bc565b34801561073d575f80fd5b506103b261074c36600461468f565b5f90815261010560205260409020600201546001600160a01b031690565b348015610775575f80fd5b5061043861078436600461468f565b6101086020525f908152604090205481565b3480156107a1575f80fd5b506103e96122d3565b3480156107b5575f80fd5b506104386101015481565b3480156107cb575f80fd5b506105b16107da366004614a01565b6122f9565b3480156107ea575f80fd5b5061037e6107f9366004614771565b6123c4565b348015610809575f80fd5b506103b261081836600461468f565b6101096020525f90815260409020546001600160a01b031681565b34801561083e575f80fd5b506106e661084d366004614705565b6123ee565b34801561085d575f80fd5b506103e961086c366004614b1d565b612739565b34801561087c575f80fd5b506104385f81565b34801561088f575f80fd5b5061043860fc5481565b3480156108a4575f80fd5b506103e96108b336600461468f565b6127c2565b3480156108c3575f80fd5b50673782dace9d900000610438565b3480156108dd575f80fd5b506103e96108ec36600461468f565b612815565b3480156108fc575f80fd5b506104386729a2241af62c000081565b348015610917575f80fd5b5061043861092636600461468f565b6101046020525f908152604090205481565b348015610943575f80fd5b5061043861095236600461468f565b5f908152610107602052604090205490565b34801561096f575f80fd5b5061098361097e36600461468f565b6128a0565b60405161038a959493929190614b38565b34801561099f575f80fd5b506104386109ae366004614b1d565b6101066020525f908152604090205481565b3480156109cb575f80fd5b506103e96109da366004614771565b612969565b3480156109ea575f80fd5b506104386109f9366004614705565b61298d565b6103e9610a0c3660046145fd565b6129b9565b348015610a1c575f80fd5b5060fb54610a2b9061ffff1681565b60405161ffff909116815260200161038a565b348015610a49575f80fd5b50610a52600181565b60405160ff909116815260200161038a565b348015610a6f575f80fd5b50610438610a7e36600461468f565b5f908152610108602052604090205490565b348015610a9b575f80fd5b5061043860fe5481565b348015610ab0575f80fd5b506103b2610abf366004614b7c565b61309c565b348015610acf575f80fd5b5061037e610ade366004614b1d565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b2b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b3a613305565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb09190614b97565b905060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c279190614b97565b604051636fc4c27f60e11b8152600160048201526001600160a01b039182169183169063df8984fe90602401602060405180830381865afa158015610c6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c929190614b97565b6001600160a01b031614610cb9576040516303b8ffef60e41b815260040160405180910390fd5b604051639f7053f560e01b81526001600160a01b03821690639f7053f590610ce79088908890600401614bda565b5f604051808303815f87803b158015610cfe575f80fd5b505af1158015610d10573d5f803e3d5ffd5b50505050610d1d8361334b565b604051633e71376960e21b81523360048201526001600160a01b0382169063f9c4dda490602401602060405180830381865afa158015610d5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d839190614bf5565b15610da15760405163707999fb60e11b815260040160405180910390fd5b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e179190614b97565b60fd54604051636a0b688160e01b81526001600482015260248101919091526001600160a01b039190911690636a0b6881906044016020604051808303815f875af1158015610e68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8c9190614b97565b60fd545f9081526101096020526040902080546001600160a01b0319166001600160a01b038316179055905086610ec35780610f38565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f389190614b97565b9250610f4687878787613372565b5050949350505050565b610f58613500565b610f60613305565b60fb5460408051633871d0f160e01b81529051610fde923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd99190614c10565b613559565b60fc5485908490839081610ff28486614c3b565b610ffc9190614c3b565b111561101b5760405163525e3de760e01b815260040160405180910390fd5b5f5b838110156110e4575f6101038b8b8481811061103b5761103b614c4e565b905060200281019061104d9190614c62565b60405161105b929190614ca4565b9081526020016040518091039020549050611075816135e5565b61107e81613631565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b848181106110b1576110b1614c4e565b90506020028101906110c39190614c62565b836040516110d393929190614cb3565b60405180910390a15060010161101d565b5081156111c15760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111609190614b97565b6001600160a01b0316638d0d8cb66111806729a2241af62c000085614cd6565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156111a9575f80fd5b505af11580156111bb573d5f803e3d5ffd5b50505050505b5f5b828110156112b7575f6101038989848181106111e1576111e1614c4e565b90506020028101906111f39190614c62565b604051611201929190614ca4565b908152602001604051809103902054905061121b816135e5565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b8346689898481811061128457611284614c4e565b90506020028101906112969190614c62565b836040516112a693929190614cb3565b60405180910390a1506001016111c3565b505f5b81811015611381575f6101038787848181106112d8576112d8614c4e565b90506020028101906112ea9190614c62565b6040516112f8929190614ca4565b9081526020016040518091039020549050611312816135e5565b61131b81613672565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f87878481811061134e5761134e614c4e565b90506020028101906113609190614c62565b8360405161137093929190614cb3565b60405180910390a1506001016112ba565b5050505061138f600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b815290516113ec923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb54611465903390600160501b90046001600160a01b0316613801565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c369060200161143c565b60fb5460408051633871d0f160e01b815290516114fe923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa15801561154c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115709190614c10565b81111561159057604051639519af4360e01b815260040160405180910390fd5b5f5b818110156116e5575f6101038585848181106115b0576115b0614c4e565b90506020028101906115c29190614c62565b6040516115d0929190614ca4565b90815260200160405180910390205490506115ea81613886565b611607576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b158015611669575f80fd5b505af115801561167b573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf798585848181106116b2576116b2614c4e565b90506020028101906116c49190614c62565b836040516116d493929190614cb3565b60405180910390a150600101611592565b506116ef81613ad1565b505050565b6060825f03611716576040516334d6e01560e01b815260040160405180910390fd5b5f82611723600186614ced565b61172d9190614cd6565b611738906001614c3b565b90505f6117458483614c3b565b905060fd548111611756578061175a565b60fd545b90505f82821161176a575f611774565b6117748383614ced565b6001600160401b0381111561178b5761178b61491d565b6040519080825280602002602001820160405280156117b4578160200160208202803683370190505b509050825b8281101561181e575f81815261010960205260409020546001600160a01b0316826117e48684614ced565b815181106117f4576117f4614c4e565b6001600160a01b03909216602092830291909101909101528061181681614d00565b9150506117b9565b5095945050505050565b5f8281526065602052604090206001015461184281613b1c565b6116ef8383613b26565b5f6101038383604051611860929190614ca4565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146118ee5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6118f88282613bab565b5050565b60fb5461191a903390600160501b90046001600160a01b0316613c11565b611922613c96565b565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611975573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119999190614b97565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b81526004016119c6929190614bda565b5f604051808303815f87803b1580156119dd575f80fd5b505af11580156119ef573d5f803e3d5ffd5b505050506119fc8161334b565b611a0533613ce8565b50335f9081526101066020908152604080832054808452610105909252909120600101611a33848683614d95565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d8726977790611a9490879087908790614e50565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b81529051611af7923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b806101015f828254611b099190614c3b565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f29060200161143c565b6101026020525f90815260409020805460018201805460ff9092169291611b6890614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9490614d18565b8015611bdf5780601f10611bb657610100808354040283529160200191611bdf565b820191905f5260205f20905b815481529060010190602001808311611bc257829003601f168201915b505050505090806002018054611bf490614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2090614d18565b8015611c6b5780601f10611c4257610100808354040283529160200191611c6b565b820191905f5260205f20905b815481529060010190602001808311611c4e57829003601f168201915b505050505090806003018054611c8090614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054611cac90614d18565b8015611cf75780601f10611cce57610100808354040283529160200191611cf7565b820191905f5260205f20905b815481529060010190602001808311611cda57829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611d2c613500565b60fb5460408051637a87fa0b60e01b81529051611d81923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df69190614b97565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611e2e575f80fd5b505af1158015611e40573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a81604051611e7691815260200190565b60405180910390a1611e88600160c955565b50565b60fb54611ea9903390600160501b90046001600160a01b0316613c11565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a29060200161143c565b6060825f03611f27576040516334d6e01560e01b815260040160405180910390fd5b5f82611f34600186614ced565b611f3e9190614cd6565b90505f611f4b8483614c3b565b6001600160a01b0387165f9081526101066020526040812054919250819003611f875760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311611fa35782611fa5565b805b92505f848411611fb5575f611fbf565b611fbf8585614ced565b6001600160401b03811115611fd657611fd661491d565b60405190808252806020026020018201604052801561200f57816020015b611ffc614484565b815260200190600190039081611ff45790505b509050845b848110156122af575f8481526101076020526040812080548390811061203c5761203c614c4e565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff16600581111561207e5761207e614823565b600581111561208f5761208f614823565b81526020016001820180546120a390614d18565b80601f01602080910402602001604051908101604052809291908181526020018280546120cf90614d18565b801561211a5780601f106120f15761010080835404028352916020019161211a565b820191905f5260205f20905b8154815290600101906020018083116120fd57829003601f168201915b5050505050815260200160028201805461213390614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461215f90614d18565b80156121aa5780601f10612181576101008083540402835291602001916121aa565b820191905f5260205f20905b81548152906001019060200180831161218d57829003601f168201915b505050505081526020016003820180546121c390614d18565b80601f01602080910402602001604051908101604052809291908181526020018280546121ef90614d18565b801561223a5780601f106122115761010080835404028352916020019161223a565b820191905f5260205f20905b81548152906001019060200180831161221d57829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152836122808985614ced565b8151811061229057612290614c4e565b60200260200101819052505080806122a790614d00565b915050612014565b5098975050505050505050565b5f6101005460ff546122ce9190614ced565b905090565b60fb546122f1903390600160501b90046001600160a01b0316613c11565b611922613d56565b5f8183111561231b5760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f90815261010660205260408120549061234b825f908152610107602052604090205490565b905080841161235a578361235c565b805b93505f855b858110156123b9575f8481526101076020526040812080548390811061238957612389614c4e565b905f5260205f200154905061239d81613d93565b156123b057826123ac81614e7b565b9350505b50600101612361565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f03612410576040516334d6e01560e01b815260040160405180910390fd5b5f8261241d600186614ced565b6124279190614cd6565b612432906001614c3b565b90505f61243f8483614c3b565b905060fe5481116124505780612454565b60fe545b90505f846001600160401b0381111561246f5761246f61491d565b6040519080825280602002602001820160405280156124a857816020015b612495614484565b81526020019060019003908161248d5790505b5090505f835b8381101561272d576124bf81613886565b1561271b575f818152610102602052604090819020815161010081019092528054829060ff1660058111156124f6576124f6614823565b600581111561250757612507614823565b815260200160018201805461251b90614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461254790614d18565b80156125925780601f1061256957610100808354040283529160200191612592565b820191905f5260205f20905b81548152906001019060200180831161257557829003601f168201915b505050505081526020016002820180546125ab90614d18565b80601f01602080910402602001604051908101604052809291908181526020018280546125d790614d18565b80156126225780601f106125f957610100808354040283529160200191612622565b820191905f5260205f20905b81548152906001019060200180831161260557829003601f168201915b5050505050815260200160038201805461263b90614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461266790614d18565b80156126b25780601f10612689576101008083540402835291602001916126b2565b820191905f5260205f20905b81548152906001019060200180831161269557829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152835184908490811061270157612701614c4e565b6020026020010181905250818061271790614d00565b9250505b8061272581614d00565b9150506124ae565b50815295945050505050565b5f61274381613b1c565b61274c8261334b565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb546127e0903390600160501b90046001600160a01b0316613801565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b49060200161143c565b60fb5460408051637a87fa0b60e01b8152905161286a923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da99060200161143c565b6101056020525f90815260409020805460018201805460ff80841694610100909404169291906128cf90614d18565b80601f01602080910402602001604051908101604052809291908181526020018280546128fb90614d18565b80156129465780601f1061291d57610100808354040283529160200191612946565b820191905f5260205f20905b81548152906001019060200180831161292957829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f8281526065602052604090206001015461298381613b1c565b6116ef8383613bab565b610107602052815f5260405f2081815481106129a7575f80fd5b905f5260205f20015f91509150505481565b6129c1613500565b6129c9613305565b5f6129d333613ce8565b90505f806129e388878686614019565b915091505f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a39573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a5d9190614b97565b90505f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad59190614b97565b90505f5b84811015612f3457816001600160a01b0316639f55941b8d8d84818110612b0257612b02614c4e565b9050602002810190612b149190614c62565b8d8d86818110612b2657612b26614c4e565b9050602002810190612b389190614c62565b8d8d88818110612b4a57612b4a614c4e565b9050602002810190612b5c9190614c62565b6040518763ffffffff1660e01b8152600401612b7d96959493929190614ea0565b5f604051808303815f87803b158015612b94575f80fd5b505af1158015612ba6573d5f803e3d5ffd5b505050505f836001600160a01b0316637f70ce0d6001898589612bc99190614c3b565b60fe546040516001600160e01b031960e087901b16815260ff90941660048501526024840192909252604483015260648201526084016020604051808303815f875af1158015612c1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c3f9190614b97565b604080516101008101909152909150805f81526020018e8e85818110612c6757612c67614c4e565b9050602002810190612c799190614c62565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018c8c85818110612cc457612cc4614c4e565b9050602002810190612cd69190614c62565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018a8a85818110612d2157612d21614c4e565b9050602002810190612d339190614c62565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b03841660208084019190915260408084018c905260608401839052608090930182905260fe54825261010290522081518154829060ff19166001836005811115612dbb57612dbb614823565b021790555060208201516001820190612dd49082614ee8565b5060408201516002820190612de99082614ee8565b5060608201516003820190612dfe9082614ee8565b5060808201516004820180546001600160a01b0319166001600160a01b0390921691909117905560a0820151600582015560c0820151600682015560e09091015160079091015560fe546101038e8e85818110612e5d57612e5d614c4e565b9050602002810190612e6f9190614c62565b604051612e7d929190614ca4565b9081526040805160209281900383019020929092555f898152610107825291822060fe5481546001810183559184529190922090910155337fab5128638b64e6216e80dfafa70d3cb6d54913a536dc41e76eb4a04cfbe979cf8e8e85818110612ee857612ee8614c4e565b9050602002810190612efa9190614c62565b60fe54604051612f0c93929190614cb3565b60405180910390a260fe8054905f612f2383614d00565b919050555081600101915050612ad9565b5060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f86573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612faa9190614b97565b6001600160a01b031663eda0ae128560fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561300a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061302e9190614c10565b6130389190614cd6565b8d8d8d8d8b8a6040518863ffffffff1660e01b815260040161305f9695949392919061502f565b5f604051808303818588803b158015613076575f80fd5b505af1158015613088573d5f803e3d5ffd5b5050505050505050505061138f600160c955565b5f806130a733613ce8565b5f818152610105602052604090205490915083151561010090910460ff161515036130e557604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613136573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061315a9190614c10565b5f82815261010860205260409020546131739190614c3b565b4310156131935760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b03169150821561328a576001600160a01b038216311561321257816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156131fb575f80fd5b505af115801561320d573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613263573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132879190614b97565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff16156119225760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016118e5565b6001600160a01b038116611e885760405163d92e233d60e01b815260040160405180910390fd5b6040518060a00160405280600115158152602001851515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b0384166020808401919091523360409384015260fd548252610105815290829020835181549285015161ffff1990931690151561ff00191617610100921515929092029190911781559082015160018201906134289082614ee8565b5060608201516002820180546001600160a01b03199081166001600160a01b039384161790915560809093015160039092018054909316911617905560fd8054335f9081526101066020908152604080832084905592825261010890529081204390558154919061349883614d00565b9190505550336001600160a01b03167f55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd482600160fd546134d89190614ced565b604080516001600160a01b039093168352602083019190915287151590820152606001611a94565b600260c954036135525760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016118e5565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa1580156135a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135c89190614bf5565b6116ef5760405163168dfea160e01b815260040160405180910390fd5b80158061361357505f818152610102602052604081205460ff16600581111561361057613610614823565b14155b15611e88576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff80548452610104909252822083905580549161366a83614d00565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa1580156136ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137139190614b97565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa158015613772573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137969190614c10565b6137a890673782dace9d900000614ced565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b1580156137e5575f80fd5b505af11580156137f7573d5f803e3d5ffd5b5050505050505050565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa158015613845573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138699190614bf5565b6118f85760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff1660058111156138bb576138bb614823565b60058111156138cc576138cc614823565b81526020016001820180546138e090614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461390c90614d18565b80156139575780601f1061392e57610100808354040283529160200191613957565b820191905f5260205f20905b81548152906001019060200180831161393a57829003601f168201915b5050505050815260200160028201805461397090614d18565b80601f016020809104026020016040519081016040528092919081815260200182805461399c90614d18565b80156139e75780601f106139be576101008083540402835291602001916139e7565b820191905f5260205f20905b8154815290600101906020018083116139ca57829003601f168201915b50505050508152602001600382018054613a0090614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054613a2c90614d18565b8015613a775780601f10613a4e57610100808354040283529160200191613a77565b820191905f5260205f20905b815481529060010190602001808311613a5a57829003601f168201915b50505091835250506004828101546001600160a01b03166020830152600583015460408301526006830154606083015260079092015460809091015290915081516005811115613ac957613ac9614823565b149392505050565b806101015f828254613ae39190614ced565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece39060200161143c565b611e888133614234565b613b3082826123c4565b6118f8575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613b673390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b613bb582826123c4565b156118f8575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015613c55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c799190614bf5565b6118f85760405163c4230ae360e01b815260040160405180910390fd5b613c9e61428d565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381165f908152610106602052604081205490819003613d225760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff16613d515760405163c11cb1df60e01b815260040160405180910390fd5b919050565b613d5e613305565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613ccb3390565b5f818152610102602052604080822081516101008101909252805483929190829060ff166005811115613dc857613dc8614823565b6005811115613dd957613dd9614823565b8152602001600182018054613ded90614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054613e1990614d18565b8015613e645780601f10613e3b57610100808354040283529160200191613e64565b820191905f5260205f20905b815481529060010190602001808311613e4757829003601f168201915b50505050508152602001600282018054613e7d90614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054613ea990614d18565b8015613ef45780601f10613ecb57610100808354040283529160200191613ef4565b820191905f5260205f20905b815481529060010190602001808311613ed757829003601f168201915b50505050508152602001600382018054613f0d90614d18565b80601f0160208091040260200160405190810160405280929190818152602001828054613f3990614d18565b8015613f845780601f10613f5b57610100808354040283529160200191613f84565b820191905f5260205f20905b815481529060010190602001808311613f6757829003601f168201915b505050918352505060048201546001600160a01b0316602082015260058083015460408301526006830154606083015260079092015460809091015290915081516005811115613fd657613fd6614823565b1480613ff45750600281516005811115613ff257613ff2614823565b145b80614011575060018151600581111561400f5761400f614823565b145b159392505050565b5f80848614158061402a5750838614155b156140485760405163e5fe884360e01b815260040160405180910390fd5b85915081158061405d575060fb5461ffff1682115b1561407b576040516379b348ff60e11b815260040160405180910390fd5b505f8281526101076020526040812054906140973382846122f9565b60fb546001600160401b039182169250620100009004166140b88483614c3b565b11156140d757604051633e10caad60e21b815260040160405180910390fd5b6140e9673782dace9d90000084614cd6565b341461410857604051635aaa2d1f60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b031663aa9537956040518163ffffffff1660e01b8152600401602060405180830381865afa158015614159573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061417d9190614b97565b6001600160a01b031663b178e38e3360016141988786614c3b565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260ff90911660248301526044820152606401602060405180830381865afa1580156141e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061420d9190614bf5565b61422a57604051633bf053fd60e11b815260040160405180910390fd5b5094509492505050565b61423e82826123c4565b6118f85761424b816142d6565b6142568360206142e8565b60405160200161426792919061506b565b60408051601f198184030181529082905262461bcd60e51b82526118e5916004016150df565b60975460ff166119225760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016118e5565b6060610b2b6001600160a01b03831660145b60605f6142f6836002614cd6565b614301906002614c3b565b6001600160401b038111156143185761431861491d565b6040519080825280601f01601f191660200182016040528015614342576020820181803683370190505b509050600360fc1b815f8151811061435c5761435c614c4e565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061438a5761438a614c4e565b60200101906001600160f81b03191690815f1a9053505f6143ac846002614cd6565b6143b7906001614c3b565b90505b600181111561442e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106143eb576143eb614c4e565b1a60f81b82828151811061440157614401614c4e565b60200101906001600160f81b03191690815f1a90535060049490941c93614427816150f1565b90506143ba565b50831561447d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016118e5565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f602082840312156144de575f80fd5b81356001600160e01b03198116811461447d575f80fd5b8015158114611e88575f80fd5b5f8083601f840112614512575f80fd5b5081356001600160401b03811115614528575f80fd5b60208301915083602082850101111561453f575f80fd5b9250929050565b6001600160a01b0381168114611e88575f80fd5b5f805f806060858703121561456d575f80fd5b8435614578816144f5565b935060208501356001600160401b03811115614592575f80fd5b61459e87828801614502565b90945092505060408501356145b281614546565b939692955090935050565b5f8083601f8401126145cd575f80fd5b5081356001600160401b038111156145e3575f80fd5b6020830191508360208260051b850101111561453f575f80fd5b5f805f805f8060608789031215614612575f80fd5b86356001600160401b0380821115614628575f80fd5b6146348a838b016145bd565b9098509650602089013591508082111561464c575f80fd5b6146588a838b016145bd565b90965094506040890135915080821115614670575f80fd5b5061467d89828a016145bd565b979a9699509497509295939492505050565b5f6020828403121561469f575f80fd5b5035919050565b5f602082840312156146b6575f80fd5b813561ffff8116811461447d575f80fd5b5f80602083850312156146d8575f80fd5b82356001600160401b038111156146ed575f80fd5b6146f9858286016145bd565b90969095509350505050565b5f8060408385031215614716575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b818110156147655783516001600160a01b031683529284019291840191600101614740565b50909695505050505050565b5f8060408385031215614782575f80fd5b82359150602083013561479481614546565b809150509250929050565b5f80602083850312156147b0575f80fd5b82356001600160401b038111156147c5575f80fd5b6146f985828601614502565b5f805f604084860312156147e3575f80fd5b83356001600160401b038111156147f8575f80fd5b61480486828701614502565b909450925050602084013561481881614546565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b6006811061485357634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015614871578181015183820152602001614859565b50505f910152565b5f8151808452614890816020860160208601614857565b601f01601f19169290920160200192915050565b5f6101006148b2838c614837565b8060208401526148c48184018b614879565b905082810360408401526148d8818a614879565b905082810360608401526148ec8189614879565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215614941575f80fd5b81356001600160401b0380821115614957575f80fd5b818401915084601f83011261496a575f80fd5b81358181111561497c5761497c61491d565b604051601f8201601f19908116603f011681019083821181831017156149a4576149a461491d565b816040528281528760208487010111156149bc575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f602082840312156149eb575f80fd5b81356001600160401b038116811461447d575f80fd5b5f805f60608486031215614a13575f80fd5b8335614a1e81614546565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b83811015614b0f57603f198984030185528151610100614a79858351614837565b88820151818a870152614a8e82870182614879565b9150508782015185820389870152614aa68282614879565b91505060608083015186830382880152614ac08382614879565b92505050608080830151614ade828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e09182015191909401529386019390860190600101614a58565b509098975050505050505050565b5f60208284031215614b2d575f80fd5b813561447d81614546565b8515158152841515602082015260a060408201525f614b5a60a0830186614879565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f60208284031215614b8c575f80fd5b813561447d816144f5565b5f60208284031215614ba7575f80fd5b815161447d81614546565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f614bed602083018486614bb2565b949350505050565b5f60208284031215614c05575f80fd5b815161447d816144f5565b5f60208284031215614c20575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2b57610b2b614c27565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112614c77575f80fd5b8301803591506001600160401b03821115614c90575f80fd5b60200191503681900382131561453f575f80fd5b818382375f9101908152919050565b604081525f614cc6604083018587614bb2565b9050826020830152949350505050565b8082028115828204841417610b2b57610b2b614c27565b81810381811115610b2b57610b2b614c27565b5f60018201614d1157614d11614c27565b5060010190565b600181811c90821680614d2c57607f821691505b602082108103614d4a57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156116ef575f81815260208120601f850160051c81016020861015614d765750805b601f850160051c820191505b8181101561138f57828155600101614d82565b6001600160401b03831115614dac57614dac61491d565b614dc083614dba8354614d18565b83614d50565b5f601f841160018114614df1575f8515614dda5750838201355b5f19600387901b1c1916600186901b178355614e49565b5f83815260209020601f19861690835b82811015614e215786850135825560209485019460019092019101614e01565b5086821015614e3d575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f614e63604083018587614bb2565b905060018060a01b0383166020830152949350505050565b5f6001600160401b03808316818103614e9657614e96614c27565b6001019392505050565b606081525f614eb360608301888a614bb2565b8281036020840152614ec6818789614bb2565b90508281036040840152614edb818587614bb2565b9998505050505050505050565b81516001600160401b03811115614f0157614f0161491d565b614f1581614f0f8454614d18565b84614d50565b602080601f831160018114614f48575f8415614f315750858301515b5f19600386901b1c1916600185901b17855561138f565b5f85815260208120601f198616915b82811015614f7657888601518255948401946001909101908401614f57565b5085821015614f9357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8183525f6020808501808196508560051b81019150845f5b878110156150225782840389528135601e19883603018112614fdb575f80fd5b870185810190356001600160401b03811115614ff5575f80fd5b803603821315615003575f80fd5b61500e868284614bb2565b9a87019a9550505090840190600101614fbb565b5091979650505050505050565b608081525f61504260808301888a614fa3565b8281036020840152615055818789614fa3565b6040840195909552505060600152949350505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516150a2816017850160208801614857565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516150d3816028840160208801614857565b01602801949350505050565b602081525f61447d6020830184614879565b5f816150ff576150ff614c27565b505f19019056fea264697066735822122038587c5537098698379d47e206c76731944e1671f5e10be7621fd6860ccddd1664736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + Bin: "0x608060405234801562000010575f80fd5b5060405162004d8b38038062004d8b8339810160408190526200003391620004c6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001f1565b6200010e82620001f1565b620001186200021c565b6200012262000278565b6200012c620002dc565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff00009091166a01000000000000000000006001600160a01b0386160261ffff1916171762010000600160501b03191662320000179055603260fc55620001a25f8462000340565b8015620001e8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620004fc565b6001600160a01b038116620002195760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002765760405162461bcd60e51b815260206004820152602b60248201525f8051602062004d6b83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002d25760405162461bcd60e51b815260206004820152602b60248201525f8051602062004d6b83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b62000276620003e3565b5f54610100900460ff16620003365760405162461bcd60e51b815260206004820152602b60248201525f8051602062004d6b83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200027662000449565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16620003df575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200039e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff166200043d5760405162461bcd60e51b815260206004820152602b60248201525f8051602062004d6b83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff16620004a35760405162461bcd60e51b815260206004820152602b60248201525f8051602062004d6b83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b0381168114620004c1575f80fd5b919050565b5f8060408385031215620004d8575f80fd5b620004e383620004aa565b9150620004f360208401620004aa565b90509250929050565b614861806200050a5f395ff3fe60806040526004361061035b575f3560e01c806383ea2358116101bd578063bb7306bf116100f2578063deacde2b11610092578063ebb5c1741161006d578063ebb5c17414610a64578063f7c0918914610a90578063f90b083814610aa5578063f9c4dda414610ac4575f80fd5b8063deacde2b146109fe578063e0bf8b5314610a11578063e0d7d0e914610a3e575f80fd5b8063c8a00e7a116100cd578063c8a00e7a14610964578063cac8b30614610994578063d547741f146109c0578063d5e1e5ce146109df575f80fd5b8063bb7306bf146108f1578063bc4a3ad51461090c578063c34ade5c14610938575f80fd5b8063998888981161015d578063ab3e71eb11610138578063ab3e71eb14610884578063af533aa814610899578063b01db078146108b8578063b8d2f06c146108d2575f80fd5b806399888898146108335780639ee804cb14610852578063a217fddf14610871575f80fd5b806384b0fa4c1161019857806384b0fa4c146107aa5780638a25bcec146107c057806391d14854146107df5780639344b242146107fe575f80fd5b806383ea23581461073257806384522a6d1461076a5780638456cb5914610796575f80fd5b806349911bfb116102935780635c2c30a511610233578063683547b81161020e578063683547b8146106c757806374338e6d146106f357806377c359e1146107095780637bd977d91461071e575f80fd5b80635c2c30a5146106595780635c975abb1461069157806360c3cf3f146106a8575f80fd5b806358a994ea1161026e57806358a994ea146105c957806359c3c9b7146105e85780635a1239c1146106075780635ae7f25d1461063a575f80fd5b806349911bfb1461055c5780634f59ed801461057157806350d5d7ab1461058c575f80fd5b80632d1dbd74116102fe57806336514d9f116102d957806336514d9f146104e457806336568abe146105035780633f4ba83a14610522578063490ffa3514610536575f80fd5b80632d1dbd74146104845780632d32924f146104995780632f2ff15d146104c5575f80fd5b8063186d954111610339578063186d9541146103eb578063248a9ca31461040a5780632517cfbf14610446578063264f27f314610465575f80fd5b806301ffc9a71461035f578063044d2fe81461039357806313797bff146103ca575b5f80fd5b34801561036a575f80fd5b5061037e610379366004613d03565b610afb565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103b26103ad366004613d8f565b610b31565b6040516001600160a01b03909116815260200161038a565b3480156103d5575f80fd5b506103e96103e4366004613e32565b610f50565b005b3480156103f6575f80fd5b506103e9610405366004613ec4565b611397565b348015610415575f80fd5b50610438610424366004613ec4565b5f9081526065602052604090206001015490565b60405190815260200161038a565b348015610451575f80fd5b506103e9610460366004613edb565b611447565b348015610470575f80fd5b506103e961047f366004613efc565b6114a9565b34801561048f575f80fd5b5061043860fd5481565b3480156104a4575f80fd5b506104b86104b3366004613f3a565b6116f4565b60405161038a9190613f5a565b3480156104d0575f80fd5b506103e96104df366004613fa6565b611828565b3480156104ef575f80fd5b5061037e6104fe366004613fd4565b61184c565b34801561050e575f80fd5b506103e961051d366004613fa6565b611879565b34801561052d575f80fd5b506103e96118fc565b348015610541575f80fd5b5060fb546103b290600160501b90046001600160a01b031681565b348015610567575f80fd5b5061043860ff5481565b34801561057c575f80fd5b50610438673782dace9d90000081565b348015610597575f80fd5b5060fb546105b1906201000090046001600160401b031681565b6040516001600160401b03909116815260200161038a565b3480156105d4575f80fd5b506103e96105e3366004614006565b611924565b3480156105f3575f80fd5b506103e9610602366004613ec4565b611aa2565b348015610612575f80fd5b50610626610621366004613ec4565b611b42565b60405161038a9897969594939291906140d9565b348015610645575f80fd5b506103e9610654366004613ec4565b611d24565b348015610664575f80fd5b50610438610673366004614166565b80516020818301810180516101038252928201919093012091525481565b34801561069c575f80fd5b5060975460ff1661037e565b3480156106b3575f80fd5b506103e96106c2366004614210565b611e8b565b3480156106d2575f80fd5b506106e66106e1366004614236565b611f05565b60405161038a9190614268565b3480156106fe575f80fd5b506104386101005481565b348015610714575f80fd5b5061010154610438565b348015610729575f80fd5b506104386122bc565b34801561073d575f80fd5b506103b261074c366004613ec4565b5f90815261010560205260409020600201546001600160a01b031690565b348015610775575f80fd5b50610438610784366004613ec4565b6101086020525f908152604090205481565b3480156107a1575f80fd5b506103e96122d3565b3480156107b5575f80fd5b506104386101015481565b3480156107cb575f80fd5b506105b16107da366004614236565b6122f9565b3480156107ea575f80fd5b5061037e6107f9366004613fa6565b6123c4565b348015610809575f80fd5b506103b2610818366004613ec4565b6101096020525f90815260409020546001600160a01b031681565b34801561083e575f80fd5b506106e661084d366004613f3a565b6123ee565b34801561085d575f80fd5b506103e961086c366004614352565b612739565b34801561087c575f80fd5b506104385f81565b34801561088f575f80fd5b5061043860fc5481565b3480156108a4575f80fd5b506103e96108b3366004613ec4565b6127c2565b3480156108c3575f80fd5b50673782dace9d900000610438565b3480156108dd575f80fd5b506103e96108ec366004613ec4565b612815565b3480156108fc575f80fd5b506104386729a2241af62c000081565b348015610917575f80fd5b50610438610926366004613ec4565b6101046020525f908152604090205481565b348015610943575f80fd5b50610438610952366004613ec4565b5f908152610107602052604090205490565b34801561096f575f80fd5b5061098361097e366004613ec4565b6128a0565b60405161038a95949392919061436d565b34801561099f575f80fd5b506104386109ae366004614352565b6101066020525f908152604090205481565b3480156109cb575f80fd5b506103e96109da366004613fa6565b612969565b3480156109ea575f80fd5b506104386109f9366004613f3a565b61298d565b6103e9610a0c366004613e32565b6129b9565b348015610a1c575f80fd5b5060fb54610a2b9061ffff1681565b60405161ffff909116815260200161038a565b348015610a49575f80fd5b50610a52600181565b60405160ff909116815260200161038a565b348015610a6f575f80fd5b50610438610a7e366004613ec4565b5f908152610108602052604090205490565b348015610a9b575f80fd5b5061043860fe5481565b348015610ab0575f80fd5b506103b2610abf3660046143b1565b6129f3565b348015610acf575f80fd5b5061037e610ade366004614352565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b2b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b3a612c5c565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb091906143cc565b905060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2791906143cc565b604051636fc4c27f60e11b8152600160048201526001600160a01b039182169183169063df8984fe90602401602060405180830381865afa158015610c6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9291906143cc565b6001600160a01b031614610cb9576040516303b8ffef60e41b815260040160405180910390fd5b604051639f7053f560e01b81526001600160a01b03821690639f7053f590610ce7908890889060040161440f565b5f604051808303815f87803b158015610cfe575f80fd5b505af1158015610d10573d5f803e3d5ffd5b50505050610d1d83612ca2565b604051633e71376960e21b81523360048201526001600160a01b0382169063f9c4dda490602401602060405180830381865afa158015610d5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d83919061442a565b15610da15760405163707999fb60e11b815260040160405180910390fd5b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e1791906143cc565b60fd54604051636a0b688160e01b81526001600482015260248101919091526001600160a01b039190911690636a0b6881906044016020604051808303815f875af1158015610e68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8c91906143cc565b60fd545f9081526101096020526040902080546001600160a01b0319166001600160a01b038316179055905086610ec35780610f38565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3891906143cc565b9250610f4687878787612cc9565b5050949350505050565b610f58612e57565b610f60612c5c565b60fb5460408051633871d0f160e01b81529051610fde923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd99190614445565b612eb0565b60fc5485908490839081610ff28486614470565b610ffc9190614470565b111561101b5760405163525e3de760e01b815260040160405180910390fd5b5f5b838110156110e4575f6101038b8b8481811061103b5761103b614483565b905060200281019061104d9190614497565b60405161105b9291906144d9565b908152602001604051809103902054905061107581612f3c565b61107e81612f88565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b848181106110b1576110b1614483565b90506020028101906110c39190614497565b836040516110d3939291906144e8565b60405180910390a15060010161101d565b5081156111c15760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116091906143cc565b6001600160a01b0316638d0d8cb66111806729a2241af62c00008561450b565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156111a9575f80fd5b505af11580156111bb573d5f803e3d5ffd5b50505050505b5f5b828110156112b7575f6101038989848181106111e1576111e1614483565b90506020028101906111f39190614497565b6040516112019291906144d9565b908152602001604051809103902054905061121b81612f3c565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b8346689898481811061128457611284614483565b90506020028101906112969190614497565b836040516112a6939291906144e8565b60405180910390a1506001016111c3565b505f5b81811015611381575f6101038787848181106112d8576112d8614483565b90506020028101906112ea9190614497565b6040516112f89291906144d9565b908152602001604051809103902054905061131281612f3c565b61131b81612fc9565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f87878481811061134e5761134e614483565b90506020028101906113609190614497565b83604051611370939291906144e8565b60405180910390a1506001016112ba565b5050505061138f600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b815290516113ec923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb54611465903390600160501b90046001600160a01b0316613158565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c369060200161143c565b60fb5460408051633871d0f160e01b815290516114fe923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa15801561154c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115709190614445565b81111561159057604051639519af4360e01b815260040160405180910390fd5b5f5b818110156116e5575f6101038585848181106115b0576115b0614483565b90506020028101906115c29190614497565b6040516115d09291906144d9565b90815260200160405180910390205490506115ea816131dd565b611607576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b158015611669575f80fd5b505af115801561167b573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf798585848181106116b2576116b2614483565b90506020028101906116c49190614497565b836040516116d4939291906144e8565b60405180910390a150600101611592565b506116ef81613428565b505050565b6060825f03611716576040516334d6e01560e01b815260040160405180910390fd5b5f82611723600186614522565b61172d919061450b565b611738906001614470565b90505f6117458483614470565b905060fd548111611756578061175a565b60fd545b90505f82821161176a575f611774565b6117748383614522565b6001600160401b0381111561178b5761178b614152565b6040519080825280602002602001820160405280156117b4578160200160208202803683370190505b509050825b8281101561181e575f81815261010960205260409020546001600160a01b0316826117e48684614522565b815181106117f4576117f4614483565b6001600160a01b03909216602092830291909101909101528061181681614535565b9150506117b9565b5095945050505050565b5f8281526065602052604090206001015461184281613473565b6116ef838361347d565b5f61010383836040516118609291906144d9565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146118ee5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6118f88282613502565b5050565b60fb5461191a903390600160501b90046001600160a01b0316613568565b6119226135ed565b565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611975573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199991906143cc565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b81526004016119c692919061440f565b5f604051808303815f87803b1580156119dd575f80fd5b505af11580156119ef573d5f803e3d5ffd5b505050506119fc81612ca2565b611a053361363f565b50335f9081526101066020908152604080832054808452610105909252909120600101611a338486836145ca565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d8726977790611a9490879087908790614685565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b81529051611af7923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b806101015f828254611b099190614470565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f29060200161143c565b6101026020525f90815260409020805460018201805460ff9092169291611b689061454d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b949061454d565b8015611bdf5780601f10611bb657610100808354040283529160200191611bdf565b820191905f5260205f20905b815481529060010190602001808311611bc257829003601f168201915b505050505090806002018054611bf49061454d565b80601f0160208091040260200160405190810160405280929190818152602001828054611c209061454d565b8015611c6b5780601f10611c4257610100808354040283529160200191611c6b565b820191905f5260205f20905b815481529060010190602001808311611c4e57829003601f168201915b505050505090806003018054611c809061454d565b80601f0160208091040260200160405190810160405280929190818152602001828054611cac9061454d565b8015611cf75780601f10611cce57610100808354040283529160200191611cf7565b820191905f5260205f20905b815481529060010190602001808311611cda57829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611d2c612e57565b60fb5460408051637a87fa0b60e01b81529051611d81923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df691906143cc565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611e2e575f80fd5b505af1158015611e40573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a81604051611e7691815260200190565b60405180910390a1611e88600160c955565b50565b60fb54611ea9903390600160501b90046001600160a01b0316613568565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a29060200161143c565b6060825f03611f27576040516334d6e01560e01b815260040160405180910390fd5b5f82611f34600186614522565b611f3e919061450b565b90505f611f4b8483614470565b6001600160a01b0387165f9081526101066020526040812054919250819003611f875760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311611fa35782611fa5565b805b92505f848411611fb5575f611fbf565b611fbf8585614522565b6001600160401b03811115611fd657611fd6614152565b60405190808252806020026020018201604052801561200f57816020015b611ffc613cb9565b815260200190600190039081611ff45790505b509050845b848110156122af575f8481526101076020526040812080548390811061203c5761203c614483565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff16600581111561207e5761207e614058565b600581111561208f5761208f614058565b81526020016001820180546120a39061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546120cf9061454d565b801561211a5780601f106120f15761010080835404028352916020019161211a565b820191905f5260205f20905b8154815290600101906020018083116120fd57829003601f168201915b505050505081526020016002820180546121339061454d565b80601f016020809104026020016040519081016040528092919081815260200182805461215f9061454d565b80156121aa5780601f10612181576101008083540402835291602001916121aa565b820191905f5260205f20905b81548152906001019060200180831161218d57829003601f168201915b505050505081526020016003820180546121c39061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546121ef9061454d565b801561223a5780601f106122115761010080835404028352916020019161223a565b820191905f5260205f20905b81548152906001019060200180831161221d57829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152836122808985614522565b8151811061229057612290614483565b60200260200101819052505080806122a790614535565b915050612014565b5098975050505050505050565b5f6101005460ff546122ce9190614522565b905090565b60fb546122f1903390600160501b90046001600160a01b0316613568565b6119226136ad565b5f8183111561231b5760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f90815261010660205260408120549061234b825f908152610107602052604090205490565b905080841161235a578361235c565b805b93505f855b858110156123b9575f8481526101076020526040812080548390811061238957612389614483565b905f5260205f200154905061239d816136ea565b156123b057826123ac816146b0565b9350505b50600101612361565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f03612410576040516334d6e01560e01b815260040160405180910390fd5b5f8261241d600186614522565b612427919061450b565b612432906001614470565b90505f61243f8483614470565b905060fe5481116124505780612454565b60fe545b90505f846001600160401b0381111561246f5761246f614152565b6040519080825280602002602001820160405280156124a857816020015b612495613cb9565b81526020019060019003908161248d5790505b5090505f835b8381101561272d576124bf816131dd565b1561271b575f818152610102602052604090819020815161010081019092528054829060ff1660058111156124f6576124f6614058565b600581111561250757612507614058565b815260200160018201805461251b9061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546125479061454d565b80156125925780601f1061256957610100808354040283529160200191612592565b820191905f5260205f20905b81548152906001019060200180831161257557829003601f168201915b505050505081526020016002820180546125ab9061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546125d79061454d565b80156126225780601f106125f957610100808354040283529160200191612622565b820191905f5260205f20905b81548152906001019060200180831161260557829003601f168201915b5050505050815260200160038201805461263b9061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546126679061454d565b80156126b25780601f10612689576101008083540402835291602001916126b2565b820191905f5260205f20905b81548152906001019060200180831161269557829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152835184908490811061270157612701614483565b6020026020010181905250818061271790614535565b9250505b8061272581614535565b9150506124ae565b50815295945050505050565b5f61274381613473565b61274c82612ca2565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb546127e0903390600160501b90046001600160a01b0316613158565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b49060200161143c565b60fb5460408051637a87fa0b60e01b8152905161286a923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da99060200161143c565b6101056020525f90815260409020805460018201805460ff80841694610100909404169291906128cf9061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546128fb9061454d565b80156129465780601f1061291d57610100808354040283529160200191612946565b820191905f5260205f20905b81548152906001019060200180831161292957829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f8281526065602052604090206001015461298381613473565b6116ef8383613502565b610107602052815f5260405f2081815481106129a7575f80fd5b905f5260205f20015f91509150505481565b6129c1612e57565b6129c9612c5c565b5f6129d33361363f565b90505f806129e388878686613970565b5050600160c9555061138f915050565b5f806129fe3361363f565b5f818152610105602052604090205490915083151561010090910460ff16151503612a3c57604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ab19190614445565b5f8281526101086020526040902054612aca9190614470565b431015612aea5760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b031691508215612be1576001600160a01b0382163115612b6957816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612b52575f80fd5b505af1158015612b64573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bde91906143cc565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff16156119225760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016118e5565b6001600160a01b038116611e885760405163d92e233d60e01b815260040160405180910390fd5b6040518060a00160405280600115158152602001851515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b0384166020808401919091523360409384015260fd548252610105815290829020835181549285015161ffff1990931690151561ff0019161761010092151592909202919091178155908201516001820190612d7f90826146d5565b5060608201516002820180546001600160a01b03199081166001600160a01b039384161790915560809093015160039092018054909316911617905560fd8054335f90815261010660209081526040808320849055928252610108905290812043905581549190612def83614535565b9190505550336001600160a01b03167f55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd482600160fd54612e2f9190614522565b604080516001600160a01b039093168352602083019190915287151590820152606001611a94565b600260c95403612ea95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016118e5565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa158015612efb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f1f919061442a565b6116ef5760405163168dfea160e01b815260040160405180910390fd5b801580612f6a57505f818152610102602052604081205460ff166005811115612f6757612f67614058565b14155b15611e88576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff805484526101049092528220839055805491612fc183614535565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa158015613046573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061306a91906143cc565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ed9190614445565b6130ff90673782dace9d900000614522565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b15801561313c575f80fd5b505af115801561314e573d5f803e3d5ffd5b5050505050505050565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa15801561319c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131c0919061442a565b6118f85760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff16600581111561321257613212614058565b600581111561322357613223614058565b81526020016001820180546132379061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546132639061454d565b80156132ae5780601f10613285576101008083540402835291602001916132ae565b820191905f5260205f20905b81548152906001019060200180831161329157829003601f168201915b505050505081526020016002820180546132c79061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546132f39061454d565b801561333e5780601f106133155761010080835404028352916020019161333e565b820191905f5260205f20905b81548152906001019060200180831161332157829003601f168201915b505050505081526020016003820180546133579061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546133839061454d565b80156133ce5780601f106133a5576101008083540402835291602001916133ce565b820191905f5260205f20905b8154815290600101906020018083116133b157829003601f168201915b50505091835250506004828101546001600160a01b0316602083015260058301546040830152600683015460608301526007909201546080909101529091508151600581111561342057613420614058565b149392505050565b806101015f82825461343a9190614522565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece39060200161143c565b611e888133613a69565b61348782826123c4565b6118f8575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556134be3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61350c82826123c4565b156118f8575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa1580156135ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135d0919061442a565b6118f85760405163c4230ae360e01b815260040160405180910390fd5b6135f5613ac2565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381165f9081526101066020526040812054908190036136795760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff166136a85760405163c11cb1df60e01b815260040160405180910390fd5b919050565b6136b5612c5c565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586136223390565b5f818152610102602052604080822081516101008101909252805483929190829060ff16600581111561371f5761371f614058565b600581111561373057613730614058565b81526020016001820180546137449061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546137709061454d565b80156137bb5780601f10613792576101008083540402835291602001916137bb565b820191905f5260205f20905b81548152906001019060200180831161379e57829003601f168201915b505050505081526020016002820180546137d49061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546138009061454d565b801561384b5780601f106138225761010080835404028352916020019161384b565b820191905f5260205f20905b81548152906001019060200180831161382e57829003601f168201915b505050505081526020016003820180546138649061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546138909061454d565b80156138db5780601f106138b2576101008083540402835291602001916138db565b820191905f5260205f20905b8154815290600101906020018083116138be57829003601f168201915b505050918352505060048201546001600160a01b031660208201526005808301546040830152600683015460608301526007909201546080909101529091508151600581111561392d5761392d614058565b148061394b575060028151600581111561394957613949614058565b145b80613968575060018151600581111561396657613966614058565b145b159392505050565b5f8084861415806139815750838614155b1561399f5760405163e5fe884360e01b815260040160405180910390fd5b8591508115806139b4575060fb5461ffff1682115b156139d2576040516379b348ff60e11b815260040160405180910390fd5b505f8281526101076020526040812054906139ee3382846122f9565b60fb546001600160401b03918216925062010000900416613a0f8483614470565b1115613a2e57604051633e10caad60e21b815260040160405180910390fd5b613a40673782dace9d9000008461450b565b3414613a5f57604051635aaa2d1f60e01b815260040160405180910390fd5b5094509492505050565b613a7382826123c4565b6118f857613a8081613b0b565b613a8b836020613b1d565b604051602001613a9c929190614790565b60408051601f198184030181529082905262461bcd60e51b82526118e591600401614804565b60975460ff166119225760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016118e5565b6060610b2b6001600160a01b03831660145b60605f613b2b83600261450b565b613b36906002614470565b6001600160401b03811115613b4d57613b4d614152565b6040519080825280601f01601f191660200182016040528015613b77576020820181803683370190505b509050600360fc1b815f81518110613b9157613b91614483565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110613bbf57613bbf614483565b60200101906001600160f81b03191690815f1a9053505f613be184600261450b565b613bec906001614470565b90505b6001811115613c63576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613c2057613c20614483565b1a60f81b828281518110613c3657613c36614483565b60200101906001600160f81b03191690815f1a90535060049490941c93613c5c81614816565b9050613bef565b508315613cb25760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016118e5565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f60208284031215613d13575f80fd5b81356001600160e01b031981168114613cb2575f80fd5b8015158114611e88575f80fd5b5f8083601f840112613d47575f80fd5b5081356001600160401b03811115613d5d575f80fd5b602083019150836020828501011115613d74575f80fd5b9250929050565b6001600160a01b0381168114611e88575f80fd5b5f805f8060608587031215613da2575f80fd5b8435613dad81613d2a565b935060208501356001600160401b03811115613dc7575f80fd5b613dd387828801613d37565b9094509250506040850135613de781613d7b565b939692955090935050565b5f8083601f840112613e02575f80fd5b5081356001600160401b03811115613e18575f80fd5b6020830191508360208260051b8501011115613d74575f80fd5b5f805f805f8060608789031215613e47575f80fd5b86356001600160401b0380821115613e5d575f80fd5b613e698a838b01613df2565b90985096506020890135915080821115613e81575f80fd5b613e8d8a838b01613df2565b90965094506040890135915080821115613ea5575f80fd5b50613eb289828a01613df2565b979a9699509497509295939492505050565b5f60208284031215613ed4575f80fd5b5035919050565b5f60208284031215613eeb575f80fd5b813561ffff81168114613cb2575f80fd5b5f8060208385031215613f0d575f80fd5b82356001600160401b03811115613f22575f80fd5b613f2e85828601613df2565b90969095509350505050565b5f8060408385031215613f4b575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b81811015613f9a5783516001600160a01b031683529284019291840191600101613f75565b50909695505050505050565b5f8060408385031215613fb7575f80fd5b823591506020830135613fc981613d7b565b809150509250929050565b5f8060208385031215613fe5575f80fd5b82356001600160401b03811115613ffa575f80fd5b613f2e85828601613d37565b5f805f60408486031215614018575f80fd5b83356001600160401b0381111561402d575f80fd5b61403986828701613d37565b909450925050602084013561404d81613d7b565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b6006811061408857634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b838110156140a657818101518382015260200161408e565b50505f910152565b5f81518084526140c581602086016020860161408c565b601f01601f19169290920160200192915050565b5f6101006140e7838c61406c565b8060208401526140f98184018b6140ae565b9050828103604084015261410d818a6140ae565b9050828103606084015261412181896140ae565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215614176575f80fd5b81356001600160401b038082111561418c575f80fd5b818401915084601f83011261419f575f80fd5b8135818111156141b1576141b1614152565b604051601f8201601f19908116603f011681019083821181831017156141d9576141d9614152565b816040528281528760208487010111156141f1575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f60208284031215614220575f80fd5b81356001600160401b0381168114613cb2575f80fd5b5f805f60608486031215614248575f80fd5b833561425381613d7b565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b8381101561434457603f1989840301855281516101006142ae85835161406c565b88820151818a8701526142c3828701826140ae565b91505087820151858203898701526142db82826140ae565b915050606080830151868303828801526142f583826140ae565b92505050608080830151614313828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e0918201519190940152938601939086019060010161428d565b509098975050505050505050565b5f60208284031215614362575f80fd5b8135613cb281613d7b565b8515158152841515602082015260a060408201525f61438f60a08301866140ae565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f602082840312156143c1575f80fd5b8135613cb281613d2a565b5f602082840312156143dc575f80fd5b8151613cb281613d7b565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6144226020830184866143e7565b949350505050565b5f6020828403121561443a575f80fd5b8151613cb281613d2a565b5f60208284031215614455575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2b57610b2b61445c565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e198436030181126144ac575f80fd5b8301803591506001600160401b038211156144c5575f80fd5b602001915036819003821315613d74575f80fd5b818382375f9101908152919050565b604081525f6144fb6040830185876143e7565b9050826020830152949350505050565b8082028115828204841417610b2b57610b2b61445c565b81810381811115610b2b57610b2b61445c565b5f600182016145465761454661445c565b5060010190565b600181811c9082168061456157607f821691505b60208210810361457f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156116ef575f81815260208120601f850160051c810160208610156145ab5750805b601f850160051c820191505b8181101561138f578281556001016145b7565b6001600160401b038311156145e1576145e1614152565b6145f5836145ef835461454d565b83614585565b5f601f841160018114614626575f851561460f5750838201355b5f19600387901b1c1916600186901b17835561467e565b5f83815260209020601f19861690835b828110156146565786850135825560209485019460019092019101614636565b5086821015614672575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f6146986040830185876143e7565b905060018060a01b0383166020830152949350505050565b5f6001600160401b038083168181036146cb576146cb61445c565b6001019392505050565b81516001600160401b038111156146ee576146ee614152565b614702816146fc845461454d565b84614585565b602080601f831160018114614735575f841561471e5750858301515b5f19600386901b1c1916600185901b17855561138f565b5f85815260208120601f198616915b8281101561476357888601518255948401946001909101908401614744565b508582101561478057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516147c781601785016020880161408c565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516147f881602884016020880161408c565b01602801949350505050565b602081525f613cb260208301846140ae565b5f816148245761482461445c565b505f19019056fea2646970667358221220ebed37ccddf2fca28f32cd052d98b350ef03dbc2b793f23e7c497a6e45c8a91364736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // PermissionlessNodeRegistryABI is the input ABI used to generate the binding from. diff --git a/testing/contracts/SDCollateral.go b/testing/contracts/SDCollateral.go new file mode 100644 index 000000000..07d8d5a17 --- /dev/null +++ b/testing/contracts/SDCollateral.go @@ -0,0 +1,2329 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contracts + +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 +) + +// SDCollateralMetaData contains all meta data concerning the SDCollateral contract. +var SDCollateralMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotWithdrawVault\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"operatorSDCollateral\",\"type\":\"uint256\"}],\"name\":\"InsufficientSDToWithdraw\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoStateChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SDTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sdAmount\",\"type\":\"uint256\"}],\"name\":\"SDDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"auction\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sdSlashed\",\"type\":\"uint256\"}],\"name\":\"SDSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sdAmount\",\"type\":\"uint256\"}],\"name\":\"SDWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"UpdatedPoolIdForOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawThreshold\",\"type\":\"uint256\"}],\"name\":\"UpdatedPoolThreshold\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ethAmount\",\"type\":\"uint256\"}],\"name\":\"convertETHToSD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_sdAmount\",\"type\":\"uint256\"}],\"name\":\"convertSDToETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_sdAmount\",\"type\":\"uint256\"}],\"name\":\"depositSDAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_numValidator\",\"type\":\"uint256\"}],\"name\":\"getMinimumSDToBond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_minSDToBond\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"getOperatorWithdrawThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"operatorWithdrawThreshold\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_numValidator\",\"type\":\"uint256\"}],\"name\":\"getRemainingSDToBond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"getRewardEligibleSD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardEligibleSD\",\"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\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_numValidator\",\"type\":\"uint256\"}],\"name\":\"hasEnoughSDCollateral\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":[],\"name\":\"maxApproveSD\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorSDBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"poolThresholdbyPoolId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawThreshold\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"units\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"}],\"name\":\"slashValidatorSD\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_minThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_withdrawThreshold\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_units\",\"type\":\"string\"}],\"name\":\"updatePoolThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_requestedSD\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b50604051620026ad380380620026ad8339810160408190526200003391620003d6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001cb565b6200010e82620001cb565b62000118620001f6565b6200012262000252565b60c980546001600160a01b0319166001600160a01b038416179055620001495f84620002b6565b6040516001600160a01b038316907fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a28015620001c2575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050506200040c565b6001600160a01b038116620001f35760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002505760405162461bcd60e51b815260206004820152602b60248201525f805160206200268d83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002ac5760405162461bcd60e51b815260206004820152602b60248201525f805160206200268d83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200025062000359565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff1662000355575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620003143390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff16620003b35760405162461bcd60e51b815260206004820152602b60248201525f805160206200268d83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6001609755565b80516001600160a01b0381168114620003d1575f80fd5b919050565b5f8060408385031215620003e8575f80fd5b620003f383620003ba565b91506200040360208401620003ba565b90509250929050565b612273806200041a5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c80638a9b3738116100bf578063d547741f11610079578063d547741f146102d4578063dfdafccb146102e7578063e0412f0e146102fa578063e614e17c1461030d578063f9af40b814610320578063fcb7e0321461033f575f80fd5b80638a9b37381461025e57806391d14854146102815780639871a30a146102945780639ee804cb146102a7578063a217fddf146102ba578063b178e38e146102c1575f80fd5b806336568abe1161011057806336568abe146101df578063379b727e146101f25780633909afd3146102055780633e04cd3514610218578063490ffa35146102205780634c538f581461024b575f80fd5b806301ffc9a71461014c578063248a9ca3146101745780632e1a7d4d146101a45780632f2ff15d146101b9578063351691ab146101cc575b5f80fd5b61015f61015a366004611acc565b610352565b60405190151581526020015b60405180910390f35b610196610182366004611af3565b5f9081526065602052604090206001015490565b60405190815260200161016b565b6101b76101b2366004611af3565b610388565b005b6101b76101c7366004611b1e565b610542565b6101966101da366004611b5a565b61056b565b6101b76101ed366004611b1e565b6105b5565b610196610200366004611b98565b610633565b610196610213366004611bc2565b61066d565b6101b7610709565b60c954610233906001600160a01b031681565b6040516001600160a01b03909116815260200161016b565b6101b7610259366004611bdd565b61087c565b61027161026c366004611c00565b6108e4565b60405161016b9493929190611c68565b61015f61028f366004611b1e565b610994565b6101966102a2366004611bc2565b6109be565b6101b76102b5366004611bc2565b610a06565b6101965f81565b61015f6102cf366004611b5a565b610a92565b6101b76102e2366004611b1e565b610aa7565b6101966102f5366004611af3565b610acb565b6101b7610308366004611d02565b610c2a565b61019661031b366004611af3565b610d13565b61019661032e366004611bc2565b60cb6020525f908152604090205481565b6101b761034d366004611af3565b610e69565b5f6001600160e01b03198216637965db0b60e01b148061038257506301ffc9a760e01b6001600160e01b03198316145b92915050565b335f81815260cb6020526040902054826103a1836109be565b6103ab9190611dbe565b8110156103d35760405163f669f60360e01b8152600481018290526024015b60405180910390fd5b6001600160a01b0382165f90815260cb6020526040812080548592906103fa908490611dd1565b909155505060c9546040805163381a7dc560e21b815290516001600160a01b039092169163e069f714916004808201926020929091908290030181865afa158015610447573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046b9190611df4565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201869052919091169063a9059cbb906044016020604051808303815f875af11580156104b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104dd9190611e1e565b6104fa5760405163d3544e3f60e01b815260040160405180910390fd5b816001600160a01b03167f48c1f846fa4bc05385324ee60316f9c6778ed2b5f205a6319678a609b87676078460405161053591815260200190565b60405180910390a2505050565b5f8281526065602052604090206001015461055c81610fd4565b6105668383610fe1565b505050565b6001600160a01b0383165f90815260cb60205260408120548161058e8585610633565b9050808210156105a7576105a28282611dd1565b6105a9565b5f5b925050505b9392505050565b6001600160a01b03811633146106255760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016103ca565b61062f8282611066565b5050565b5f61063d836110cc565b60ff83165f90815260ca60205260409020805461065990610d13565b91506106658383611e37565b949350505050565b5f805f6106798461110c565b9250509150610687826110cc565b60ff82165f90815260ca6020526040812080549091906106a690610d13565b6106b09084611e37565b90505f6106c08360010154610d13565b6106ca9085611e37565b6001600160a01b0388165f90815260cb60205260409020549091508281106106fb576106f681836113cf565b6106fd565b5f5b98975050505050505050565b60c9546107209033906001600160a01b03166113e4565b60c95460408051630db055fd60e21b815290515f926001600160a01b0316916336c157f49160048083019260209291908290030181865afa158015610767573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078b9190611df4565b905061079681611469565b60c95f9054906101000a90046001600160a01b03166001600160a01b031663e069f7146040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080a9190611df4565b60405163095ea7b360e01b81526001600160a01b0383811660048301525f196024830152919091169063095ea7b3906044016020604051808303815f875af1158015610858573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062f9190611e1e565b610884611490565b60c9545f906108a1908390859033906001600160a01b03166114e9565b90506108ac826110cc565b60ff82165f90815260ca6020526040812080549091906108cb90610d13565b90506108d783826116e1565b50505061062f6001609755565b60ca6020525f908152604090208054600182015460028301546003840180549394929391929161091390611e4e565b80601f016020809104026020016040519081016040528092919081815260200182805461093f90611e4e565b801561098a5780601f106109615761010080835404028352916020019161098a565b820191905f5260205f20905b81548152906001019060200180831161096d57829003601f168201915b5050505050905084565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f805f6109ca8461110c565b92505091506109d8826110cc565b60ff82165f90815260ca6020526040902060028101546109fd9061031b908490611e37565b95945050505050565b5f610a1081610fd4565b610a1982611469565b60c9546001600160a01b0390811690831603610a485760405163a28a88c160e01b815260040160405180910390fd5b60c980546001600160a01b0319166001600160a01b0384169081179091556040517fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a25050565b5f610a9e84848461056b565b15949350505050565b5f82815260656020526040902060010154610ac181610fd4565b6105668383611066565b5f8060c95f9054906101000a90046001600160a01b03166001600160a01b031663defd024d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b419190611df4565b6001600160a01b031663a6870e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba09190611e86565b905060c95f9054906101000a90046001600160a01b03166001600160a01b031663f0141d846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c169190611e86565b610c208285611e37565b6105ae9190611e9d565b60c954610c419033906001600160a01b03166113e4565b81841180610c4e57508284115b15610c6c576040516375075b2960e11b815260040160405180910390fd5b6040805160808101825285815260208082018681528284018681526060840186815260ff8b165f90815260ca9094529490922083518155905160018201559051600282015591519091906003820190610cc59082611f09565b50506040805160ff88168152602081018790529081018490527f18757dd1fbfe2ad823e1bd4de3f8a2ee76b49f92f6aa34cc7cbf717cdf4d1758915060600160405180910390a15050505050565b5f8060c95f9054906101000a90046001600160a01b03166001600160a01b031663defd024d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d899190611df4565b6001600160a01b031663a6870e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de89190611e86565b90508060c95f9054906101000a90046001600160a01b03166001600160a01b031663f0141d846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5f9190611e86565b610c209085611e37565b335f81815260cb602052604081208054849290610e87908490611dbe565b909155505060c9546040805163381a7dc560e21b815290516001600160a01b039092169163e069f714916004808201926020929091908290030181865afa158015610ed4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef89190611df4565b6040516323b872dd60e01b81526001600160a01b0383811660048301523060248301526044820185905291909116906323b872dd906064016020604051808303815f875af1158015610f4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f709190611e1e565b610f8d5760405163d3544e3f60e01b815260040160405180910390fd5b806001600160a01b03167f112973aa2e3b182a34447572d830c1e97afc414558a08f33554be8e54522425983604051610fc891815260200190565b60405180910390a25050565b610fde81336118cb565b50565b610feb8282610994565b61062f575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556110223390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6110708282610994565b1561062f575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60ff81165f90815260ca6020526040902060030180546110eb90611e4e565b90505f03610fde5760405163015f4fdd60e31b815260040160405180910390fd5b5f805f8060c95f9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611160573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111849190611df4565b604051634721e29d60e11b81526001600160a01b03878116600483015291925090821690638e43c53a90602401602060405180830381865afa1580156111cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f09190611fc5565b60405163133a0ab960e31b815260ff821660048201529094505f906001600160a01b038316906399d055c890602401602060405180830381865afa15801561123a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061125e9190611df4565b604051636564598360e11b81526001600160a01b0388811660048301529192509082169063cac8b30690602401602060405180830381865afa1580156112a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ca9190611e86565b9350816001600160a01b0316635d713ec386885f856001600160a01b031663c34ade5c8a6040518263ffffffff1660e01b815260040161130c91815260200190565b602060405180830381865afa158015611327573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134b9190611e86565b6040516001600160e01b031960e087901b16815260ff90941660048501526001600160a01b03909216602484015260448301526064820152608401602060405180830381865afa1580156113a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c59190611e86565b9496939550505050565b5f8183106113dd57816105ae565b5090919050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015611428573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144c9190611e1e565b61062f5760405163c4230ae360e01b815260040160405180910390fd5b6001600160a01b038116610fde5760405163d92e233d60e01b815260040160405180910390fd5b6002609754036114e25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103ca565b6002609755565b5f80826001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611527573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061154b9190611df4565b60405163133a0ab960e31b815260ff881660048201526001600160a01b0391909116906399d055c890602401602060405180830381865afa158015611592573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b69190611df4565b90505f80826001600160a01b0316635a1239c1886040518263ffffffff1660e01b81526004016115e891815260200190565b5f60405180830381865afa158015611602573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611629919081019061203a565b50509550955050505050816001600160a01b0316866001600160a01b03161461166557604051636aa52cb560e01b815260040160405180910390fd5b604051636450073d60e11b8152600481018290525f906001600160a01b0385169063c8a00e7a906024015f60405180830381865afa1580156116a9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116d091908101906120f9565b9d9c50505050505050505050505050565b6001600160a01b0382165f90815260cb60205260408120549061170483836113cf565b9050805f036117135750505050565b6001600160a01b0384165f90815260cb60205260408120805483929061173a908490611dd1565b909155505060c95460408051630db055fd60e21b815290516001600160a01b03909216916336c157f4916004808201926020929091908290030181865afa158015611787573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ab9190611df4565b6001600160a01b0316637a78e12d826040518263ffffffff1660e01b81526004016117d891815260200190565b5f604051808303815f87803b1580156117ef575f80fd5b505af1158015611801573d5f803e3d5ffd5b5050505060c95f9054906101000a90046001600160a01b03166001600160a01b03166336c157f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611855573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118799190611df4565b6001600160a01b0316846001600160a01b03167fe4a6f5b1a676a94b2af7a506093c172e23d46a5bea6f2d783d4d32c9047800f4836040516118bd91815260200190565b60405180910390a350505050565b6118d58282610994565b61062f576118e281611924565b6118ed836020611936565b6040516020016118fe92919061218e565b60408051601f198184030181529082905262461bcd60e51b82526103ca91600401612202565b60606103826001600160a01b03831660145b60605f611944836002611e37565b61194f906002611dbe565b67ffffffffffffffff81111561196757611967611c96565b6040519080825280601f01601f191660200182016040528015611991576020820181803683370190505b509050600360fc1b815f815181106119ab576119ab612214565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106119d9576119d9612214565b60200101906001600160f81b03191690815f1a9053505f6119fb846002611e37565b611a06906001611dbe565b90505b6001811115611a7d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a3a57611a3a612214565b1a60f81b828281518110611a5057611a50612214565b60200101906001600160f81b03191690815f1a90535060049490941c93611a7681612228565b9050611a09565b5083156105ae5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016103ca565b5f60208284031215611adc575f80fd5b81356001600160e01b0319811681146105ae575f80fd5b5f60208284031215611b03575f80fd5b5035919050565b6001600160a01b0381168114610fde575f80fd5b5f8060408385031215611b2f575f80fd5b823591506020830135611b4181611b0a565b809150509250929050565b60ff81168114610fde575f80fd5b5f805f60608486031215611b6c575f80fd5b8335611b7781611b0a565b92506020840135611b8781611b4c565b929592945050506040919091013590565b5f8060408385031215611ba9575f80fd5b8235611bb481611b4c565b946020939093013593505050565b5f60208284031215611bd2575f80fd5b81356105ae81611b0a565b5f8060408385031215611bee575f80fd5b823591506020830135611b4181611b4c565b5f60208284031215611c10575f80fd5b81356105ae81611b4c565b5f5b83811015611c35578181015183820152602001611c1d565b50505f910152565b5f8151808452611c54816020860160208601611c1b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f611c8c6080830184611c3d565b9695505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cd357611cd3611c96565b604052919050565b5f67ffffffffffffffff821115611cf457611cf4611c96565b50601f01601f191660200190565b5f805f805f60a08688031215611d16575f80fd5b8535611d2181611b4c565b9450602086013593506040860135925060608601359150608086013567ffffffffffffffff811115611d51575f80fd5b8601601f81018813611d61575f80fd5b8035611d74611d6f82611cdb565b611caa565b818152896020838501011115611d88575f80fd5b816020840160208301375f602083830101528093505050509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561038257610382611daa565b8181038181111561038257610382611daa565b8051611def81611b0a565b919050565b5f60208284031215611e04575f80fd5b81516105ae81611b0a565b80518015158114611def575f80fd5b5f60208284031215611e2e575f80fd5b6105ae82611e0f565b808202811582820484141761038257610382611daa565b600181811c90821680611e6257607f821691505b602082108103611e8057634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215611e96575f80fd5b5051919050565b5f82611eb757634e487b7160e01b5f52601260045260245ffd5b500490565b601f821115610566575f81815260208120601f850160051c81016020861015611ee25750805b601f850160051c820191505b81811015611f0157828155600101611eee565b505050505050565b815167ffffffffffffffff811115611f2357611f23611c96565b611f3781611f318454611e4e565b84611ebc565b602080601f831160018114611f6a575f8415611f535750858301515b5f19600386901b1c1916600185901b178555611f01565b5f85815260208120601f198616915b82811015611f9857888601518255948401946001909101908401611f79565b5085821015611fb557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215611fd5575f80fd5b81516105ae81611b4c565b805160068110611def575f80fd5b5f611ffb611d6f84611cdb565b905082815283838301111561200e575f80fd5b6105ae836020830184611c1b565b5f82601f83011261202b575f80fd5b6105ae83835160208501611fee565b5f805f805f805f80610100898b031215612052575f80fd5b61205b89611fe0565b9750602089015167ffffffffffffffff80821115612077575f80fd5b6120838c838d0161201c565b985060408b0151915080821115612098575f80fd5b6120a48c838d0161201c565b975060608b01519150808211156120b9575f80fd5b506120c68b828c0161201c565b9550506120d560808a01611de4565b935060a0890151925060c0890151915060e089015190509295985092959890939650565b5f805f805f60a0868803121561210d575f80fd5b61211686611e0f565b945061212460208701611e0f565b9350604086015167ffffffffffffffff81111561213f575f80fd5b8601601f8101881361214f575f80fd5b61215e88825160208401611fee565b935050606086015161216f81611b0a565b608087015190925061218081611b0a565b809150509295509295909350565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516121c5816017850160208801611c1b565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516121f6816028840160208801611c1b565b01602801949350505050565b602081525f6105ae6020830184611c3d565b634e487b7160e01b5f52603260045260245ffd5b5f8161223657612236611daa565b505f19019056fea2646970667358221220bf0133cdf812781b4e70a5e2f776143fe08173680c3ee60ad06f55bf9178f6e064736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", +} + +// SDCollateralABI is the input ABI used to generate the binding from. +// Deprecated: Use SDCollateralMetaData.ABI instead. +var SDCollateralABI = SDCollateralMetaData.ABI + +// SDCollateralBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use SDCollateralMetaData.Bin instead. +var SDCollateralBin = SDCollateralMetaData.Bin + +// DeploySDCollateral deploys a new Ethereum contract, binding an instance of SDCollateral to it. +func DeploySDCollateral(auth *bind.TransactOpts, backend bind.ContractBackend, _admin common.Address, _staderConfig common.Address) (common.Address, *types.Transaction, *SDCollateral, error) { + parsed, err := SDCollateralMetaData.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(SDCollateralBin), backend, _admin, _staderConfig) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SDCollateral{SDCollateralCaller: SDCollateralCaller{contract: contract}, SDCollateralTransactor: SDCollateralTransactor{contract: contract}, SDCollateralFilterer: SDCollateralFilterer{contract: contract}}, nil +} + +// SDCollateral is an auto generated Go binding around an Ethereum contract. +type SDCollateral struct { + SDCollateralCaller // Read-only binding to the contract + SDCollateralTransactor // Write-only binding to the contract + SDCollateralFilterer // Log filterer for contract events +} + +// SDCollateralCaller is an auto generated read-only Go binding around an Ethereum contract. +type SDCollateralCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SDCollateralTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SDCollateralTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SDCollateralFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SDCollateralFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SDCollateralSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SDCollateralSession struct { + Contract *SDCollateral // 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 +} + +// SDCollateralCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SDCollateralCallerSession struct { + Contract *SDCollateralCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SDCollateralTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SDCollateralTransactorSession struct { + Contract *SDCollateralTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SDCollateralRaw is an auto generated low-level Go binding around an Ethereum contract. +type SDCollateralRaw struct { + Contract *SDCollateral // Generic contract binding to access the raw methods on +} + +// SDCollateralCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SDCollateralCallerRaw struct { + Contract *SDCollateralCaller // Generic read-only contract binding to access the raw methods on +} + +// SDCollateralTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SDCollateralTransactorRaw struct { + Contract *SDCollateralTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSDCollateral creates a new instance of SDCollateral, bound to a specific deployed contract. +func NewSDCollateral(address common.Address, backend bind.ContractBackend) (*SDCollateral, error) { + contract, err := bindSDCollateral(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &SDCollateral{SDCollateralCaller: SDCollateralCaller{contract: contract}, SDCollateralTransactor: SDCollateralTransactor{contract: contract}, SDCollateralFilterer: SDCollateralFilterer{contract: contract}}, nil +} + +// NewSDCollateralCaller creates a new read-only instance of SDCollateral, bound to a specific deployed contract. +func NewSDCollateralCaller(address common.Address, caller bind.ContractCaller) (*SDCollateralCaller, error) { + contract, err := bindSDCollateral(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SDCollateralCaller{contract: contract}, nil +} + +// NewSDCollateralTransactor creates a new write-only instance of SDCollateral, bound to a specific deployed contract. +func NewSDCollateralTransactor(address common.Address, transactor bind.ContractTransactor) (*SDCollateralTransactor, error) { + contract, err := bindSDCollateral(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SDCollateralTransactor{contract: contract}, nil +} + +// NewSDCollateralFilterer creates a new log filterer instance of SDCollateral, bound to a specific deployed contract. +func NewSDCollateralFilterer(address common.Address, filterer bind.ContractFilterer) (*SDCollateralFilterer, error) { + contract, err := bindSDCollateral(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SDCollateralFilterer{contract: contract}, nil +} + +// bindSDCollateral binds a generic wrapper to an already deployed contract. +func bindSDCollateral(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := SDCollateralMetaData.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 (_SDCollateral *SDCollateralRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SDCollateral.Contract.SDCollateralCaller.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 (_SDCollateral *SDCollateralRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SDCollateral.Contract.SDCollateralTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SDCollateral *SDCollateralRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SDCollateral.Contract.SDCollateralTransactor.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 (_SDCollateral *SDCollateralCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SDCollateral.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 (_SDCollateral *SDCollateralTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SDCollateral.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SDCollateral *SDCollateralTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SDCollateral.Contract.contract.Transact(opts, method, params...) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_SDCollateral *SDCollateralCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SDCollateral.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_SDCollateral *SDCollateralSession) DEFAULTADMINROLE() ([32]byte, error) { + return _SDCollateral.Contract.DEFAULTADMINROLE(&_SDCollateral.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_SDCollateral *SDCollateralCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _SDCollateral.Contract.DEFAULTADMINROLE(&_SDCollateral.CallOpts) +} + +// ConvertETHToSD is a free data retrieval call binding the contract method 0xe614e17c. +// +// Solidity: function convertETHToSD(uint256 _ethAmount) view returns(uint256) +func (_SDCollateral *SDCollateralCaller) ConvertETHToSD(opts *bind.CallOpts, _ethAmount *big.Int) (*big.Int, error) { + var out []interface{} + err := _SDCollateral.contract.Call(opts, &out, "convertETHToSD", _ethAmount) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ConvertETHToSD is a free data retrieval call binding the contract method 0xe614e17c. +// +// Solidity: function convertETHToSD(uint256 _ethAmount) view returns(uint256) +func (_SDCollateral *SDCollateralSession) ConvertETHToSD(_ethAmount *big.Int) (*big.Int, error) { + return _SDCollateral.Contract.ConvertETHToSD(&_SDCollateral.CallOpts, _ethAmount) +} + +// ConvertETHToSD is a free data retrieval call binding the contract method 0xe614e17c. +// +// Solidity: function convertETHToSD(uint256 _ethAmount) view returns(uint256) +func (_SDCollateral *SDCollateralCallerSession) ConvertETHToSD(_ethAmount *big.Int) (*big.Int, error) { + return _SDCollateral.Contract.ConvertETHToSD(&_SDCollateral.CallOpts, _ethAmount) +} + +// ConvertSDToETH is a free data retrieval call binding the contract method 0xdfdafccb. +// +// Solidity: function convertSDToETH(uint256 _sdAmount) view returns(uint256) +func (_SDCollateral *SDCollateralCaller) ConvertSDToETH(opts *bind.CallOpts, _sdAmount *big.Int) (*big.Int, error) { + var out []interface{} + err := _SDCollateral.contract.Call(opts, &out, "convertSDToETH", _sdAmount) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ConvertSDToETH is a free data retrieval call binding the contract method 0xdfdafccb. +// +// Solidity: function convertSDToETH(uint256 _sdAmount) view returns(uint256) +func (_SDCollateral *SDCollateralSession) ConvertSDToETH(_sdAmount *big.Int) (*big.Int, error) { + return _SDCollateral.Contract.ConvertSDToETH(&_SDCollateral.CallOpts, _sdAmount) +} + +// ConvertSDToETH is a free data retrieval call binding the contract method 0xdfdafccb. +// +// Solidity: function convertSDToETH(uint256 _sdAmount) view returns(uint256) +func (_SDCollateral *SDCollateralCallerSession) ConvertSDToETH(_sdAmount *big.Int) (*big.Int, error) { + return _SDCollateral.Contract.ConvertSDToETH(&_SDCollateral.CallOpts, _sdAmount) +} + +// GetMinimumSDToBond is a free data retrieval call binding the contract method 0x379b727e. +// +// Solidity: function getMinimumSDToBond(uint8 _poolId, uint256 _numValidator) view returns(uint256 _minSDToBond) +func (_SDCollateral *SDCollateralCaller) GetMinimumSDToBond(opts *bind.CallOpts, _poolId uint8, _numValidator *big.Int) (*big.Int, error) { + var out []interface{} + err := _SDCollateral.contract.Call(opts, &out, "getMinimumSDToBond", _poolId, _numValidator) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetMinimumSDToBond is a free data retrieval call binding the contract method 0x379b727e. +// +// Solidity: function getMinimumSDToBond(uint8 _poolId, uint256 _numValidator) view returns(uint256 _minSDToBond) +func (_SDCollateral *SDCollateralSession) GetMinimumSDToBond(_poolId uint8, _numValidator *big.Int) (*big.Int, error) { + return _SDCollateral.Contract.GetMinimumSDToBond(&_SDCollateral.CallOpts, _poolId, _numValidator) +} + +// GetMinimumSDToBond is a free data retrieval call binding the contract method 0x379b727e. +// +// Solidity: function getMinimumSDToBond(uint8 _poolId, uint256 _numValidator) view returns(uint256 _minSDToBond) +func (_SDCollateral *SDCollateralCallerSession) GetMinimumSDToBond(_poolId uint8, _numValidator *big.Int) (*big.Int, error) { + return _SDCollateral.Contract.GetMinimumSDToBond(&_SDCollateral.CallOpts, _poolId, _numValidator) +} + +// GetOperatorWithdrawThreshold is a free data retrieval call binding the contract method 0x9871a30a. +// +// Solidity: function getOperatorWithdrawThreshold(address _operator) view returns(uint256 operatorWithdrawThreshold) +func (_SDCollateral *SDCollateralCaller) GetOperatorWithdrawThreshold(opts *bind.CallOpts, _operator common.Address) (*big.Int, error) { + var out []interface{} + err := _SDCollateral.contract.Call(opts, &out, "getOperatorWithdrawThreshold", _operator) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetOperatorWithdrawThreshold is a free data retrieval call binding the contract method 0x9871a30a. +// +// Solidity: function getOperatorWithdrawThreshold(address _operator) view returns(uint256 operatorWithdrawThreshold) +func (_SDCollateral *SDCollateralSession) GetOperatorWithdrawThreshold(_operator common.Address) (*big.Int, error) { + return _SDCollateral.Contract.GetOperatorWithdrawThreshold(&_SDCollateral.CallOpts, _operator) +} + +// GetOperatorWithdrawThreshold is a free data retrieval call binding the contract method 0x9871a30a. +// +// Solidity: function getOperatorWithdrawThreshold(address _operator) view returns(uint256 operatorWithdrawThreshold) +func (_SDCollateral *SDCollateralCallerSession) GetOperatorWithdrawThreshold(_operator common.Address) (*big.Int, error) { + return _SDCollateral.Contract.GetOperatorWithdrawThreshold(&_SDCollateral.CallOpts, _operator) +} + +// GetRemainingSDToBond is a free data retrieval call binding the contract method 0x351691ab. +// +// Solidity: function getRemainingSDToBond(address _operator, uint8 _poolId, uint256 _numValidator) view returns(uint256) +func (_SDCollateral *SDCollateralCaller) GetRemainingSDToBond(opts *bind.CallOpts, _operator common.Address, _poolId uint8, _numValidator *big.Int) (*big.Int, error) { + var out []interface{} + err := _SDCollateral.contract.Call(opts, &out, "getRemainingSDToBond", _operator, _poolId, _numValidator) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetRemainingSDToBond is a free data retrieval call binding the contract method 0x351691ab. +// +// Solidity: function getRemainingSDToBond(address _operator, uint8 _poolId, uint256 _numValidator) view returns(uint256) +func (_SDCollateral *SDCollateralSession) GetRemainingSDToBond(_operator common.Address, _poolId uint8, _numValidator *big.Int) (*big.Int, error) { + return _SDCollateral.Contract.GetRemainingSDToBond(&_SDCollateral.CallOpts, _operator, _poolId, _numValidator) +} + +// GetRemainingSDToBond is a free data retrieval call binding the contract method 0x351691ab. +// +// Solidity: function getRemainingSDToBond(address _operator, uint8 _poolId, uint256 _numValidator) view returns(uint256) +func (_SDCollateral *SDCollateralCallerSession) GetRemainingSDToBond(_operator common.Address, _poolId uint8, _numValidator *big.Int) (*big.Int, error) { + return _SDCollateral.Contract.GetRemainingSDToBond(&_SDCollateral.CallOpts, _operator, _poolId, _numValidator) +} + +// GetRewardEligibleSD is a free data retrieval call binding the contract method 0x3909afd3. +// +// Solidity: function getRewardEligibleSD(address _operator) view returns(uint256 _rewardEligibleSD) +func (_SDCollateral *SDCollateralCaller) GetRewardEligibleSD(opts *bind.CallOpts, _operator common.Address) (*big.Int, error) { + var out []interface{} + err := _SDCollateral.contract.Call(opts, &out, "getRewardEligibleSD", _operator) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetRewardEligibleSD is a free data retrieval call binding the contract method 0x3909afd3. +// +// Solidity: function getRewardEligibleSD(address _operator) view returns(uint256 _rewardEligibleSD) +func (_SDCollateral *SDCollateralSession) GetRewardEligibleSD(_operator common.Address) (*big.Int, error) { + return _SDCollateral.Contract.GetRewardEligibleSD(&_SDCollateral.CallOpts, _operator) +} + +// GetRewardEligibleSD is a free data retrieval call binding the contract method 0x3909afd3. +// +// Solidity: function getRewardEligibleSD(address _operator) view returns(uint256 _rewardEligibleSD) +func (_SDCollateral *SDCollateralCallerSession) GetRewardEligibleSD(_operator common.Address) (*big.Int, error) { + return _SDCollateral.Contract.GetRewardEligibleSD(&_SDCollateral.CallOpts, _operator) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_SDCollateral *SDCollateralCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _SDCollateral.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_SDCollateral *SDCollateralSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _SDCollateral.Contract.GetRoleAdmin(&_SDCollateral.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_SDCollateral *SDCollateralCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _SDCollateral.Contract.GetRoleAdmin(&_SDCollateral.CallOpts, role) +} + +// HasEnoughSDCollateral is a free data retrieval call binding the contract method 0xb178e38e. +// +// Solidity: function hasEnoughSDCollateral(address _operator, uint8 _poolId, uint256 _numValidator) view returns(bool) +func (_SDCollateral *SDCollateralCaller) HasEnoughSDCollateral(opts *bind.CallOpts, _operator common.Address, _poolId uint8, _numValidator *big.Int) (bool, error) { + var out []interface{} + err := _SDCollateral.contract.Call(opts, &out, "hasEnoughSDCollateral", _operator, _poolId, _numValidator) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasEnoughSDCollateral is a free data retrieval call binding the contract method 0xb178e38e. +// +// Solidity: function hasEnoughSDCollateral(address _operator, uint8 _poolId, uint256 _numValidator) view returns(bool) +func (_SDCollateral *SDCollateralSession) HasEnoughSDCollateral(_operator common.Address, _poolId uint8, _numValidator *big.Int) (bool, error) { + return _SDCollateral.Contract.HasEnoughSDCollateral(&_SDCollateral.CallOpts, _operator, _poolId, _numValidator) +} + +// HasEnoughSDCollateral is a free data retrieval call binding the contract method 0xb178e38e. +// +// Solidity: function hasEnoughSDCollateral(address _operator, uint8 _poolId, uint256 _numValidator) view returns(bool) +func (_SDCollateral *SDCollateralCallerSession) HasEnoughSDCollateral(_operator common.Address, _poolId uint8, _numValidator *big.Int) (bool, error) { + return _SDCollateral.Contract.HasEnoughSDCollateral(&_SDCollateral.CallOpts, _operator, _poolId, _numValidator) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_SDCollateral *SDCollateralCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _SDCollateral.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_SDCollateral *SDCollateralSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _SDCollateral.Contract.HasRole(&_SDCollateral.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_SDCollateral *SDCollateralCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _SDCollateral.Contract.HasRole(&_SDCollateral.CallOpts, role, account) +} + +// OperatorSDBalance is a free data retrieval call binding the contract method 0xf9af40b8. +// +// Solidity: function operatorSDBalance(address ) view returns(uint256) +func (_SDCollateral *SDCollateralCaller) OperatorSDBalance(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _SDCollateral.contract.Call(opts, &out, "operatorSDBalance", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// OperatorSDBalance is a free data retrieval call binding the contract method 0xf9af40b8. +// +// Solidity: function operatorSDBalance(address ) view returns(uint256) +func (_SDCollateral *SDCollateralSession) OperatorSDBalance(arg0 common.Address) (*big.Int, error) { + return _SDCollateral.Contract.OperatorSDBalance(&_SDCollateral.CallOpts, arg0) +} + +// OperatorSDBalance is a free data retrieval call binding the contract method 0xf9af40b8. +// +// Solidity: function operatorSDBalance(address ) view returns(uint256) +func (_SDCollateral *SDCollateralCallerSession) OperatorSDBalance(arg0 common.Address) (*big.Int, error) { + return _SDCollateral.Contract.OperatorSDBalance(&_SDCollateral.CallOpts, arg0) +} + +// PoolThresholdbyPoolId is a free data retrieval call binding the contract method 0x8a9b3738. +// +// Solidity: function poolThresholdbyPoolId(uint8 ) view returns(uint256 minThreshold, uint256 maxThreshold, uint256 withdrawThreshold, string units) +func (_SDCollateral *SDCollateralCaller) PoolThresholdbyPoolId(opts *bind.CallOpts, arg0 uint8) (struct { + MinThreshold *big.Int + MaxThreshold *big.Int + WithdrawThreshold *big.Int + Units string +}, error) { + var out []interface{} + err := _SDCollateral.contract.Call(opts, &out, "poolThresholdbyPoolId", arg0) + + outstruct := new(struct { + MinThreshold *big.Int + MaxThreshold *big.Int + WithdrawThreshold *big.Int + Units string + }) + if err != nil { + return *outstruct, err + } + + outstruct.MinThreshold = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.MaxThreshold = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.WithdrawThreshold = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.Units = *abi.ConvertType(out[3], new(string)).(*string) + + return *outstruct, err + +} + +// PoolThresholdbyPoolId is a free data retrieval call binding the contract method 0x8a9b3738. +// +// Solidity: function poolThresholdbyPoolId(uint8 ) view returns(uint256 minThreshold, uint256 maxThreshold, uint256 withdrawThreshold, string units) +func (_SDCollateral *SDCollateralSession) PoolThresholdbyPoolId(arg0 uint8) (struct { + MinThreshold *big.Int + MaxThreshold *big.Int + WithdrawThreshold *big.Int + Units string +}, error) { + return _SDCollateral.Contract.PoolThresholdbyPoolId(&_SDCollateral.CallOpts, arg0) +} + +// PoolThresholdbyPoolId is a free data retrieval call binding the contract method 0x8a9b3738. +// +// Solidity: function poolThresholdbyPoolId(uint8 ) view returns(uint256 minThreshold, uint256 maxThreshold, uint256 withdrawThreshold, string units) +func (_SDCollateral *SDCollateralCallerSession) PoolThresholdbyPoolId(arg0 uint8) (struct { + MinThreshold *big.Int + MaxThreshold *big.Int + WithdrawThreshold *big.Int + Units string +}, error) { + return _SDCollateral.Contract.PoolThresholdbyPoolId(&_SDCollateral.CallOpts, arg0) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_SDCollateral *SDCollateralCaller) StaderConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SDCollateral.contract.Call(opts, &out, "staderConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_SDCollateral *SDCollateralSession) StaderConfig() (common.Address, error) { + return _SDCollateral.Contract.StaderConfig(&_SDCollateral.CallOpts) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_SDCollateral *SDCollateralCallerSession) StaderConfig() (common.Address, error) { + return _SDCollateral.Contract.StaderConfig(&_SDCollateral.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_SDCollateral *SDCollateralCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _SDCollateral.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 (_SDCollateral *SDCollateralSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _SDCollateral.Contract.SupportsInterface(&_SDCollateral.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_SDCollateral *SDCollateralCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _SDCollateral.Contract.SupportsInterface(&_SDCollateral.CallOpts, interfaceId) +} + +// DepositSDAsCollateral is a paid mutator transaction binding the contract method 0xfcb7e032. +// +// Solidity: function depositSDAsCollateral(uint256 _sdAmount) returns() +func (_SDCollateral *SDCollateralTransactor) DepositSDAsCollateral(opts *bind.TransactOpts, _sdAmount *big.Int) (*types.Transaction, error) { + return _SDCollateral.contract.Transact(opts, "depositSDAsCollateral", _sdAmount) +} + +// DepositSDAsCollateral is a paid mutator transaction binding the contract method 0xfcb7e032. +// +// Solidity: function depositSDAsCollateral(uint256 _sdAmount) returns() +func (_SDCollateral *SDCollateralSession) DepositSDAsCollateral(_sdAmount *big.Int) (*types.Transaction, error) { + return _SDCollateral.Contract.DepositSDAsCollateral(&_SDCollateral.TransactOpts, _sdAmount) +} + +// DepositSDAsCollateral is a paid mutator transaction binding the contract method 0xfcb7e032. +// +// Solidity: function depositSDAsCollateral(uint256 _sdAmount) returns() +func (_SDCollateral *SDCollateralTransactorSession) DepositSDAsCollateral(_sdAmount *big.Int) (*types.Transaction, error) { + return _SDCollateral.Contract.DepositSDAsCollateral(&_SDCollateral.TransactOpts, _sdAmount) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_SDCollateral *SDCollateralTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _SDCollateral.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_SDCollateral *SDCollateralSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _SDCollateral.Contract.GrantRole(&_SDCollateral.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_SDCollateral *SDCollateralTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _SDCollateral.Contract.GrantRole(&_SDCollateral.TransactOpts, role, account) +} + +// MaxApproveSD is a paid mutator transaction binding the contract method 0x3e04cd35. +// +// Solidity: function maxApproveSD() returns() +func (_SDCollateral *SDCollateralTransactor) MaxApproveSD(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SDCollateral.contract.Transact(opts, "maxApproveSD") +} + +// MaxApproveSD is a paid mutator transaction binding the contract method 0x3e04cd35. +// +// Solidity: function maxApproveSD() returns() +func (_SDCollateral *SDCollateralSession) MaxApproveSD() (*types.Transaction, error) { + return _SDCollateral.Contract.MaxApproveSD(&_SDCollateral.TransactOpts) +} + +// MaxApproveSD is a paid mutator transaction binding the contract method 0x3e04cd35. +// +// Solidity: function maxApproveSD() returns() +func (_SDCollateral *SDCollateralTransactorSession) MaxApproveSD() (*types.Transaction, error) { + return _SDCollateral.Contract.MaxApproveSD(&_SDCollateral.TransactOpts) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_SDCollateral *SDCollateralTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _SDCollateral.contract.Transact(opts, "renounceRole", role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_SDCollateral *SDCollateralSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _SDCollateral.Contract.RenounceRole(&_SDCollateral.TransactOpts, role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_SDCollateral *SDCollateralTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _SDCollateral.Contract.RenounceRole(&_SDCollateral.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_SDCollateral *SDCollateralTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _SDCollateral.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_SDCollateral *SDCollateralSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _SDCollateral.Contract.RevokeRole(&_SDCollateral.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_SDCollateral *SDCollateralTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _SDCollateral.Contract.RevokeRole(&_SDCollateral.TransactOpts, role, account) +} + +// SlashValidatorSD is a paid mutator transaction binding the contract method 0x4c538f58. +// +// Solidity: function slashValidatorSD(uint256 _validatorId, uint8 _poolId) returns() +func (_SDCollateral *SDCollateralTransactor) SlashValidatorSD(opts *bind.TransactOpts, _validatorId *big.Int, _poolId uint8) (*types.Transaction, error) { + return _SDCollateral.contract.Transact(opts, "slashValidatorSD", _validatorId, _poolId) +} + +// SlashValidatorSD is a paid mutator transaction binding the contract method 0x4c538f58. +// +// Solidity: function slashValidatorSD(uint256 _validatorId, uint8 _poolId) returns() +func (_SDCollateral *SDCollateralSession) SlashValidatorSD(_validatorId *big.Int, _poolId uint8) (*types.Transaction, error) { + return _SDCollateral.Contract.SlashValidatorSD(&_SDCollateral.TransactOpts, _validatorId, _poolId) +} + +// SlashValidatorSD is a paid mutator transaction binding the contract method 0x4c538f58. +// +// Solidity: function slashValidatorSD(uint256 _validatorId, uint8 _poolId) returns() +func (_SDCollateral *SDCollateralTransactorSession) SlashValidatorSD(_validatorId *big.Int, _poolId uint8) (*types.Transaction, error) { + return _SDCollateral.Contract.SlashValidatorSD(&_SDCollateral.TransactOpts, _validatorId, _poolId) +} + +// UpdatePoolThreshold is a paid mutator transaction binding the contract method 0xe0412f0e. +// +// Solidity: function updatePoolThreshold(uint8 _poolId, uint256 _minThreshold, uint256 _maxThreshold, uint256 _withdrawThreshold, string _units) returns() +func (_SDCollateral *SDCollateralTransactor) UpdatePoolThreshold(opts *bind.TransactOpts, _poolId uint8, _minThreshold *big.Int, _maxThreshold *big.Int, _withdrawThreshold *big.Int, _units string) (*types.Transaction, error) { + return _SDCollateral.contract.Transact(opts, "updatePoolThreshold", _poolId, _minThreshold, _maxThreshold, _withdrawThreshold, _units) +} + +// UpdatePoolThreshold is a paid mutator transaction binding the contract method 0xe0412f0e. +// +// Solidity: function updatePoolThreshold(uint8 _poolId, uint256 _minThreshold, uint256 _maxThreshold, uint256 _withdrawThreshold, string _units) returns() +func (_SDCollateral *SDCollateralSession) UpdatePoolThreshold(_poolId uint8, _minThreshold *big.Int, _maxThreshold *big.Int, _withdrawThreshold *big.Int, _units string) (*types.Transaction, error) { + return _SDCollateral.Contract.UpdatePoolThreshold(&_SDCollateral.TransactOpts, _poolId, _minThreshold, _maxThreshold, _withdrawThreshold, _units) +} + +// UpdatePoolThreshold is a paid mutator transaction binding the contract method 0xe0412f0e. +// +// Solidity: function updatePoolThreshold(uint8 _poolId, uint256 _minThreshold, uint256 _maxThreshold, uint256 _withdrawThreshold, string _units) returns() +func (_SDCollateral *SDCollateralTransactorSession) UpdatePoolThreshold(_poolId uint8, _minThreshold *big.Int, _maxThreshold *big.Int, _withdrawThreshold *big.Int, _units string) (*types.Transaction, error) { + return _SDCollateral.Contract.UpdatePoolThreshold(&_SDCollateral.TransactOpts, _poolId, _minThreshold, _maxThreshold, _withdrawThreshold, _units) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_SDCollateral *SDCollateralTransactor) UpdateStaderConfig(opts *bind.TransactOpts, _staderConfig common.Address) (*types.Transaction, error) { + return _SDCollateral.contract.Transact(opts, "updateStaderConfig", _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_SDCollateral *SDCollateralSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _SDCollateral.Contract.UpdateStaderConfig(&_SDCollateral.TransactOpts, _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_SDCollateral *SDCollateralTransactorSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _SDCollateral.Contract.UpdateStaderConfig(&_SDCollateral.TransactOpts, _staderConfig) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 _requestedSD) returns() +func (_SDCollateral *SDCollateralTransactor) Withdraw(opts *bind.TransactOpts, _requestedSD *big.Int) (*types.Transaction, error) { + return _SDCollateral.contract.Transact(opts, "withdraw", _requestedSD) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 _requestedSD) returns() +func (_SDCollateral *SDCollateralSession) Withdraw(_requestedSD *big.Int) (*types.Transaction, error) { + return _SDCollateral.Contract.Withdraw(&_SDCollateral.TransactOpts, _requestedSD) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 _requestedSD) returns() +func (_SDCollateral *SDCollateralTransactorSession) Withdraw(_requestedSD *big.Int) (*types.Transaction, error) { + return _SDCollateral.Contract.Withdraw(&_SDCollateral.TransactOpts, _requestedSD) +} + +// SDCollateralInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the SDCollateral contract. +type SDCollateralInitializedIterator struct { + Event *SDCollateralInitialized // 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 *SDCollateralInitializedIterator) 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(SDCollateralInitialized) + if err := 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(SDCollateralInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SDCollateralInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SDCollateralInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SDCollateralInitialized represents a Initialized event raised by the SDCollateral contract. +type SDCollateralInitialized 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 (_SDCollateral *SDCollateralFilterer) FilterInitialized(opts *bind.FilterOpts) (*SDCollateralInitializedIterator, error) { + + logs, sub, err := _SDCollateral.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &SDCollateralInitializedIterator{contract: _SDCollateral.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 (_SDCollateral *SDCollateralFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *SDCollateralInitialized) (event.Subscription, error) { + + logs, sub, err := _SDCollateral.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(SDCollateralInitialized) + if err := _SDCollateral.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 (_SDCollateral *SDCollateralFilterer) ParseInitialized(log types.Log) (*SDCollateralInitialized, error) { + event := new(SDCollateralInitialized) + if err := _SDCollateral.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SDCollateralRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the SDCollateral contract. +type SDCollateralRoleAdminChangedIterator struct { + Event *SDCollateralRoleAdminChanged // 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 *SDCollateralRoleAdminChangedIterator) 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(SDCollateralRoleAdminChanged) + if err := 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(SDCollateralRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SDCollateralRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SDCollateralRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SDCollateralRoleAdminChanged represents a RoleAdminChanged event raised by the SDCollateral contract. +type SDCollateralRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_SDCollateral *SDCollateralFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*SDCollateralRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _SDCollateral.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &SDCollateralRoleAdminChangedIterator{contract: _SDCollateral.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_SDCollateral *SDCollateralFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *SDCollateralRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _SDCollateral.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(SDCollateralRoleAdminChanged) + if err := _SDCollateral.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_SDCollateral *SDCollateralFilterer) ParseRoleAdminChanged(log types.Log) (*SDCollateralRoleAdminChanged, error) { + event := new(SDCollateralRoleAdminChanged) + if err := _SDCollateral.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SDCollateralRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the SDCollateral contract. +type SDCollateralRoleGrantedIterator struct { + Event *SDCollateralRoleGranted // 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 *SDCollateralRoleGrantedIterator) 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(SDCollateralRoleGranted) + if err := 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(SDCollateralRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SDCollateralRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SDCollateralRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SDCollateralRoleGranted represents a RoleGranted event raised by the SDCollateral contract. +type SDCollateralRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_SDCollateral *SDCollateralFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*SDCollateralRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _SDCollateral.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &SDCollateralRoleGrantedIterator{contract: _SDCollateral.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_SDCollateral *SDCollateralFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *SDCollateralRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _SDCollateral.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, 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(SDCollateralRoleGranted) + if err := _SDCollateral.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_SDCollateral *SDCollateralFilterer) ParseRoleGranted(log types.Log) (*SDCollateralRoleGranted, error) { + event := new(SDCollateralRoleGranted) + if err := _SDCollateral.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SDCollateralRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the SDCollateral contract. +type SDCollateralRoleRevokedIterator struct { + Event *SDCollateralRoleRevoked // 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 *SDCollateralRoleRevokedIterator) 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(SDCollateralRoleRevoked) + if err := 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(SDCollateralRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SDCollateralRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SDCollateralRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SDCollateralRoleRevoked represents a RoleRevoked event raised by the SDCollateral contract. +type SDCollateralRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_SDCollateral *SDCollateralFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*SDCollateralRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _SDCollateral.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &SDCollateralRoleRevokedIterator{contract: _SDCollateral.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_SDCollateral *SDCollateralFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *SDCollateralRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _SDCollateral.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, 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(SDCollateralRoleRevoked) + if err := _SDCollateral.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_SDCollateral *SDCollateralFilterer) ParseRoleRevoked(log types.Log) (*SDCollateralRoleRevoked, error) { + event := new(SDCollateralRoleRevoked) + if err := _SDCollateral.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SDCollateralSDDepositedIterator is returned from FilterSDDeposited and is used to iterate over the raw logs and unpacked data for SDDeposited events raised by the SDCollateral contract. +type SDCollateralSDDepositedIterator struct { + Event *SDCollateralSDDeposited // 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 *SDCollateralSDDepositedIterator) 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(SDCollateralSDDeposited) + if err := 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(SDCollateralSDDeposited) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SDCollateralSDDepositedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SDCollateralSDDepositedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SDCollateralSDDeposited represents a SDDeposited event raised by the SDCollateral contract. +type SDCollateralSDDeposited struct { + Operator common.Address + SdAmount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSDDeposited is a free log retrieval operation binding the contract event 0x112973aa2e3b182a34447572d830c1e97afc414558a08f33554be8e545224259. +// +// Solidity: event SDDeposited(address indexed operator, uint256 sdAmount) +func (_SDCollateral *SDCollateralFilterer) FilterSDDeposited(opts *bind.FilterOpts, operator []common.Address) (*SDCollateralSDDepositedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _SDCollateral.contract.FilterLogs(opts, "SDDeposited", operatorRule) + if err != nil { + return nil, err + } + return &SDCollateralSDDepositedIterator{contract: _SDCollateral.contract, event: "SDDeposited", logs: logs, sub: sub}, nil +} + +// WatchSDDeposited is a free log subscription operation binding the contract event 0x112973aa2e3b182a34447572d830c1e97afc414558a08f33554be8e545224259. +// +// Solidity: event SDDeposited(address indexed operator, uint256 sdAmount) +func (_SDCollateral *SDCollateralFilterer) WatchSDDeposited(opts *bind.WatchOpts, sink chan<- *SDCollateralSDDeposited, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _SDCollateral.contract.WatchLogs(opts, "SDDeposited", 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(SDCollateralSDDeposited) + if err := _SDCollateral.contract.UnpackLog(event, "SDDeposited", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSDDeposited is a log parse operation binding the contract event 0x112973aa2e3b182a34447572d830c1e97afc414558a08f33554be8e545224259. +// +// Solidity: event SDDeposited(address indexed operator, uint256 sdAmount) +func (_SDCollateral *SDCollateralFilterer) ParseSDDeposited(log types.Log) (*SDCollateralSDDeposited, error) { + event := new(SDCollateralSDDeposited) + if err := _SDCollateral.contract.UnpackLog(event, "SDDeposited", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SDCollateralSDSlashedIterator is returned from FilterSDSlashed and is used to iterate over the raw logs and unpacked data for SDSlashed events raised by the SDCollateral contract. +type SDCollateralSDSlashedIterator struct { + Event *SDCollateralSDSlashed // 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 *SDCollateralSDSlashedIterator) 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(SDCollateralSDSlashed) + if err := 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(SDCollateralSDSlashed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SDCollateralSDSlashedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SDCollateralSDSlashedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SDCollateralSDSlashed represents a SDSlashed event raised by the SDCollateral contract. +type SDCollateralSDSlashed struct { + Operator common.Address + Auction common.Address + SdSlashed *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSDSlashed is a free log retrieval operation binding the contract event 0xe4a6f5b1a676a94b2af7a506093c172e23d46a5bea6f2d783d4d32c9047800f4. +// +// Solidity: event SDSlashed(address indexed operator, address indexed auction, uint256 sdSlashed) +func (_SDCollateral *SDCollateralFilterer) FilterSDSlashed(opts *bind.FilterOpts, operator []common.Address, auction []common.Address) (*SDCollateralSDSlashedIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var auctionRule []interface{} + for _, auctionItem := range auction { + auctionRule = append(auctionRule, auctionItem) + } + + logs, sub, err := _SDCollateral.contract.FilterLogs(opts, "SDSlashed", operatorRule, auctionRule) + if err != nil { + return nil, err + } + return &SDCollateralSDSlashedIterator{contract: _SDCollateral.contract, event: "SDSlashed", logs: logs, sub: sub}, nil +} + +// WatchSDSlashed is a free log subscription operation binding the contract event 0xe4a6f5b1a676a94b2af7a506093c172e23d46a5bea6f2d783d4d32c9047800f4. +// +// Solidity: event SDSlashed(address indexed operator, address indexed auction, uint256 sdSlashed) +func (_SDCollateral *SDCollateralFilterer) WatchSDSlashed(opts *bind.WatchOpts, sink chan<- *SDCollateralSDSlashed, operator []common.Address, auction []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + var auctionRule []interface{} + for _, auctionItem := range auction { + auctionRule = append(auctionRule, auctionItem) + } + + logs, sub, err := _SDCollateral.contract.WatchLogs(opts, "SDSlashed", operatorRule, auctionRule) + 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(SDCollateralSDSlashed) + if err := _SDCollateral.contract.UnpackLog(event, "SDSlashed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSDSlashed is a log parse operation binding the contract event 0xe4a6f5b1a676a94b2af7a506093c172e23d46a5bea6f2d783d4d32c9047800f4. +// +// Solidity: event SDSlashed(address indexed operator, address indexed auction, uint256 sdSlashed) +func (_SDCollateral *SDCollateralFilterer) ParseSDSlashed(log types.Log) (*SDCollateralSDSlashed, error) { + event := new(SDCollateralSDSlashed) + if err := _SDCollateral.contract.UnpackLog(event, "SDSlashed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SDCollateralSDWithdrawnIterator is returned from FilterSDWithdrawn and is used to iterate over the raw logs and unpacked data for SDWithdrawn events raised by the SDCollateral contract. +type SDCollateralSDWithdrawnIterator struct { + Event *SDCollateralSDWithdrawn // 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 *SDCollateralSDWithdrawnIterator) 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(SDCollateralSDWithdrawn) + if err := 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(SDCollateralSDWithdrawn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SDCollateralSDWithdrawnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SDCollateralSDWithdrawnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SDCollateralSDWithdrawn represents a SDWithdrawn event raised by the SDCollateral contract. +type SDCollateralSDWithdrawn struct { + Operator common.Address + SdAmount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSDWithdrawn is a free log retrieval operation binding the contract event 0x48c1f846fa4bc05385324ee60316f9c6778ed2b5f205a6319678a609b8767607. +// +// Solidity: event SDWithdrawn(address indexed operator, uint256 sdAmount) +func (_SDCollateral *SDCollateralFilterer) FilterSDWithdrawn(opts *bind.FilterOpts, operator []common.Address) (*SDCollateralSDWithdrawnIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _SDCollateral.contract.FilterLogs(opts, "SDWithdrawn", operatorRule) + if err != nil { + return nil, err + } + return &SDCollateralSDWithdrawnIterator{contract: _SDCollateral.contract, event: "SDWithdrawn", logs: logs, sub: sub}, nil +} + +// WatchSDWithdrawn is a free log subscription operation binding the contract event 0x48c1f846fa4bc05385324ee60316f9c6778ed2b5f205a6319678a609b8767607. +// +// Solidity: event SDWithdrawn(address indexed operator, uint256 sdAmount) +func (_SDCollateral *SDCollateralFilterer) WatchSDWithdrawn(opts *bind.WatchOpts, sink chan<- *SDCollateralSDWithdrawn, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _SDCollateral.contract.WatchLogs(opts, "SDWithdrawn", 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(SDCollateralSDWithdrawn) + if err := _SDCollateral.contract.UnpackLog(event, "SDWithdrawn", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSDWithdrawn is a log parse operation binding the contract event 0x48c1f846fa4bc05385324ee60316f9c6778ed2b5f205a6319678a609b8767607. +// +// Solidity: event SDWithdrawn(address indexed operator, uint256 sdAmount) +func (_SDCollateral *SDCollateralFilterer) ParseSDWithdrawn(log types.Log) (*SDCollateralSDWithdrawn, error) { + event := new(SDCollateralSDWithdrawn) + if err := _SDCollateral.contract.UnpackLog(event, "SDWithdrawn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SDCollateralUpdatedPoolIdForOperatorIterator is returned from FilterUpdatedPoolIdForOperator and is used to iterate over the raw logs and unpacked data for UpdatedPoolIdForOperator events raised by the SDCollateral contract. +type SDCollateralUpdatedPoolIdForOperatorIterator struct { + Event *SDCollateralUpdatedPoolIdForOperator // 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 *SDCollateralUpdatedPoolIdForOperatorIterator) 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(SDCollateralUpdatedPoolIdForOperator) + if err := 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(SDCollateralUpdatedPoolIdForOperator) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SDCollateralUpdatedPoolIdForOperatorIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SDCollateralUpdatedPoolIdForOperatorIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SDCollateralUpdatedPoolIdForOperator represents a UpdatedPoolIdForOperator event raised by the SDCollateral contract. +type SDCollateralUpdatedPoolIdForOperator struct { + PoolId uint8 + Operator common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedPoolIdForOperator is a free log retrieval operation binding the contract event 0x834f00ba6adeb9f7123fa03b8252cdda3f81509cc96c3c2239420138fa1b895e. +// +// Solidity: event UpdatedPoolIdForOperator(uint8 poolId, address operator) +func (_SDCollateral *SDCollateralFilterer) FilterUpdatedPoolIdForOperator(opts *bind.FilterOpts) (*SDCollateralUpdatedPoolIdForOperatorIterator, error) { + + logs, sub, err := _SDCollateral.contract.FilterLogs(opts, "UpdatedPoolIdForOperator") + if err != nil { + return nil, err + } + return &SDCollateralUpdatedPoolIdForOperatorIterator{contract: _SDCollateral.contract, event: "UpdatedPoolIdForOperator", logs: logs, sub: sub}, nil +} + +// WatchUpdatedPoolIdForOperator is a free log subscription operation binding the contract event 0x834f00ba6adeb9f7123fa03b8252cdda3f81509cc96c3c2239420138fa1b895e. +// +// Solidity: event UpdatedPoolIdForOperator(uint8 poolId, address operator) +func (_SDCollateral *SDCollateralFilterer) WatchUpdatedPoolIdForOperator(opts *bind.WatchOpts, sink chan<- *SDCollateralUpdatedPoolIdForOperator) (event.Subscription, error) { + + logs, sub, err := _SDCollateral.contract.WatchLogs(opts, "UpdatedPoolIdForOperator") + 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(SDCollateralUpdatedPoolIdForOperator) + if err := _SDCollateral.contract.UnpackLog(event, "UpdatedPoolIdForOperator", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedPoolIdForOperator is a log parse operation binding the contract event 0x834f00ba6adeb9f7123fa03b8252cdda3f81509cc96c3c2239420138fa1b895e. +// +// Solidity: event UpdatedPoolIdForOperator(uint8 poolId, address operator) +func (_SDCollateral *SDCollateralFilterer) ParseUpdatedPoolIdForOperator(log types.Log) (*SDCollateralUpdatedPoolIdForOperator, error) { + event := new(SDCollateralUpdatedPoolIdForOperator) + if err := _SDCollateral.contract.UnpackLog(event, "UpdatedPoolIdForOperator", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SDCollateralUpdatedPoolThresholdIterator is returned from FilterUpdatedPoolThreshold and is used to iterate over the raw logs and unpacked data for UpdatedPoolThreshold events raised by the SDCollateral contract. +type SDCollateralUpdatedPoolThresholdIterator struct { + Event *SDCollateralUpdatedPoolThreshold // 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 *SDCollateralUpdatedPoolThresholdIterator) 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(SDCollateralUpdatedPoolThreshold) + if err := 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(SDCollateralUpdatedPoolThreshold) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SDCollateralUpdatedPoolThresholdIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SDCollateralUpdatedPoolThresholdIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SDCollateralUpdatedPoolThreshold represents a UpdatedPoolThreshold event raised by the SDCollateral contract. +type SDCollateralUpdatedPoolThreshold struct { + PoolId uint8 + MinThreshold *big.Int + WithdrawThreshold *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedPoolThreshold is a free log retrieval operation binding the contract event 0x18757dd1fbfe2ad823e1bd4de3f8a2ee76b49f92f6aa34cc7cbf717cdf4d1758. +// +// Solidity: event UpdatedPoolThreshold(uint8 poolId, uint256 minThreshold, uint256 withdrawThreshold) +func (_SDCollateral *SDCollateralFilterer) FilterUpdatedPoolThreshold(opts *bind.FilterOpts) (*SDCollateralUpdatedPoolThresholdIterator, error) { + + logs, sub, err := _SDCollateral.contract.FilterLogs(opts, "UpdatedPoolThreshold") + if err != nil { + return nil, err + } + return &SDCollateralUpdatedPoolThresholdIterator{contract: _SDCollateral.contract, event: "UpdatedPoolThreshold", logs: logs, sub: sub}, nil +} + +// WatchUpdatedPoolThreshold is a free log subscription operation binding the contract event 0x18757dd1fbfe2ad823e1bd4de3f8a2ee76b49f92f6aa34cc7cbf717cdf4d1758. +// +// Solidity: event UpdatedPoolThreshold(uint8 poolId, uint256 minThreshold, uint256 withdrawThreshold) +func (_SDCollateral *SDCollateralFilterer) WatchUpdatedPoolThreshold(opts *bind.WatchOpts, sink chan<- *SDCollateralUpdatedPoolThreshold) (event.Subscription, error) { + + logs, sub, err := _SDCollateral.contract.WatchLogs(opts, "UpdatedPoolThreshold") + 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(SDCollateralUpdatedPoolThreshold) + if err := _SDCollateral.contract.UnpackLog(event, "UpdatedPoolThreshold", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedPoolThreshold is a log parse operation binding the contract event 0x18757dd1fbfe2ad823e1bd4de3f8a2ee76b49f92f6aa34cc7cbf717cdf4d1758. +// +// Solidity: event UpdatedPoolThreshold(uint8 poolId, uint256 minThreshold, uint256 withdrawThreshold) +func (_SDCollateral *SDCollateralFilterer) ParseUpdatedPoolThreshold(log types.Log) (*SDCollateralUpdatedPoolThreshold, error) { + event := new(SDCollateralUpdatedPoolThreshold) + if err := _SDCollateral.contract.UnpackLog(event, "UpdatedPoolThreshold", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SDCollateralUpdatedStaderConfigIterator is returned from FilterUpdatedStaderConfig and is used to iterate over the raw logs and unpacked data for UpdatedStaderConfig events raised by the SDCollateral contract. +type SDCollateralUpdatedStaderConfigIterator struct { + Event *SDCollateralUpdatedStaderConfig // 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 *SDCollateralUpdatedStaderConfigIterator) 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(SDCollateralUpdatedStaderConfig) + if err := 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(SDCollateralUpdatedStaderConfig) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *SDCollateralUpdatedStaderConfigIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SDCollateralUpdatedStaderConfigIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SDCollateralUpdatedStaderConfig represents a UpdatedStaderConfig event raised by the SDCollateral contract. +type SDCollateralUpdatedStaderConfig struct { + StaderConfig common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedStaderConfig is a free log retrieval operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address indexed staderConfig) +func (_SDCollateral *SDCollateralFilterer) FilterUpdatedStaderConfig(opts *bind.FilterOpts, staderConfig []common.Address) (*SDCollateralUpdatedStaderConfigIterator, error) { + + var staderConfigRule []interface{} + for _, staderConfigItem := range staderConfig { + staderConfigRule = append(staderConfigRule, staderConfigItem) + } + + logs, sub, err := _SDCollateral.contract.FilterLogs(opts, "UpdatedStaderConfig", staderConfigRule) + if err != nil { + return nil, err + } + return &SDCollateralUpdatedStaderConfigIterator{contract: _SDCollateral.contract, event: "UpdatedStaderConfig", logs: logs, sub: sub}, nil +} + +// WatchUpdatedStaderConfig is a free log subscription operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address indexed staderConfig) +func (_SDCollateral *SDCollateralFilterer) WatchUpdatedStaderConfig(opts *bind.WatchOpts, sink chan<- *SDCollateralUpdatedStaderConfig, staderConfig []common.Address) (event.Subscription, error) { + + var staderConfigRule []interface{} + for _, staderConfigItem := range staderConfig { + staderConfigRule = append(staderConfigRule, staderConfigItem) + } + + logs, sub, err := _SDCollateral.contract.WatchLogs(opts, "UpdatedStaderConfig", staderConfigRule) + 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(SDCollateralUpdatedStaderConfig) + if err := _SDCollateral.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedStaderConfig is a log parse operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address indexed staderConfig) +func (_SDCollateral *SDCollateralFilterer) ParseUpdatedStaderConfig(log types.Log) (*SDCollateralUpdatedStaderConfig, error) { + event := new(SDCollateralUpdatedStaderConfig) + if err := _SDCollateral.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/testing/deployHelper_test.go b/testing/deployHelper_test.go index c7ebaab4a..ddc4a167d 100644 --- a/testing/deployHelper_test.go +++ b/testing/deployHelper_test.go @@ -16,6 +16,7 @@ import ( "github.com/ethereum/go-ethereum/rpc" "github.com/stader-labs/stader-node/shared/services" "github.com/stader-labs/stader-node/stader-lib/node" + "github.com/stader-labs/stader-node/stader-lib/utils/eth" "github.com/stader-labs/stader-node/testing/contracts" "github.com/stretchr/testify/require" "github.com/urfave/cli" @@ -34,6 +35,15 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { privateKey, err := crypto.HexToECDSA(preFundedKeyAnvil) require.Nil(t, err) + w, err := services.GetWallet(c) + require.Nil(t, err) + + nodePrivateKey, err := w.GetNodePrivateKey() + require.Nil(t, err) + + acc, err := w.GetNodeAccount() + require.Nil(t, err) + // extract public key of the deployer from private key publicKey := privateKey.Public() publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey) @@ -76,9 +86,24 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { fmt.Printf("EthXAddr %+v", ethXAddr.Hex()) auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + mint, _ := ethxContract.MINTERROLE(&bind.CallOpts{}) + ethxContract.GrantRole(auth, mint, fromAddress) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + + _, err = ethxContract.Mint(auth, acc.Address, eth.EthToWei(100000)) + require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + ethxContract.UpdateStaderConfig(auth, staderCfAddress) auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + //DeploySDCollateral + sdCollateralAddr, _, _, _ := contracts.DeploySDCollateral(auth, client, fromAddress, staderCfAddress) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + _, err = stdCfContract.UpdateSDCollateral(auth, sdCollateralAddr) + require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + // Deploy node permission regis plNodeRegistryAddr, _, nrContact, err := contracts.DeployPermissionlessNodeRegistry(auth, client, fromAddress, staderCfAddress) require.Nil(t, err) @@ -156,19 +181,10 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { prn, err := services.GetPermissionlessNodeRegistry(c) require.Nil(t, err) - w, err := services.GetWallet(c) - require.Nil(t, err) - - nodePrivateKey, err := w.GetNodePrivateKey() - require.Nil(t, err) - - acc, err := w.GetNodeAccount() - require.Nil(t, err) - send1EthTransaction(client, fromAddress, acc.Address, privateKey, chainID) - auth, err = GetNextTransaction(client, acc.Address, nodePrivateKey, chainID) + auth, _ = GetNextTransaction(client, acc.Address, nodePrivateKey, chainID) send1EthTransaction(client, fromAddress, acc.Address, privateKey, chainID) - auth, err = GetNextTransaction(client, acc.Address, nodePrivateKey, chainID) + auth, _ = GetNextTransaction(client, acc.Address, nodePrivateKey, chainID) send1EthTransaction(client, fromAddress, acc.Address, privateKey, chainID) auth, err = GetNextTransaction(client, acc.Address, nodePrivateKey, chainID) @@ -224,7 +240,7 @@ func send1EthTransaction(client *ethclient.Client, tx := types.NewTransaction( nonce, toAddress, - big.NewInt(9000000000000000000), + eth.EthToWei(1000), gasLimit, gasPrice, data) diff --git a/testing/node_test.go b/testing/node_test.go index ee9ca8ed1..c0d8caa46 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -14,6 +14,7 @@ import ( //stader/register.go + "github.com/stader-labs/stader-node/stader-lib/utils/eth" "github.com/stader-labs/stader-node/testing/httptest" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -39,18 +40,32 @@ func (s *StaderNodeSuite) TestNodeDaemon() { } func (s *StaderNodeSuite) TestNodeDeposit() { - a := os.Args - err := s.app.Run([]string{ - a[0], - "api", - "validator", - "deposit", - "9000000000000000000", - "0", - "1", - "false", - }) - assert.Nil(s.T(), err) + // eth.EthToWei(100000). + go func() { + a := os.Args + err := s.app.Run([]string{ + a[0], + "api", + "node", + "deposit-sd", + eth.EthToWei(10000).String(), + }) + assert.Nil(s.T(), err) + + err = s.app.Run([]string{ + a[0], + "api", + "validator", + "deposit", + "9000000000000000000", + "0", + "1", + "false", + }) + assert.Nil(s.T(), err) + }() + + time.Sleep(time.Minute * 3) } // func (s *StaderNodeSuite) TestNode2() { @@ -75,7 +90,10 @@ func (s *StaderNodeSuite) SetupSuite() { flagSet.StringVar(&cp, "config-path", ConfigPath, "config-path") c := cli.NewContext(s.app, flagSet, nil) - s.staderConfig(ctx, c) + // clUrl := fmt.Sprintf("http://127.0.0.1:%d", 52703) + elUrl := fmt.Sprintf("http://127.0.0.1:%d", 8545) + // s.staderConfig(ctx, c, &clUrl, &elUrl) + s.staderConfig(ctx, c, nil, &elUrl) fmt.Println("Done SetupSuite()") From 8239bdac4eea4a7a7a2a388acafe23a7a6ccf98e Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 21 Jun 2023 12:32:42 +0700 Subject: [PATCH 37/90] Fix test failed --- testing/configHelper_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index ba2e11ee4..ed7d57ae4 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -235,7 +235,7 @@ func (s *StaderNodeSuite) staderConfig( require.True(t, found) elPort := apiServiceHttpPortSpec.GetNumber() - if elUrl != nil { + if elUrl == nil { *elUrl = fmt.Sprintf("http://127.0.0.1:%d", elPort) } *clUrl = fmt.Sprintf("http://127.0.0.1:%d", clPort) From 501ce4df1879f46f4298f89d08192a6f2e912f72 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 21 Jun 2023 15:15:59 +0700 Subject: [PATCH 38/90] Refactor --- stader/api/node/deposit-sd.go | 8 +++++++- testing/contracts/SDCollateral.go | 2 +- testing/deployHelper_test.go | 7 +++++++ testing/node_test.go | 28 +++++++++++++++++++--------- 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/stader/api/node/deposit-sd.go b/stader/api/node/deposit-sd.go index d0386e8c0..6a16437e3 100644 --- a/stader/api/node/deposit-sd.go +++ b/stader/api/node/deposit-sd.go @@ -2,9 +2,11 @@ package node import ( "fmt" - "github.com/stader-labs/stader-node/stader-lib/sd-collateral" "math/big" + sd_collateral "github.com/stader-labs/stader-node/stader-lib/sd-collateral" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/stader-labs/stader-node/stader-lib/tokens" "github.com/stader-labs/stader-node/stader-lib/utils" @@ -225,6 +227,10 @@ func depositSdAsCollateral(c *cli.Context, amountWei *big.Int) (*api.NodeDeposit if err != nil { return nil, fmt.Errorf("Error checking for nonce override: %w", err) } + acc, err := w.GetNodeAccount() + + bl, err := sd_collateral.GetOperatorSdBalance(sdc, acc.Address, &bind.CallOpts{}) + fmt.Printf("BL %+v amountWei %+v", bl.String(), amountWei.String()) tx, err := sd_collateral.DepositSdAsCollateral(sdc, amountWei, opts) if err != nil { return nil, err diff --git a/testing/contracts/SDCollateral.go b/testing/contracts/SDCollateral.go index 07d8d5a17..f659f5d7a 100644 --- a/testing/contracts/SDCollateral.go +++ b/testing/contracts/SDCollateral.go @@ -32,7 +32,7 @@ var ( // SDCollateralMetaData contains all meta data concerning the SDCollateral contract. var SDCollateralMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotWithdrawVault\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"operatorSDCollateral\",\"type\":\"uint256\"}],\"name\":\"InsufficientSDToWithdraw\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoStateChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SDTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sdAmount\",\"type\":\"uint256\"}],\"name\":\"SDDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"auction\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sdSlashed\",\"type\":\"uint256\"}],\"name\":\"SDSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sdAmount\",\"type\":\"uint256\"}],\"name\":\"SDWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"UpdatedPoolIdForOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawThreshold\",\"type\":\"uint256\"}],\"name\":\"UpdatedPoolThreshold\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ethAmount\",\"type\":\"uint256\"}],\"name\":\"convertETHToSD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_sdAmount\",\"type\":\"uint256\"}],\"name\":\"convertSDToETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_sdAmount\",\"type\":\"uint256\"}],\"name\":\"depositSDAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_numValidator\",\"type\":\"uint256\"}],\"name\":\"getMinimumSDToBond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_minSDToBond\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"getOperatorWithdrawThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"operatorWithdrawThreshold\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_numValidator\",\"type\":\"uint256\"}],\"name\":\"getRemainingSDToBond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"getRewardEligibleSD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardEligibleSD\",\"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\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_numValidator\",\"type\":\"uint256\"}],\"name\":\"hasEnoughSDCollateral\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":[],\"name\":\"maxApproveSD\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorSDBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"poolThresholdbyPoolId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawThreshold\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"units\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"}],\"name\":\"slashValidatorSD\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_minThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_withdrawThreshold\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_units\",\"type\":\"string\"}],\"name\":\"updatePoolThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_requestedSD\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b50604051620026ad380380620026ad8339810160408190526200003391620003d6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001cb565b6200010e82620001cb565b62000118620001f6565b6200012262000252565b60c980546001600160a01b0319166001600160a01b038416179055620001495f84620002b6565b6040516001600160a01b038316907fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a28015620001c2575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050506200040c565b6001600160a01b038116620001f35760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002505760405162461bcd60e51b815260206004820152602b60248201525f805160206200268d83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002ac5760405162461bcd60e51b815260206004820152602b60248201525f805160206200268d83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200025062000359565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff1662000355575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620003143390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff16620003b35760405162461bcd60e51b815260206004820152602b60248201525f805160206200268d83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6001609755565b80516001600160a01b0381168114620003d1575f80fd5b919050565b5f8060408385031215620003e8575f80fd5b620003f383620003ba565b91506200040360208401620003ba565b90509250929050565b612273806200041a5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c80638a9b3738116100bf578063d547741f11610079578063d547741f146102d4578063dfdafccb146102e7578063e0412f0e146102fa578063e614e17c1461030d578063f9af40b814610320578063fcb7e0321461033f575f80fd5b80638a9b37381461025e57806391d14854146102815780639871a30a146102945780639ee804cb146102a7578063a217fddf146102ba578063b178e38e146102c1575f80fd5b806336568abe1161011057806336568abe146101df578063379b727e146101f25780633909afd3146102055780633e04cd3514610218578063490ffa35146102205780634c538f581461024b575f80fd5b806301ffc9a71461014c578063248a9ca3146101745780632e1a7d4d146101a45780632f2ff15d146101b9578063351691ab146101cc575b5f80fd5b61015f61015a366004611acc565b610352565b60405190151581526020015b60405180910390f35b610196610182366004611af3565b5f9081526065602052604090206001015490565b60405190815260200161016b565b6101b76101b2366004611af3565b610388565b005b6101b76101c7366004611b1e565b610542565b6101966101da366004611b5a565b61056b565b6101b76101ed366004611b1e565b6105b5565b610196610200366004611b98565b610633565b610196610213366004611bc2565b61066d565b6101b7610709565b60c954610233906001600160a01b031681565b6040516001600160a01b03909116815260200161016b565b6101b7610259366004611bdd565b61087c565b61027161026c366004611c00565b6108e4565b60405161016b9493929190611c68565b61015f61028f366004611b1e565b610994565b6101966102a2366004611bc2565b6109be565b6101b76102b5366004611bc2565b610a06565b6101965f81565b61015f6102cf366004611b5a565b610a92565b6101b76102e2366004611b1e565b610aa7565b6101966102f5366004611af3565b610acb565b6101b7610308366004611d02565b610c2a565b61019661031b366004611af3565b610d13565b61019661032e366004611bc2565b60cb6020525f908152604090205481565b6101b761034d366004611af3565b610e69565b5f6001600160e01b03198216637965db0b60e01b148061038257506301ffc9a760e01b6001600160e01b03198316145b92915050565b335f81815260cb6020526040902054826103a1836109be565b6103ab9190611dbe565b8110156103d35760405163f669f60360e01b8152600481018290526024015b60405180910390fd5b6001600160a01b0382165f90815260cb6020526040812080548592906103fa908490611dd1565b909155505060c9546040805163381a7dc560e21b815290516001600160a01b039092169163e069f714916004808201926020929091908290030181865afa158015610447573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046b9190611df4565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201869052919091169063a9059cbb906044016020604051808303815f875af11580156104b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104dd9190611e1e565b6104fa5760405163d3544e3f60e01b815260040160405180910390fd5b816001600160a01b03167f48c1f846fa4bc05385324ee60316f9c6778ed2b5f205a6319678a609b87676078460405161053591815260200190565b60405180910390a2505050565b5f8281526065602052604090206001015461055c81610fd4565b6105668383610fe1565b505050565b6001600160a01b0383165f90815260cb60205260408120548161058e8585610633565b9050808210156105a7576105a28282611dd1565b6105a9565b5f5b925050505b9392505050565b6001600160a01b03811633146106255760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016103ca565b61062f8282611066565b5050565b5f61063d836110cc565b60ff83165f90815260ca60205260409020805461065990610d13565b91506106658383611e37565b949350505050565b5f805f6106798461110c565b9250509150610687826110cc565b60ff82165f90815260ca6020526040812080549091906106a690610d13565b6106b09084611e37565b90505f6106c08360010154610d13565b6106ca9085611e37565b6001600160a01b0388165f90815260cb60205260409020549091508281106106fb576106f681836113cf565b6106fd565b5f5b98975050505050505050565b60c9546107209033906001600160a01b03166113e4565b60c95460408051630db055fd60e21b815290515f926001600160a01b0316916336c157f49160048083019260209291908290030181865afa158015610767573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078b9190611df4565b905061079681611469565b60c95f9054906101000a90046001600160a01b03166001600160a01b031663e069f7146040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080a9190611df4565b60405163095ea7b360e01b81526001600160a01b0383811660048301525f196024830152919091169063095ea7b3906044016020604051808303815f875af1158015610858573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062f9190611e1e565b610884611490565b60c9545f906108a1908390859033906001600160a01b03166114e9565b90506108ac826110cc565b60ff82165f90815260ca6020526040812080549091906108cb90610d13565b90506108d783826116e1565b50505061062f6001609755565b60ca6020525f908152604090208054600182015460028301546003840180549394929391929161091390611e4e565b80601f016020809104026020016040519081016040528092919081815260200182805461093f90611e4e565b801561098a5780601f106109615761010080835404028352916020019161098a565b820191905f5260205f20905b81548152906001019060200180831161096d57829003601f168201915b5050505050905084565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f805f6109ca8461110c565b92505091506109d8826110cc565b60ff82165f90815260ca6020526040902060028101546109fd9061031b908490611e37565b95945050505050565b5f610a1081610fd4565b610a1982611469565b60c9546001600160a01b0390811690831603610a485760405163a28a88c160e01b815260040160405180910390fd5b60c980546001600160a01b0319166001600160a01b0384169081179091556040517fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a25050565b5f610a9e84848461056b565b15949350505050565b5f82815260656020526040902060010154610ac181610fd4565b6105668383611066565b5f8060c95f9054906101000a90046001600160a01b03166001600160a01b031663defd024d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b419190611df4565b6001600160a01b031663a6870e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba09190611e86565b905060c95f9054906101000a90046001600160a01b03166001600160a01b031663f0141d846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c169190611e86565b610c208285611e37565b6105ae9190611e9d565b60c954610c419033906001600160a01b03166113e4565b81841180610c4e57508284115b15610c6c576040516375075b2960e11b815260040160405180910390fd5b6040805160808101825285815260208082018681528284018681526060840186815260ff8b165f90815260ca9094529490922083518155905160018201559051600282015591519091906003820190610cc59082611f09565b50506040805160ff88168152602081018790529081018490527f18757dd1fbfe2ad823e1bd4de3f8a2ee76b49f92f6aa34cc7cbf717cdf4d1758915060600160405180910390a15050505050565b5f8060c95f9054906101000a90046001600160a01b03166001600160a01b031663defd024d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d899190611df4565b6001600160a01b031663a6870e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de89190611e86565b90508060c95f9054906101000a90046001600160a01b03166001600160a01b031663f0141d846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5f9190611e86565b610c209085611e37565b335f81815260cb602052604081208054849290610e87908490611dbe565b909155505060c9546040805163381a7dc560e21b815290516001600160a01b039092169163e069f714916004808201926020929091908290030181865afa158015610ed4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef89190611df4565b6040516323b872dd60e01b81526001600160a01b0383811660048301523060248301526044820185905291909116906323b872dd906064016020604051808303815f875af1158015610f4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f709190611e1e565b610f8d5760405163d3544e3f60e01b815260040160405180910390fd5b806001600160a01b03167f112973aa2e3b182a34447572d830c1e97afc414558a08f33554be8e54522425983604051610fc891815260200190565b60405180910390a25050565b610fde81336118cb565b50565b610feb8282610994565b61062f575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556110223390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6110708282610994565b1561062f575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60ff81165f90815260ca6020526040902060030180546110eb90611e4e565b90505f03610fde5760405163015f4fdd60e31b815260040160405180910390fd5b5f805f8060c95f9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611160573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111849190611df4565b604051634721e29d60e11b81526001600160a01b03878116600483015291925090821690638e43c53a90602401602060405180830381865afa1580156111cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f09190611fc5565b60405163133a0ab960e31b815260ff821660048201529094505f906001600160a01b038316906399d055c890602401602060405180830381865afa15801561123a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061125e9190611df4565b604051636564598360e11b81526001600160a01b0388811660048301529192509082169063cac8b30690602401602060405180830381865afa1580156112a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ca9190611e86565b9350816001600160a01b0316635d713ec386885f856001600160a01b031663c34ade5c8a6040518263ffffffff1660e01b815260040161130c91815260200190565b602060405180830381865afa158015611327573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134b9190611e86565b6040516001600160e01b031960e087901b16815260ff90941660048501526001600160a01b03909216602484015260448301526064820152608401602060405180830381865afa1580156113a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c59190611e86565b9496939550505050565b5f8183106113dd57816105ae565b5090919050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015611428573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144c9190611e1e565b61062f5760405163c4230ae360e01b815260040160405180910390fd5b6001600160a01b038116610fde5760405163d92e233d60e01b815260040160405180910390fd5b6002609754036114e25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103ca565b6002609755565b5f80826001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611527573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061154b9190611df4565b60405163133a0ab960e31b815260ff881660048201526001600160a01b0391909116906399d055c890602401602060405180830381865afa158015611592573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b69190611df4565b90505f80826001600160a01b0316635a1239c1886040518263ffffffff1660e01b81526004016115e891815260200190565b5f60405180830381865afa158015611602573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611629919081019061203a565b50509550955050505050816001600160a01b0316866001600160a01b03161461166557604051636aa52cb560e01b815260040160405180910390fd5b604051636450073d60e11b8152600481018290525f906001600160a01b0385169063c8a00e7a906024015f60405180830381865afa1580156116a9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116d091908101906120f9565b9d9c50505050505050505050505050565b6001600160a01b0382165f90815260cb60205260408120549061170483836113cf565b9050805f036117135750505050565b6001600160a01b0384165f90815260cb60205260408120805483929061173a908490611dd1565b909155505060c95460408051630db055fd60e21b815290516001600160a01b03909216916336c157f4916004808201926020929091908290030181865afa158015611787573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ab9190611df4565b6001600160a01b0316637a78e12d826040518263ffffffff1660e01b81526004016117d891815260200190565b5f604051808303815f87803b1580156117ef575f80fd5b505af1158015611801573d5f803e3d5ffd5b5050505060c95f9054906101000a90046001600160a01b03166001600160a01b03166336c157f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611855573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118799190611df4565b6001600160a01b0316846001600160a01b03167fe4a6f5b1a676a94b2af7a506093c172e23d46a5bea6f2d783d4d32c9047800f4836040516118bd91815260200190565b60405180910390a350505050565b6118d58282610994565b61062f576118e281611924565b6118ed836020611936565b6040516020016118fe92919061218e565b60408051601f198184030181529082905262461bcd60e51b82526103ca91600401612202565b60606103826001600160a01b03831660145b60605f611944836002611e37565b61194f906002611dbe565b67ffffffffffffffff81111561196757611967611c96565b6040519080825280601f01601f191660200182016040528015611991576020820181803683370190505b509050600360fc1b815f815181106119ab576119ab612214565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106119d9576119d9612214565b60200101906001600160f81b03191690815f1a9053505f6119fb846002611e37565b611a06906001611dbe565b90505b6001811115611a7d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a3a57611a3a612214565b1a60f81b828281518110611a5057611a50612214565b60200101906001600160f81b03191690815f1a90535060049490941c93611a7681612228565b9050611a09565b5083156105ae5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016103ca565b5f60208284031215611adc575f80fd5b81356001600160e01b0319811681146105ae575f80fd5b5f60208284031215611b03575f80fd5b5035919050565b6001600160a01b0381168114610fde575f80fd5b5f8060408385031215611b2f575f80fd5b823591506020830135611b4181611b0a565b809150509250929050565b60ff81168114610fde575f80fd5b5f805f60608486031215611b6c575f80fd5b8335611b7781611b0a565b92506020840135611b8781611b4c565b929592945050506040919091013590565b5f8060408385031215611ba9575f80fd5b8235611bb481611b4c565b946020939093013593505050565b5f60208284031215611bd2575f80fd5b81356105ae81611b0a565b5f8060408385031215611bee575f80fd5b823591506020830135611b4181611b4c565b5f60208284031215611c10575f80fd5b81356105ae81611b4c565b5f5b83811015611c35578181015183820152602001611c1d565b50505f910152565b5f8151808452611c54816020860160208601611c1b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f611c8c6080830184611c3d565b9695505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cd357611cd3611c96565b604052919050565b5f67ffffffffffffffff821115611cf457611cf4611c96565b50601f01601f191660200190565b5f805f805f60a08688031215611d16575f80fd5b8535611d2181611b4c565b9450602086013593506040860135925060608601359150608086013567ffffffffffffffff811115611d51575f80fd5b8601601f81018813611d61575f80fd5b8035611d74611d6f82611cdb565b611caa565b818152896020838501011115611d88575f80fd5b816020840160208301375f602083830101528093505050509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561038257610382611daa565b8181038181111561038257610382611daa565b8051611def81611b0a565b919050565b5f60208284031215611e04575f80fd5b81516105ae81611b0a565b80518015158114611def575f80fd5b5f60208284031215611e2e575f80fd5b6105ae82611e0f565b808202811582820484141761038257610382611daa565b600181811c90821680611e6257607f821691505b602082108103611e8057634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215611e96575f80fd5b5051919050565b5f82611eb757634e487b7160e01b5f52601260045260245ffd5b500490565b601f821115610566575f81815260208120601f850160051c81016020861015611ee25750805b601f850160051c820191505b81811015611f0157828155600101611eee565b505050505050565b815167ffffffffffffffff811115611f2357611f23611c96565b611f3781611f318454611e4e565b84611ebc565b602080601f831160018114611f6a575f8415611f535750858301515b5f19600386901b1c1916600185901b178555611f01565b5f85815260208120601f198616915b82811015611f9857888601518255948401946001909101908401611f79565b5085821015611fb557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215611fd5575f80fd5b81516105ae81611b4c565b805160068110611def575f80fd5b5f611ffb611d6f84611cdb565b905082815283838301111561200e575f80fd5b6105ae836020830184611c1b565b5f82601f83011261202b575f80fd5b6105ae83835160208501611fee565b5f805f805f805f80610100898b031215612052575f80fd5b61205b89611fe0565b9750602089015167ffffffffffffffff80821115612077575f80fd5b6120838c838d0161201c565b985060408b0151915080821115612098575f80fd5b6120a48c838d0161201c565b975060608b01519150808211156120b9575f80fd5b506120c68b828c0161201c565b9550506120d560808a01611de4565b935060a0890151925060c0890151915060e089015190509295985092959890939650565b5f805f805f60a0868803121561210d575f80fd5b61211686611e0f565b945061212460208701611e0f565b9350604086015167ffffffffffffffff81111561213f575f80fd5b8601601f8101881361214f575f80fd5b61215e88825160208401611fee565b935050606086015161216f81611b0a565b608087015190925061218081611b0a565b809150509295509295909350565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516121c5816017850160208801611c1b565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516121f6816028840160208801611c1b565b01602801949350505050565b602081525f6105ae6020830184611c3d565b634e487b7160e01b5f52603260045260245ffd5b5f8161223657612236611daa565b505f19019056fea2646970667358221220bf0133cdf812781b4e70a5e2f776143fe08173680c3ee60ad06f55bf9178f6e064736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + Bin: "0x608060405234801562000010575f80fd5b50604051620026ad380380620026ad8339810160408190526200003391620003d6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001cb565b6200010e82620001cb565b62000118620001f6565b6200012262000252565b60c980546001600160a01b0319166001600160a01b038416179055620001495f84620002b6565b6040516001600160a01b038316907fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a28015620001c2575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050506200040c565b6001600160a01b038116620001f35760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002505760405162461bcd60e51b815260206004820152602b60248201525f805160206200268d83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002ac5760405162461bcd60e51b815260206004820152602b60248201525f805160206200268d83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200025062000359565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff1662000355575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620003143390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff16620003b35760405162461bcd60e51b815260206004820152602b60248201525f805160206200268d83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6001609755565b80516001600160a01b0381168114620003d1575f80fd5b919050565b5f8060408385031215620003e8575f80fd5b620003f383620003ba565b91506200040360208401620003ba565b90509250929050565b612273806200041a5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c80638a9b3738116100bf578063d547741f11610079578063d547741f146102d4578063dfdafccb146102e7578063e0412f0e146102fa578063e614e17c1461030d578063f9af40b814610320578063fcb7e0321461033f575f80fd5b80638a9b37381461025e57806391d14854146102815780639871a30a146102945780639ee804cb146102a7578063a217fddf146102ba578063b178e38e146102c1575f80fd5b806336568abe1161011057806336568abe146101df578063379b727e146101f25780633909afd3146102055780633e04cd3514610218578063490ffa35146102205780634c538f581461024b575f80fd5b806301ffc9a71461014c578063248a9ca3146101745780632e1a7d4d146101a45780632f2ff15d146101b9578063351691ab146101cc575b5f80fd5b61015f61015a366004611acc565b610352565b60405190151581526020015b60405180910390f35b610196610182366004611af3565b5f9081526065602052604090206001015490565b60405190815260200161016b565b6101b76101b2366004611af3565b610388565b005b6101b76101c7366004611b1e565b610542565b6101966101da366004611b5a565b61056b565b6101b76101ed366004611b1e565b6105b5565b610196610200366004611b98565b610633565b610196610213366004611bc2565b61066d565b6101b7610709565b60c954610233906001600160a01b031681565b6040516001600160a01b03909116815260200161016b565b6101b7610259366004611bdd565b61087c565b61027161026c366004611c00565b6108e4565b60405161016b9493929190611c68565b61015f61028f366004611b1e565b610994565b6101966102a2366004611bc2565b6109be565b6101b76102b5366004611bc2565b610a06565b6101965f81565b61015f6102cf366004611b5a565b610a92565b6101b76102e2366004611b1e565b610aa7565b6101966102f5366004611af3565b610acb565b6101b7610308366004611d02565b610c2a565b61019661031b366004611af3565b610d13565b61019661032e366004611bc2565b60cb6020525f908152604090205481565b6101b761034d366004611af3565b610e69565b5f6001600160e01b03198216637965db0b60e01b148061038257506301ffc9a760e01b6001600160e01b03198316145b92915050565b335f81815260cb6020526040902054826103a1836109be565b6103ab9190611dbe565b8110156103d35760405163f669f60360e01b8152600481018290526024015b60405180910390fd5b6001600160a01b0382165f90815260cb6020526040812080548592906103fa908490611dd1565b909155505060c9546040805163381a7dc560e21b815290516001600160a01b039092169163e069f714916004808201926020929091908290030181865afa158015610447573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046b9190611df4565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201869052919091169063a9059cbb906044016020604051808303815f875af11580156104b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104dd9190611e1e565b6104fa5760405163d3544e3f60e01b815260040160405180910390fd5b816001600160a01b03167f48c1f846fa4bc05385324ee60316f9c6778ed2b5f205a6319678a609b87676078460405161053591815260200190565b60405180910390a2505050565b5f8281526065602052604090206001015461055c81610fd4565b6105668383610fe1565b505050565b6001600160a01b0383165f90815260cb60205260408120548161058e8585610633565b9050808210156105a7576105a28282611dd1565b6105a9565b5f5b925050505b9392505050565b6001600160a01b03811633146106255760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016103ca565b61062f8282611066565b5050565b5f61063d836110cc565b60ff83165f90815260ca60205260409020805461065990610d13565b91506106658383611e37565b949350505050565b5f805f6106798461110c565b9250509150610687826110cc565b60ff82165f90815260ca6020526040812080549091906106a690610d13565b6106b09084611e37565b90505f6106c08360010154610d13565b6106ca9085611e37565b6001600160a01b0388165f90815260cb60205260409020549091508281106106fb576106f681836113cf565b6106fd565b5f5b98975050505050505050565b60c9546107209033906001600160a01b03166113e4565b60c95460408051630db055fd60e21b815290515f926001600160a01b0316916336c157f49160048083019260209291908290030181865afa158015610767573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078b9190611df4565b905061079681611469565b60c95f9054906101000a90046001600160a01b03166001600160a01b031663e069f7146040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080a9190611df4565b60405163095ea7b360e01b81526001600160a01b0383811660048301525f196024830152919091169063095ea7b3906044016020604051808303815f875af1158015610858573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062f9190611e1e565b610884611490565b60c9545f906108a1908390859033906001600160a01b03166114e9565b90506108ac826110cc565b60ff82165f90815260ca6020526040812080549091906108cb90610d13565b90506108d783826116e1565b50505061062f6001609755565b60ca6020525f908152604090208054600182015460028301546003840180549394929391929161091390611e4e565b80601f016020809104026020016040519081016040528092919081815260200182805461093f90611e4e565b801561098a5780601f106109615761010080835404028352916020019161098a565b820191905f5260205f20905b81548152906001019060200180831161096d57829003601f168201915b5050505050905084565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f805f6109ca8461110c565b92505091506109d8826110cc565b60ff82165f90815260ca6020526040902060028101546109fd9061031b908490611e37565b95945050505050565b5f610a1081610fd4565b610a1982611469565b60c9546001600160a01b0390811690831603610a485760405163a28a88c160e01b815260040160405180910390fd5b60c980546001600160a01b0319166001600160a01b0384169081179091556040517fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a25050565b5f610a9e84848461056b565b15949350505050565b5f82815260656020526040902060010154610ac181610fd4565b6105668383611066565b5f8060c95f9054906101000a90046001600160a01b03166001600160a01b031663defd024d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b419190611df4565b6001600160a01b031663a6870e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba09190611e86565b905060c95f9054906101000a90046001600160a01b03166001600160a01b031663f0141d846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c169190611e86565b610c208285611e37565b6105ae9190611e9d565b60c954610c419033906001600160a01b03166113e4565b81841180610c4e57508284115b15610c6c576040516375075b2960e11b815260040160405180910390fd5b6040805160808101825285815260208082018681528284018681526060840186815260ff8b165f90815260ca9094529490922083518155905160018201559051600282015591519091906003820190610cc59082611f09565b50506040805160ff88168152602081018790529081018490527f18757dd1fbfe2ad823e1bd4de3f8a2ee76b49f92f6aa34cc7cbf717cdf4d1758915060600160405180910390a15050505050565b5f8060c95f9054906101000a90046001600160a01b03166001600160a01b031663defd024d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d899190611df4565b6001600160a01b031663a6870e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de89190611e86565b90508060c95f9054906101000a90046001600160a01b03166001600160a01b031663f0141d846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5f9190611e86565b610c209085611e37565b335f81815260cb602052604081208054849290610e87908490611dbe565b909155505060c9546040805163381a7dc560e21b815290516001600160a01b039092169163e069f714916004808201926020929091908290030181865afa158015610ed4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef89190611df4565b6040516323b872dd60e01b81526001600160a01b0383811660048301523060248301526001604483015291909116906323b872dd906064016020604051808303815f875af1158015610f4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f709190611e1e565b610f8d5760405163d3544e3f60e01b815260040160405180910390fd5b806001600160a01b03167f112973aa2e3b182a34447572d830c1e97afc414558a08f33554be8e54522425983604051610fc891815260200190565b60405180910390a25050565b610fde81336118cb565b50565b610feb8282610994565b61062f575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556110223390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6110708282610994565b1561062f575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60ff81165f90815260ca6020526040902060030180546110eb90611e4e565b90505f03610fde5760405163015f4fdd60e31b815260040160405180910390fd5b5f805f8060c95f9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611160573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111849190611df4565b604051634721e29d60e11b81526001600160a01b03878116600483015291925090821690638e43c53a90602401602060405180830381865afa1580156111cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f09190611fc5565b60405163133a0ab960e31b815260ff821660048201529094505f906001600160a01b038316906399d055c890602401602060405180830381865afa15801561123a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061125e9190611df4565b604051636564598360e11b81526001600160a01b0388811660048301529192509082169063cac8b30690602401602060405180830381865afa1580156112a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ca9190611e86565b9350816001600160a01b0316635d713ec386885f856001600160a01b031663c34ade5c8a6040518263ffffffff1660e01b815260040161130c91815260200190565b602060405180830381865afa158015611327573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134b9190611e86565b6040516001600160e01b031960e087901b16815260ff90941660048501526001600160a01b03909216602484015260448301526064820152608401602060405180830381865afa1580156113a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c59190611e86565b9496939550505050565b5f8183106113dd57816105ae565b5090919050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015611428573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144c9190611e1e565b61062f5760405163c4230ae360e01b815260040160405180910390fd5b6001600160a01b038116610fde5760405163d92e233d60e01b815260040160405180910390fd5b6002609754036114e25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103ca565b6002609755565b5f80826001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611527573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061154b9190611df4565b60405163133a0ab960e31b815260ff881660048201526001600160a01b0391909116906399d055c890602401602060405180830381865afa158015611592573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b69190611df4565b90505f80826001600160a01b0316635a1239c1886040518263ffffffff1660e01b81526004016115e891815260200190565b5f60405180830381865afa158015611602573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611629919081019061203a565b50509550955050505050816001600160a01b0316866001600160a01b03161461166557604051636aa52cb560e01b815260040160405180910390fd5b604051636450073d60e11b8152600481018290525f906001600160a01b0385169063c8a00e7a906024015f60405180830381865afa1580156116a9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116d091908101906120f9565b9d9c50505050505050505050505050565b6001600160a01b0382165f90815260cb60205260408120549061170483836113cf565b9050805f036117135750505050565b6001600160a01b0384165f90815260cb60205260408120805483929061173a908490611dd1565b909155505060c95460408051630db055fd60e21b815290516001600160a01b03909216916336c157f4916004808201926020929091908290030181865afa158015611787573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ab9190611df4565b6001600160a01b0316637a78e12d826040518263ffffffff1660e01b81526004016117d891815260200190565b5f604051808303815f87803b1580156117ef575f80fd5b505af1158015611801573d5f803e3d5ffd5b5050505060c95f9054906101000a90046001600160a01b03166001600160a01b03166336c157f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611855573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118799190611df4565b6001600160a01b0316846001600160a01b03167fe4a6f5b1a676a94b2af7a506093c172e23d46a5bea6f2d783d4d32c9047800f4836040516118bd91815260200190565b60405180910390a350505050565b6118d58282610994565b61062f576118e281611924565b6118ed836020611936565b6040516020016118fe92919061218e565b60408051601f198184030181529082905262461bcd60e51b82526103ca91600401612202565b60606103826001600160a01b03831660145b60605f611944836002611e37565b61194f906002611dbe565b67ffffffffffffffff81111561196757611967611c96565b6040519080825280601f01601f191660200182016040528015611991576020820181803683370190505b509050600360fc1b815f815181106119ab576119ab612214565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106119d9576119d9612214565b60200101906001600160f81b03191690815f1a9053505f6119fb846002611e37565b611a06906001611dbe565b90505b6001811115611a7d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a3a57611a3a612214565b1a60f81b828281518110611a5057611a50612214565b60200101906001600160f81b03191690815f1a90535060049490941c93611a7681612228565b9050611a09565b5083156105ae5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016103ca565b5f60208284031215611adc575f80fd5b81356001600160e01b0319811681146105ae575f80fd5b5f60208284031215611b03575f80fd5b5035919050565b6001600160a01b0381168114610fde575f80fd5b5f8060408385031215611b2f575f80fd5b823591506020830135611b4181611b0a565b809150509250929050565b60ff81168114610fde575f80fd5b5f805f60608486031215611b6c575f80fd5b8335611b7781611b0a565b92506020840135611b8781611b4c565b929592945050506040919091013590565b5f8060408385031215611ba9575f80fd5b8235611bb481611b4c565b946020939093013593505050565b5f60208284031215611bd2575f80fd5b81356105ae81611b0a565b5f8060408385031215611bee575f80fd5b823591506020830135611b4181611b4c565b5f60208284031215611c10575f80fd5b81356105ae81611b4c565b5f5b83811015611c35578181015183820152602001611c1d565b50505f910152565b5f8151808452611c54816020860160208601611c1b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f611c8c6080830184611c3d565b9695505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cd357611cd3611c96565b604052919050565b5f67ffffffffffffffff821115611cf457611cf4611c96565b50601f01601f191660200190565b5f805f805f60a08688031215611d16575f80fd5b8535611d2181611b4c565b9450602086013593506040860135925060608601359150608086013567ffffffffffffffff811115611d51575f80fd5b8601601f81018813611d61575f80fd5b8035611d74611d6f82611cdb565b611caa565b818152896020838501011115611d88575f80fd5b816020840160208301375f602083830101528093505050509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561038257610382611daa565b8181038181111561038257610382611daa565b8051611def81611b0a565b919050565b5f60208284031215611e04575f80fd5b81516105ae81611b0a565b80518015158114611def575f80fd5b5f60208284031215611e2e575f80fd5b6105ae82611e0f565b808202811582820484141761038257610382611daa565b600181811c90821680611e6257607f821691505b602082108103611e8057634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215611e96575f80fd5b5051919050565b5f82611eb757634e487b7160e01b5f52601260045260245ffd5b500490565b601f821115610566575f81815260208120601f850160051c81016020861015611ee25750805b601f850160051c820191505b81811015611f0157828155600101611eee565b505050505050565b815167ffffffffffffffff811115611f2357611f23611c96565b611f3781611f318454611e4e565b84611ebc565b602080601f831160018114611f6a575f8415611f535750858301515b5f19600386901b1c1916600185901b178555611f01565b5f85815260208120601f198616915b82811015611f9857888601518255948401946001909101908401611f79565b5085821015611fb557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215611fd5575f80fd5b81516105ae81611b4c565b805160068110611def575f80fd5b5f611ffb611d6f84611cdb565b905082815283838301111561200e575f80fd5b6105ae836020830184611c1b565b5f82601f83011261202b575f80fd5b6105ae83835160208501611fee565b5f805f805f805f80610100898b031215612052575f80fd5b61205b89611fe0565b9750602089015167ffffffffffffffff80821115612077575f80fd5b6120838c838d0161201c565b985060408b0151915080821115612098575f80fd5b6120a48c838d0161201c565b975060608b01519150808211156120b9575f80fd5b506120c68b828c0161201c565b9550506120d560808a01611de4565b935060a0890151925060c0890151915060e089015190509295985092959890939650565b5f805f805f60a0868803121561210d575f80fd5b61211686611e0f565b945061212460208701611e0f565b9350604086015167ffffffffffffffff81111561213f575f80fd5b8601601f8101881361214f575f80fd5b61215e88825160208401611fee565b935050606086015161216f81611b0a565b608087015190925061218081611b0a565b809150509295509295909350565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516121c5816017850160208801611c1b565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516121f6816028840160208801611c1b565b01602801949350505050565b602081525f6105ae6020830184611c3d565b634e487b7160e01b5f52603260045260245ffd5b5f8161223657612236611daa565b505f19019056fea26469706673582212205882f62f0d1caf55b0022380d57ddb99d840014f537ebbdc49f5b7a0e1b9fc7164736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // SDCollateralABI is the input ABI used to generate the binding from. diff --git a/testing/deployHelper_test.go b/testing/deployHelper_test.go index ddc4a167d..47ed1867d 100644 --- a/testing/deployHelper_test.go +++ b/testing/deployHelper_test.go @@ -92,6 +92,10 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { _, err = ethxContract.Mint(auth, acc.Address, eth.EthToWei(100000)) require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + _, err = ethxContract.Mint(auth, acc.Address, eth.EthToWei(100000)) + require.Nil(t, err) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) ethxContract.UpdateStaderConfig(auth, staderCfAddress) @@ -196,6 +200,9 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { exist, err := nrContact.IsExistingOperator(&bind.CallOpts{}, acc.Address) require.Nil(t, err) require.True(t, exist) + + ethxContract.Approve(auth, sdCollateralAddr, eth.EthToWei(100000)) + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) } // GetNextTransaction returns the next transaction in the pending transaction queue diff --git a/testing/node_test.go b/testing/node_test.go index c0d8caa46..2cb144bb7 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -15,6 +15,7 @@ import ( //stader/register.go "github.com/stader-labs/stader-node/stader-lib/utils/eth" + _ "github.com/stader-labs/stader-node/stader-lib/utils/eth" "github.com/stader-labs/stader-node/testing/httptest" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -43,26 +44,35 @@ func (s *StaderNodeSuite) TestNodeDeposit() { // eth.EthToWei(100000). go func() { a := os.Args + err := s.app.Run([]string{ a[0], "api", "node", - "deposit-sd", + "deposit-sd-approve-sd", eth.EthToWei(10000).String(), }) assert.Nil(s.T(), err) - err = s.app.Run([]string{ a[0], "api", - "validator", - "deposit", - "9000000000000000000", - "0", - "1", - "false", + "node", + "deposit-sd", + eth.EthToWei(9000).String(), }) assert.Nil(s.T(), err) + + // err = s.app.Run([]string{ + // a[0], + // "api", + // "validator", + // "deposit", + // "9000000000000000000", + // "0", + // "1", + // "false", + // }) + // assert.Nil(s.T(), err) }() time.Sleep(time.Minute * 3) @@ -90,7 +100,7 @@ func (s *StaderNodeSuite) SetupSuite() { flagSet.StringVar(&cp, "config-path", ConfigPath, "config-path") c := cli.NewContext(s.app, flagSet, nil) - // clUrl := fmt.Sprintf("http://127.0.0.1:%d", 52703) + // clUrl := fmt.Sprintf("http://127.0.0.1:%d", 58674) elUrl := fmt.Sprintf("http://127.0.0.1:%d", 8545) // s.staderConfig(ctx, c, &clUrl, &elUrl) s.staderConfig(ctx, c, nil, &elUrl) From be95fe850e5aac9aa0a6e9ca7b9111731e8e8c3f Mon Sep 17 00:00:00 2001 From: batphonghan Date: Thu, 22 Jun 2023 11:27:56 +0700 Subject: [PATCH 39/90] Refactor --- testing/configHelper_test.go | 2 +- .../contracts/PermissionlessNodeRegistry.go | 2 +- testing/contracts/SDCollateral.go | 2 +- testing/contracts/StaderOracle.go | 6567 +++++++++++++++++ testing/deployHelper_test.go | 67 +- testing/httptest/http.go | 7 + testing/node_test.go | 28 +- 7 files changed, 6638 insertions(+), 37 deletions(-) create mode 100644 testing/contracts/StaderOracle.go diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index ed7d57ae4..76f6b0a75 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -195,7 +195,7 @@ func (s *StaderNodeSuite) staderConfig( ) { t := s.T() - if clUrl == nil && elUrl == nil { + if clUrl == nil || elUrl == nil { fmt.Println("------------ CONNECTING TO KURTOSIS ENGINE ---------------") kurtosis_context.NewKurtosisContextFromLocalEngine() kurtosisCtx, err := kurtosis_context.NewKurtosisContextFromLocalEngine() diff --git a/testing/contracts/PermissionlessNodeRegistry.go b/testing/contracts/PermissionlessNodeRegistry.go index d225898e5..57b59c2cc 100644 --- a/testing/contracts/PermissionlessNodeRegistry.go +++ b/testing/contracts/PermissionlessNodeRegistry.go @@ -44,7 +44,7 @@ type Validator struct { // PermissionlessNodeRegistryMetaData contains all meta data concerning the PermissionlessNodeRegistry contract. var PermissionlessNodeRegistryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOperator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotStaderContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CooldownNotComplete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicatePoolIDOrPoolNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InSufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBondEthValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidKeyCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartAndEndIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MisMatchingInputKeysSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoChangeInState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSDCollateral\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorAlreadyOnBoardedInProtocol\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorIsDeactivate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorNotOnBoarded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PageNumberIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PubkeyAlreadyExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyVerifiedKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyWithdrawnKeysReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UNEXPECTED_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"maxKeyLimitReached\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"AddedValidatorKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"DecreasedTotalActiveValidatorCount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalActiveValidatorCount\",\"type\":\"uint256\"}],\"name\":\"IncreasedTotalActiveValidatorCount\",\"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\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nodeRewardAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"OnboardedOperator\",\"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\":\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransferredCollateralToPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"batchKeyDepositLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedInputKeyCountLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"UpdatedMaxNonTerminalKeyPerOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"UpdatedNextQueuedValidatorIndex\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nodeOperator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardAddress\",\"type\":\"address\"}],\"name\":\"UpdatedOperatorDetails\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"UpdatedSocializingPoolState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"}],\"name\":\"UpdatedValidatorDepositBlock\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedVerifiedKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"UpdatedWithdrawnKeyBatchSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedAsFrontRunned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorMarkedReadyToDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorStatusMarkedAsInvalidSignature\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"validatorId\",\"type\":\"uint256\"}],\"name\":\"ValidatorWithdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COLLATERAL_ETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRONT_RUN_PENALTY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ID\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_preDepositSignature\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_depositSignature\",\"type\":\"bytes[]\"}],\"name\":\"addValidatorKeys\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"}],\"name\":\"changeSocializingPoolState\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllNodeELVaultAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorRewardAddress\",\"outputs\":[{\"internalType\":\"addresspayable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalKeys\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_totalKeys\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeOperator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endIndex\",\"type\":\"uint256\"}],\"name\":\"getOperatorTotalNonTerminalKeys\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"uint256\",\"name\":\"_operatorId\",\"type\":\"uint256\"}],\"name\":\"getSocializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalQueuedValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_pageNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pageSize\",\"type\":\"uint256\"}],\"name\":\"getValidatorsByOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"internalType\":\"structValidator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"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\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"increaseTotalActiveValidatorCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inputKeyCountLimit\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operAddr\",\"type\":\"address\"}],\"name\":\"isExistingOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_pubkey\",\"type\":\"bytes\"}],\"name\":\"isExistingPubkey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_readyToDepositPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_frontRunPubkey\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_invalidSignaturePubkey\",\"type\":\"bytes[]\"}],\"name\":\"markValidatorReadyToDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxNonTerminalKeyPerOperator\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextQueuedValidatorIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextValidatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nodeELRewardVaultByOperatorId\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_optInForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_operatorRewardAddress\",\"type\":\"address\"}],\"name\":\"onboardNodeOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorIDByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"operatorStructById\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"optedForSocializingPool\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"operatorRewardAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operatorAddress\",\"type\":\"address\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queuedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"socializingPoolStateChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"totalActiveValidatorCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferCollateralToPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"}],\"name\":\"updateDepositStatusAndBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_inputKeyCountLimit\",\"type\":\"uint16\"}],\"name\":\"updateInputKeyCountLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_maxNonTerminalKeyPerOperator\",\"type\":\"uint64\"}],\"name\":\"updateMaxNonTerminalKeyPerOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextQueuedValidatorIndex\",\"type\":\"uint256\"}],\"name\":\"updateNextQueuedValidatorIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_operatorName\",\"type\":\"string\"},{\"internalType\":\"addresspayable\",\"name\":\"_rewardAddress\",\"type\":\"address\"}],\"name\":\"updateOperatorDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_verifiedKeysBatchSize\",\"type\":\"uint256\"}],\"name\":\"updateVerifiedKeysBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"validatorIdByPubkey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorIdsByOperatorId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorQueueSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validatorRegistry\",\"outputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"preDepositSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"depositSignature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"withdrawVaultAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"operatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"depositBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawnBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifiedKeyBatchSize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"withdrawnValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b5060405162004d8b38038062004d8b8339810160408190526200003391620004c6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001f1565b6200010e82620001f1565b620001186200021c565b6200012262000278565b6200012c620002dc565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff00009091166a01000000000000000000006001600160a01b0386160261ffff1916171762010000600160501b03191662320000179055603260fc55620001a25f8462000340565b8015620001e8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620004fc565b6001600160a01b038116620002195760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002765760405162461bcd60e51b815260206004820152602b60248201525f8051602062004d6b83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002d25760405162461bcd60e51b815260206004820152602b60248201525f8051602062004d6b83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b62000276620003e3565b5f54610100900460ff16620003365760405162461bcd60e51b815260206004820152602b60248201525f8051602062004d6b83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200027662000449565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16620003df575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200039e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff166200043d5760405162461bcd60e51b815260206004820152602b60248201525f8051602062004d6b83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff16620004a35760405162461bcd60e51b815260206004820152602b60248201525f8051602062004d6b83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b0381168114620004c1575f80fd5b919050565b5f8060408385031215620004d8575f80fd5b620004e383620004aa565b9150620004f360208401620004aa565b90509250929050565b614861806200050a5f395ff3fe60806040526004361061035b575f3560e01c806383ea2358116101bd578063bb7306bf116100f2578063deacde2b11610092578063ebb5c1741161006d578063ebb5c17414610a64578063f7c0918914610a90578063f90b083814610aa5578063f9c4dda414610ac4575f80fd5b8063deacde2b146109fe578063e0bf8b5314610a11578063e0d7d0e914610a3e575f80fd5b8063c8a00e7a116100cd578063c8a00e7a14610964578063cac8b30614610994578063d547741f146109c0578063d5e1e5ce146109df575f80fd5b8063bb7306bf146108f1578063bc4a3ad51461090c578063c34ade5c14610938575f80fd5b8063998888981161015d578063ab3e71eb11610138578063ab3e71eb14610884578063af533aa814610899578063b01db078146108b8578063b8d2f06c146108d2575f80fd5b806399888898146108335780639ee804cb14610852578063a217fddf14610871575f80fd5b806384b0fa4c1161019857806384b0fa4c146107aa5780638a25bcec146107c057806391d14854146107df5780639344b242146107fe575f80fd5b806383ea23581461073257806384522a6d1461076a5780638456cb5914610796575f80fd5b806349911bfb116102935780635c2c30a511610233578063683547b81161020e578063683547b8146106c757806374338e6d146106f357806377c359e1146107095780637bd977d91461071e575f80fd5b80635c2c30a5146106595780635c975abb1461069157806360c3cf3f146106a8575f80fd5b806358a994ea1161026e57806358a994ea146105c957806359c3c9b7146105e85780635a1239c1146106075780635ae7f25d1461063a575f80fd5b806349911bfb1461055c5780634f59ed801461057157806350d5d7ab1461058c575f80fd5b80632d1dbd74116102fe57806336514d9f116102d957806336514d9f146104e457806336568abe146105035780633f4ba83a14610522578063490ffa3514610536575f80fd5b80632d1dbd74146104845780632d32924f146104995780632f2ff15d146104c5575f80fd5b8063186d954111610339578063186d9541146103eb578063248a9ca31461040a5780632517cfbf14610446578063264f27f314610465575f80fd5b806301ffc9a71461035f578063044d2fe81461039357806313797bff146103ca575b5f80fd5b34801561036a575f80fd5b5061037e610379366004613d03565b610afb565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103b26103ad366004613d8f565b610b31565b6040516001600160a01b03909116815260200161038a565b3480156103d5575f80fd5b506103e96103e4366004613e32565b610f50565b005b3480156103f6575f80fd5b506103e9610405366004613ec4565b611397565b348015610415575f80fd5b50610438610424366004613ec4565b5f9081526065602052604090206001015490565b60405190815260200161038a565b348015610451575f80fd5b506103e9610460366004613edb565b611447565b348015610470575f80fd5b506103e961047f366004613efc565b6114a9565b34801561048f575f80fd5b5061043860fd5481565b3480156104a4575f80fd5b506104b86104b3366004613f3a565b6116f4565b60405161038a9190613f5a565b3480156104d0575f80fd5b506103e96104df366004613fa6565b611828565b3480156104ef575f80fd5b5061037e6104fe366004613fd4565b61184c565b34801561050e575f80fd5b506103e961051d366004613fa6565b611879565b34801561052d575f80fd5b506103e96118fc565b348015610541575f80fd5b5060fb546103b290600160501b90046001600160a01b031681565b348015610567575f80fd5b5061043860ff5481565b34801561057c575f80fd5b50610438673782dace9d90000081565b348015610597575f80fd5b5060fb546105b1906201000090046001600160401b031681565b6040516001600160401b03909116815260200161038a565b3480156105d4575f80fd5b506103e96105e3366004614006565b611924565b3480156105f3575f80fd5b506103e9610602366004613ec4565b611aa2565b348015610612575f80fd5b50610626610621366004613ec4565b611b42565b60405161038a9897969594939291906140d9565b348015610645575f80fd5b506103e9610654366004613ec4565b611d24565b348015610664575f80fd5b50610438610673366004614166565b80516020818301810180516101038252928201919093012091525481565b34801561069c575f80fd5b5060975460ff1661037e565b3480156106b3575f80fd5b506103e96106c2366004614210565b611e8b565b3480156106d2575f80fd5b506106e66106e1366004614236565b611f05565b60405161038a9190614268565b3480156106fe575f80fd5b506104386101005481565b348015610714575f80fd5b5061010154610438565b348015610729575f80fd5b506104386122bc565b34801561073d575f80fd5b506103b261074c366004613ec4565b5f90815261010560205260409020600201546001600160a01b031690565b348015610775575f80fd5b50610438610784366004613ec4565b6101086020525f908152604090205481565b3480156107a1575f80fd5b506103e96122d3565b3480156107b5575f80fd5b506104386101015481565b3480156107cb575f80fd5b506105b16107da366004614236565b6122f9565b3480156107ea575f80fd5b5061037e6107f9366004613fa6565b6123c4565b348015610809575f80fd5b506103b2610818366004613ec4565b6101096020525f90815260409020546001600160a01b031681565b34801561083e575f80fd5b506106e661084d366004613f3a565b6123ee565b34801561085d575f80fd5b506103e961086c366004614352565b612739565b34801561087c575f80fd5b506104385f81565b34801561088f575f80fd5b5061043860fc5481565b3480156108a4575f80fd5b506103e96108b3366004613ec4565b6127c2565b3480156108c3575f80fd5b50673782dace9d900000610438565b3480156108dd575f80fd5b506103e96108ec366004613ec4565b612815565b3480156108fc575f80fd5b506104386729a2241af62c000081565b348015610917575f80fd5b50610438610926366004613ec4565b6101046020525f908152604090205481565b348015610943575f80fd5b50610438610952366004613ec4565b5f908152610107602052604090205490565b34801561096f575f80fd5b5061098361097e366004613ec4565b6128a0565b60405161038a95949392919061436d565b34801561099f575f80fd5b506104386109ae366004614352565b6101066020525f908152604090205481565b3480156109cb575f80fd5b506103e96109da366004613fa6565b612969565b3480156109ea575f80fd5b506104386109f9366004613f3a565b61298d565b6103e9610a0c366004613e32565b6129b9565b348015610a1c575f80fd5b5060fb54610a2b9061ffff1681565b60405161ffff909116815260200161038a565b348015610a49575f80fd5b50610a52600181565b60405160ff909116815260200161038a565b348015610a6f575f80fd5b50610438610a7e366004613ec4565b5f908152610108602052604090205490565b348015610a9b575f80fd5b5061043860fe5481565b348015610ab0575f80fd5b506103b2610abf3660046143b1565b6129f3565b348015610acf575f80fd5b5061037e610ade366004614352565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b2b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b3a612c5c565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb091906143cc565b905060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2791906143cc565b604051636fc4c27f60e11b8152600160048201526001600160a01b039182169183169063df8984fe90602401602060405180830381865afa158015610c6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9291906143cc565b6001600160a01b031614610cb9576040516303b8ffef60e41b815260040160405180910390fd5b604051639f7053f560e01b81526001600160a01b03821690639f7053f590610ce7908890889060040161440f565b5f604051808303815f87803b158015610cfe575f80fd5b505af1158015610d10573d5f803e3d5ffd5b50505050610d1d83612ca2565b604051633e71376960e21b81523360048201526001600160a01b0382169063f9c4dda490602401602060405180830381865afa158015610d5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d83919061442a565b15610da15760405163707999fb60e11b815260040160405180910390fd5b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e1791906143cc565b60fd54604051636a0b688160e01b81526001600482015260248101919091526001600160a01b039190911690636a0b6881906044016020604051808303815f875af1158015610e68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8c91906143cc565b60fd545f9081526101096020526040902080546001600160a01b0319166001600160a01b038316179055905086610ec35780610f38565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3891906143cc565b9250610f4687878787612cc9565b5050949350505050565b610f58612e57565b610f60612c5c565b60fb5460408051633871d0f160e01b81529051610fde923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd99190614445565b612eb0565b60fc5485908490839081610ff28486614470565b610ffc9190614470565b111561101b5760405163525e3de760e01b815260040160405180910390fd5b5f5b838110156110e4575f6101038b8b8481811061103b5761103b614483565b905060200281019061104d9190614497565b60405161105b9291906144d9565b908152602001604051809103902054905061107581612f3c565b61107e81612f88565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b848181106110b1576110b1614483565b90506020028101906110c39190614497565b836040516110d3939291906144e8565b60405180910390a15060010161101d565b5081156111c15760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116091906143cc565b6001600160a01b0316638d0d8cb66111806729a2241af62c00008561450b565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156111a9575f80fd5b505af11580156111bb573d5f803e3d5ffd5b50505050505b5f5b828110156112b7575f6101038989848181106111e1576111e1614483565b90506020028101906111f39190614497565b6040516112019291906144d9565b908152602001604051809103902054905061121b81612f3c565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b8346689898481811061128457611284614483565b90506020028101906112969190614497565b836040516112a6939291906144e8565b60405180910390a1506001016111c3565b505f5b81811015611381575f6101038787848181106112d8576112d8614483565b90506020028101906112ea9190614497565b6040516112f89291906144d9565b908152602001604051809103902054905061131281612f3c565b61131b81612fc9565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f87878481811061134e5761134e614483565b90506020028101906113609190614497565b83604051611370939291906144e8565b60405180910390a1506001016112ba565b5050505061138f600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b815290516113ec923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb54611465903390600160501b90046001600160a01b0316613158565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c369060200161143c565b60fb5460408051633871d0f160e01b815290516114fe923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa15801561154c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115709190614445565b81111561159057604051639519af4360e01b815260040160405180910390fd5b5f5b818110156116e5575f6101038585848181106115b0576115b0614483565b90506020028101906115c29190614497565b6040516115d09291906144d9565b90815260200160405180910390205490506115ea816131dd565b611607576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b158015611669575f80fd5b505af115801561167b573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf798585848181106116b2576116b2614483565b90506020028101906116c49190614497565b836040516116d4939291906144e8565b60405180910390a150600101611592565b506116ef81613428565b505050565b6060825f03611716576040516334d6e01560e01b815260040160405180910390fd5b5f82611723600186614522565b61172d919061450b565b611738906001614470565b90505f6117458483614470565b905060fd548111611756578061175a565b60fd545b90505f82821161176a575f611774565b6117748383614522565b6001600160401b0381111561178b5761178b614152565b6040519080825280602002602001820160405280156117b4578160200160208202803683370190505b509050825b8281101561181e575f81815261010960205260409020546001600160a01b0316826117e48684614522565b815181106117f4576117f4614483565b6001600160a01b03909216602092830291909101909101528061181681614535565b9150506117b9565b5095945050505050565b5f8281526065602052604090206001015461184281613473565b6116ef838361347d565b5f61010383836040516118609291906144d9565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146118ee5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6118f88282613502565b5050565b60fb5461191a903390600160501b90046001600160a01b0316613568565b6119226135ed565b565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611975573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199991906143cc565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b81526004016119c692919061440f565b5f604051808303815f87803b1580156119dd575f80fd5b505af11580156119ef573d5f803e3d5ffd5b505050506119fc81612ca2565b611a053361363f565b50335f9081526101066020908152604080832054808452610105909252909120600101611a338486836145ca565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d8726977790611a9490879087908790614685565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b81529051611af7923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b806101015f828254611b099190614470565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f29060200161143c565b6101026020525f90815260409020805460018201805460ff9092169291611b689061454d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b949061454d565b8015611bdf5780601f10611bb657610100808354040283529160200191611bdf565b820191905f5260205f20905b815481529060010190602001808311611bc257829003601f168201915b505050505090806002018054611bf49061454d565b80601f0160208091040260200160405190810160405280929190818152602001828054611c209061454d565b8015611c6b5780601f10611c4257610100808354040283529160200191611c6b565b820191905f5260205f20905b815481529060010190602001808311611c4e57829003601f168201915b505050505090806003018054611c809061454d565b80601f0160208091040260200160405190810160405280929190818152602001828054611cac9061454d565b8015611cf75780601f10611cce57610100808354040283529160200191611cf7565b820191905f5260205f20905b815481529060010190602001808311611cda57829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611d2c612e57565b60fb5460408051637a87fa0b60e01b81529051611d81923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df691906143cc565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611e2e575f80fd5b505af1158015611e40573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a81604051611e7691815260200190565b60405180910390a1611e88600160c955565b50565b60fb54611ea9903390600160501b90046001600160a01b0316613568565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a29060200161143c565b6060825f03611f27576040516334d6e01560e01b815260040160405180910390fd5b5f82611f34600186614522565b611f3e919061450b565b90505f611f4b8483614470565b6001600160a01b0387165f9081526101066020526040812054919250819003611f875760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311611fa35782611fa5565b805b92505f848411611fb5575f611fbf565b611fbf8585614522565b6001600160401b03811115611fd657611fd6614152565b60405190808252806020026020018201604052801561200f57816020015b611ffc613cb9565b815260200190600190039081611ff45790505b509050845b848110156122af575f8481526101076020526040812080548390811061203c5761203c614483565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff16600581111561207e5761207e614058565b600581111561208f5761208f614058565b81526020016001820180546120a39061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546120cf9061454d565b801561211a5780601f106120f15761010080835404028352916020019161211a565b820191905f5260205f20905b8154815290600101906020018083116120fd57829003601f168201915b505050505081526020016002820180546121339061454d565b80601f016020809104026020016040519081016040528092919081815260200182805461215f9061454d565b80156121aa5780601f10612181576101008083540402835291602001916121aa565b820191905f5260205f20905b81548152906001019060200180831161218d57829003601f168201915b505050505081526020016003820180546121c39061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546121ef9061454d565b801561223a5780601f106122115761010080835404028352916020019161223a565b820191905f5260205f20905b81548152906001019060200180831161221d57829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152836122808985614522565b8151811061229057612290614483565b60200260200101819052505080806122a790614535565b915050612014565b5098975050505050505050565b5f6101005460ff546122ce9190614522565b905090565b60fb546122f1903390600160501b90046001600160a01b0316613568565b6119226136ad565b5f8183111561231b5760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f90815261010660205260408120549061234b825f908152610107602052604090205490565b905080841161235a578361235c565b805b93505f855b858110156123b9575f8481526101076020526040812080548390811061238957612389614483565b905f5260205f200154905061239d816136ea565b156123b057826123ac816146b0565b9350505b50600101612361565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f03612410576040516334d6e01560e01b815260040160405180910390fd5b5f8261241d600186614522565b612427919061450b565b612432906001614470565b90505f61243f8483614470565b905060fe5481116124505780612454565b60fe545b90505f846001600160401b0381111561246f5761246f614152565b6040519080825280602002602001820160405280156124a857816020015b612495613cb9565b81526020019060019003908161248d5790505b5090505f835b8381101561272d576124bf816131dd565b1561271b575f818152610102602052604090819020815161010081019092528054829060ff1660058111156124f6576124f6614058565b600581111561250757612507614058565b815260200160018201805461251b9061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546125479061454d565b80156125925780601f1061256957610100808354040283529160200191612592565b820191905f5260205f20905b81548152906001019060200180831161257557829003601f168201915b505050505081526020016002820180546125ab9061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546125d79061454d565b80156126225780601f106125f957610100808354040283529160200191612622565b820191905f5260205f20905b81548152906001019060200180831161260557829003601f168201915b5050505050815260200160038201805461263b9061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546126679061454d565b80156126b25780601f10612689576101008083540402835291602001916126b2565b820191905f5260205f20905b81548152906001019060200180831161269557829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152835184908490811061270157612701614483565b6020026020010181905250818061271790614535565b9250505b8061272581614535565b9150506124ae565b50815295945050505050565b5f61274381613473565b61274c82612ca2565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb546127e0903390600160501b90046001600160a01b0316613158565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b49060200161143c565b60fb5460408051637a87fa0b60e01b8152905161286a923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da99060200161143c565b6101056020525f90815260409020805460018201805460ff80841694610100909404169291906128cf9061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546128fb9061454d565b80156129465780601f1061291d57610100808354040283529160200191612946565b820191905f5260205f20905b81548152906001019060200180831161292957829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f8281526065602052604090206001015461298381613473565b6116ef8383613502565b610107602052815f5260405f2081815481106129a7575f80fd5b905f5260205f20015f91509150505481565b6129c1612e57565b6129c9612c5c565b5f6129d33361363f565b90505f806129e388878686613970565b5050600160c9555061138f915050565b5f806129fe3361363f565b5f818152610105602052604090205490915083151561010090910460ff16151503612a3c57604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ab19190614445565b5f8281526101086020526040902054612aca9190614470565b431015612aea5760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b031691508215612be1576001600160a01b0382163115612b6957816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612b52575f80fd5b505af1158015612b64573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bde91906143cc565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff16156119225760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016118e5565b6001600160a01b038116611e885760405163d92e233d60e01b815260040160405180910390fd5b6040518060a00160405280600115158152602001851515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b0384166020808401919091523360409384015260fd548252610105815290829020835181549285015161ffff1990931690151561ff0019161761010092151592909202919091178155908201516001820190612d7f90826146d5565b5060608201516002820180546001600160a01b03199081166001600160a01b039384161790915560809093015160039092018054909316911617905560fd8054335f90815261010660209081526040808320849055928252610108905290812043905581549190612def83614535565b9190505550336001600160a01b03167f55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd482600160fd54612e2f9190614522565b604080516001600160a01b039093168352602083019190915287151590820152606001611a94565b600260c95403612ea95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016118e5565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa158015612efb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f1f919061442a565b6116ef5760405163168dfea160e01b815260040160405180910390fd5b801580612f6a57505f818152610102602052604081205460ff166005811115612f6757612f67614058565b14155b15611e88576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff805484526101049092528220839055805491612fc183614535565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa158015613046573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061306a91906143cc565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ed9190614445565b6130ff90673782dace9d900000614522565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b15801561313c575f80fd5b505af115801561314e573d5f803e3d5ffd5b5050505050505050565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa15801561319c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131c0919061442a565b6118f85760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff16600581111561321257613212614058565b600581111561322357613223614058565b81526020016001820180546132379061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546132639061454d565b80156132ae5780601f10613285576101008083540402835291602001916132ae565b820191905f5260205f20905b81548152906001019060200180831161329157829003601f168201915b505050505081526020016002820180546132c79061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546132f39061454d565b801561333e5780601f106133155761010080835404028352916020019161333e565b820191905f5260205f20905b81548152906001019060200180831161332157829003601f168201915b505050505081526020016003820180546133579061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546133839061454d565b80156133ce5780601f106133a5576101008083540402835291602001916133ce565b820191905f5260205f20905b8154815290600101906020018083116133b157829003601f168201915b50505091835250506004828101546001600160a01b0316602083015260058301546040830152600683015460608301526007909201546080909101529091508151600581111561342057613420614058565b149392505050565b806101015f82825461343a9190614522565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece39060200161143c565b611e888133613a69565b61348782826123c4565b6118f8575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556134be3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61350c82826123c4565b156118f8575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa1580156135ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135d0919061442a565b6118f85760405163c4230ae360e01b815260040160405180910390fd5b6135f5613ac2565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381165f9081526101066020526040812054908190036136795760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff166136a85760405163c11cb1df60e01b815260040160405180910390fd5b919050565b6136b5612c5c565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586136223390565b5f818152610102602052604080822081516101008101909252805483929190829060ff16600581111561371f5761371f614058565b600581111561373057613730614058565b81526020016001820180546137449061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546137709061454d565b80156137bb5780601f10613792576101008083540402835291602001916137bb565b820191905f5260205f20905b81548152906001019060200180831161379e57829003601f168201915b505050505081526020016002820180546137d49061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546138009061454d565b801561384b5780601f106138225761010080835404028352916020019161384b565b820191905f5260205f20905b81548152906001019060200180831161382e57829003601f168201915b505050505081526020016003820180546138649061454d565b80601f01602080910402602001604051908101604052809291908181526020018280546138909061454d565b80156138db5780601f106138b2576101008083540402835291602001916138db565b820191905f5260205f20905b8154815290600101906020018083116138be57829003601f168201915b505050918352505060048201546001600160a01b031660208201526005808301546040830152600683015460608301526007909201546080909101529091508151600581111561392d5761392d614058565b148061394b575060028151600581111561394957613949614058565b145b80613968575060018151600581111561396657613966614058565b145b159392505050565b5f8084861415806139815750838614155b1561399f5760405163e5fe884360e01b815260040160405180910390fd5b8591508115806139b4575060fb5461ffff1682115b156139d2576040516379b348ff60e11b815260040160405180910390fd5b505f8281526101076020526040812054906139ee3382846122f9565b60fb546001600160401b03918216925062010000900416613a0f8483614470565b1115613a2e57604051633e10caad60e21b815260040160405180910390fd5b613a40673782dace9d9000008461450b565b3414613a5f57604051635aaa2d1f60e01b815260040160405180910390fd5b5094509492505050565b613a7382826123c4565b6118f857613a8081613b0b565b613a8b836020613b1d565b604051602001613a9c929190614790565b60408051601f198184030181529082905262461bcd60e51b82526118e591600401614804565b60975460ff166119225760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016118e5565b6060610b2b6001600160a01b03831660145b60605f613b2b83600261450b565b613b36906002614470565b6001600160401b03811115613b4d57613b4d614152565b6040519080825280601f01601f191660200182016040528015613b77576020820181803683370190505b509050600360fc1b815f81518110613b9157613b91614483565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110613bbf57613bbf614483565b60200101906001600160f81b03191690815f1a9053505f613be184600261450b565b613bec906001614470565b90505b6001811115613c63576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613c2057613c20614483565b1a60f81b828281518110613c3657613c36614483565b60200101906001600160f81b03191690815f1a90535060049490941c93613c5c81614816565b9050613bef565b508315613cb25760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016118e5565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f60208284031215613d13575f80fd5b81356001600160e01b031981168114613cb2575f80fd5b8015158114611e88575f80fd5b5f8083601f840112613d47575f80fd5b5081356001600160401b03811115613d5d575f80fd5b602083019150836020828501011115613d74575f80fd5b9250929050565b6001600160a01b0381168114611e88575f80fd5b5f805f8060608587031215613da2575f80fd5b8435613dad81613d2a565b935060208501356001600160401b03811115613dc7575f80fd5b613dd387828801613d37565b9094509250506040850135613de781613d7b565b939692955090935050565b5f8083601f840112613e02575f80fd5b5081356001600160401b03811115613e18575f80fd5b6020830191508360208260051b8501011115613d74575f80fd5b5f805f805f8060608789031215613e47575f80fd5b86356001600160401b0380821115613e5d575f80fd5b613e698a838b01613df2565b90985096506020890135915080821115613e81575f80fd5b613e8d8a838b01613df2565b90965094506040890135915080821115613ea5575f80fd5b50613eb289828a01613df2565b979a9699509497509295939492505050565b5f60208284031215613ed4575f80fd5b5035919050565b5f60208284031215613eeb575f80fd5b813561ffff81168114613cb2575f80fd5b5f8060208385031215613f0d575f80fd5b82356001600160401b03811115613f22575f80fd5b613f2e85828601613df2565b90969095509350505050565b5f8060408385031215613f4b575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b81811015613f9a5783516001600160a01b031683529284019291840191600101613f75565b50909695505050505050565b5f8060408385031215613fb7575f80fd5b823591506020830135613fc981613d7b565b809150509250929050565b5f8060208385031215613fe5575f80fd5b82356001600160401b03811115613ffa575f80fd5b613f2e85828601613d37565b5f805f60408486031215614018575f80fd5b83356001600160401b0381111561402d575f80fd5b61403986828701613d37565b909450925050602084013561404d81613d7b565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b6006811061408857634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b838110156140a657818101518382015260200161408e565b50505f910152565b5f81518084526140c581602086016020860161408c565b601f01601f19169290920160200192915050565b5f6101006140e7838c61406c565b8060208401526140f98184018b6140ae565b9050828103604084015261410d818a6140ae565b9050828103606084015261412181896140ae565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215614176575f80fd5b81356001600160401b038082111561418c575f80fd5b818401915084601f83011261419f575f80fd5b8135818111156141b1576141b1614152565b604051601f8201601f19908116603f011681019083821181831017156141d9576141d9614152565b816040528281528760208487010111156141f1575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f60208284031215614220575f80fd5b81356001600160401b0381168114613cb2575f80fd5b5f805f60608486031215614248575f80fd5b833561425381613d7b565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b8381101561434457603f1989840301855281516101006142ae85835161406c565b88820151818a8701526142c3828701826140ae565b91505087820151858203898701526142db82826140ae565b915050606080830151868303828801526142f583826140ae565b92505050608080830151614313828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e0918201519190940152938601939086019060010161428d565b509098975050505050505050565b5f60208284031215614362575f80fd5b8135613cb281613d7b565b8515158152841515602082015260a060408201525f61438f60a08301866140ae565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f602082840312156143c1575f80fd5b8135613cb281613d2a565b5f602082840312156143dc575f80fd5b8151613cb281613d7b565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6144226020830184866143e7565b949350505050565b5f6020828403121561443a575f80fd5b8151613cb281613d2a565b5f60208284031215614455575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2b57610b2b61445c565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e198436030181126144ac575f80fd5b8301803591506001600160401b038211156144c5575f80fd5b602001915036819003821315613d74575f80fd5b818382375f9101908152919050565b604081525f6144fb6040830185876143e7565b9050826020830152949350505050565b8082028115828204841417610b2b57610b2b61445c565b81810381811115610b2b57610b2b61445c565b5f600182016145465761454661445c565b5060010190565b600181811c9082168061456157607f821691505b60208210810361457f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156116ef575f81815260208120601f850160051c810160208610156145ab5750805b601f850160051c820191505b8181101561138f578281556001016145b7565b6001600160401b038311156145e1576145e1614152565b6145f5836145ef835461454d565b83614585565b5f601f841160018114614626575f851561460f5750838201355b5f19600387901b1c1916600186901b17835561467e565b5f83815260209020601f19861690835b828110156146565786850135825560209485019460019092019101614636565b5086821015614672575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f6146986040830185876143e7565b905060018060a01b0383166020830152949350505050565b5f6001600160401b038083168181036146cb576146cb61445c565b6001019392505050565b81516001600160401b038111156146ee576146ee614152565b614702816146fc845461454d565b84614585565b602080601f831160018114614735575f841561471e5750858301515b5f19600386901b1c1916600185901b17855561138f565b5f85815260208120601f198616915b8281101561476357888601518255948401946001909101908401614744565b508582101561478057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516147c781601785016020880161408c565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516147f881602884016020880161408c565b01602801949350505050565b602081525f613cb260208301846140ae565b5f816148245761482461445c565b505f19019056fea2646970667358221220ebed37ccddf2fca28f32cd052d98b350ef03dbc2b793f23e7c497a6e45c8a91364736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + Bin: "0x608060405234801562000010575f80fd5b50604051620052f3380380620052f38339810160408190526200003391620004c6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001f1565b6200010e82620001f1565b620001186200021c565b6200012262000278565b6200012c620002dc565b60fb8054600160fd81905560fe55601e7fffff0000000000000000000000000000000000000000ffffffffffffffff00009091166a01000000000000000000006001600160a01b0386160261ffff1916171762010000600160501b03191662320000179055603260fc55620001a25f8462000340565b8015620001e8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620004fc565b6001600160a01b038116620002195760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002765760405162461bcd60e51b815260206004820152602b60248201525f80516020620052d383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002d25760405162461bcd60e51b815260206004820152602b60248201525f80516020620052d383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b62000276620003e3565b5f54610100900460ff16620003365760405162461bcd60e51b815260206004820152602b60248201525f80516020620052d383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200027662000449565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16620003df575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200039e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff166200043d5760405162461bcd60e51b815260206004820152602b60248201525f80516020620052d383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff16620004a35760405162461bcd60e51b815260206004820152602b60248201525f80516020620052d383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b0381168114620004c1575f80fd5b919050565b5f8060408385031215620004d8575f80fd5b620004e383620004aa565b9150620004f360208401620004aa565b90509250929050565b614dc9806200050a5f395ff3fe60806040526004361061035b575f3560e01c806383ea2358116101bd578063bb7306bf116100f2578063deacde2b11610092578063ebb5c1741161006d578063ebb5c17414610a64578063f7c0918914610a90578063f90b083814610aa5578063f9c4dda414610ac4575f80fd5b8063deacde2b146109fe578063e0bf8b5314610a11578063e0d7d0e914610a3e575f80fd5b8063c8a00e7a116100cd578063c8a00e7a14610964578063cac8b30614610994578063d547741f146109c0578063d5e1e5ce146109df575f80fd5b8063bb7306bf146108f1578063bc4a3ad51461090c578063c34ade5c14610938575f80fd5b8063998888981161015d578063ab3e71eb11610138578063ab3e71eb14610884578063af533aa814610899578063b01db078146108b8578063b8d2f06c146108d2575f80fd5b806399888898146108335780639ee804cb14610852578063a217fddf14610871575f80fd5b806384b0fa4c1161019857806384b0fa4c146107aa5780638a25bcec146107c057806391d14854146107df5780639344b242146107fe575f80fd5b806383ea23581461073257806384522a6d1461076a5780638456cb5914610796575f80fd5b806349911bfb116102935780635c2c30a511610233578063683547b81161020e578063683547b8146106c757806374338e6d146106f357806377c359e1146107095780637bd977d91461071e575f80fd5b80635c2c30a5146106595780635c975abb1461069157806360c3cf3f146106a8575f80fd5b806358a994ea1161026e57806358a994ea146105c957806359c3c9b7146105e85780635a1239c1146106075780635ae7f25d1461063a575f80fd5b806349911bfb1461055c5780634f59ed801461057157806350d5d7ab1461058c575f80fd5b80632d1dbd74116102fe57806336514d9f116102d957806336514d9f146104e457806336568abe146105035780633f4ba83a14610522578063490ffa3514610536575f80fd5b80632d1dbd74146104845780632d32924f146104995780632f2ff15d146104c5575f80fd5b8063186d954111610339578063186d9541146103eb578063248a9ca31461040a5780632517cfbf14610446578063264f27f314610465575f80fd5b806301ffc9a71461035f578063044d2fe81461039357806313797bff146103ca575b5f80fd5b34801561036a575f80fd5b5061037e610379366004614223565b610afb565b60405190151581526020015b60405180910390f35b34801561039e575f80fd5b506103b26103ad3660046142af565b610b31565b6040516001600160a01b03909116815260200161038a565b3480156103d5575f80fd5b506103e96103e4366004614352565b610f50565b005b3480156103f6575f80fd5b506103e96104053660046143e4565b611397565b348015610415575f80fd5b506104386104243660046143e4565b5f9081526065602052604090206001015490565b60405190815260200161038a565b348015610451575f80fd5b506103e96104603660046143fb565b611447565b348015610470575f80fd5b506103e961047f36600461441c565b6114a9565b34801561048f575f80fd5b5061043860fd5481565b3480156104a4575f80fd5b506104b86104b336600461445a565b6116f4565b60405161038a919061447a565b3480156104d0575f80fd5b506103e96104df3660046144c6565b611828565b3480156104ef575f80fd5b5061037e6104fe3660046144f4565b61184c565b34801561050e575f80fd5b506103e961051d3660046144c6565b611879565b34801561052d575f80fd5b506103e96118fc565b348015610541575f80fd5b5060fb546103b290600160501b90046001600160a01b031681565b348015610567575f80fd5b5061043860ff5481565b34801561057c575f80fd5b50610438673782dace9d90000081565b348015610597575f80fd5b5060fb546105b1906201000090046001600160401b031681565b6040516001600160401b03909116815260200161038a565b3480156105d4575f80fd5b506103e96105e3366004614526565b611924565b3480156105f3575f80fd5b506103e96106023660046143e4565b611aa2565b348015610612575f80fd5b506106266106213660046143e4565b611b42565b60405161038a9897969594939291906145f9565b348015610645575f80fd5b506103e96106543660046143e4565b611d24565b348015610664575f80fd5b50610438610673366004614686565b80516020818301810180516101038252928201919093012091525481565b34801561069c575f80fd5b5060975460ff1661037e565b3480156106b3575f80fd5b506103e96106c2366004614730565b611e8b565b3480156106d2575f80fd5b506106e66106e1366004614756565b611f05565b60405161038a9190614788565b3480156106fe575f80fd5b506104386101005481565b348015610714575f80fd5b5061010154610438565b348015610729575f80fd5b506104386122bc565b34801561073d575f80fd5b506103b261074c3660046143e4565b5f90815261010560205260409020600201546001600160a01b031690565b348015610775575f80fd5b506104386107843660046143e4565b6101086020525f908152604090205481565b3480156107a1575f80fd5b506103e96122d3565b3480156107b5575f80fd5b506104386101015481565b3480156107cb575f80fd5b506105b16107da366004614756565b6122f9565b3480156107ea575f80fd5b5061037e6107f93660046144c6565b6123c4565b348015610809575f80fd5b506103b26108183660046143e4565b6101096020525f90815260409020546001600160a01b031681565b34801561083e575f80fd5b506106e661084d36600461445a565b6123ee565b34801561085d575f80fd5b506103e961086c366004614872565b612739565b34801561087c575f80fd5b506104385f81565b34801561088f575f80fd5b5061043860fc5481565b3480156108a4575f80fd5b506103e96108b33660046143e4565b6127c2565b3480156108c3575f80fd5b50673782dace9d900000610438565b3480156108dd575f80fd5b506103e96108ec3660046143e4565b612815565b3480156108fc575f80fd5b506104386729a2241af62c000081565b348015610917575f80fd5b506104386109263660046143e4565b6101046020525f908152604090205481565b348015610943575f80fd5b506104386109523660046143e4565b5f908152610107602052604090205490565b34801561096f575f80fd5b5061098361097e3660046143e4565b6128a0565b60405161038a95949392919061488d565b34801561099f575f80fd5b506104386109ae366004614872565b6101066020525f908152604090205481565b3480156109cb575f80fd5b506103e96109da3660046144c6565b612969565b3480156109ea575f80fd5b506104386109f936600461445a565b61298d565b6103e9610a0c366004614352565b6129b9565b348015610a1c575f80fd5b5060fb54610a2b9061ffff1681565b60405161ffff909116815260200161038a565b348015610a49575f80fd5b50610a52600181565b60405160ff909116815260200161038a565b348015610a6f575f80fd5b50610438610a7e3660046143e4565b5f908152610108602052604090205490565b348015610a9b575f80fd5b5061043860fe5481565b348015610ab0575f80fd5b506103b2610abf3660046148d1565b612f44565b348015610acf575f80fd5b5061037e610ade366004614872565b6001600160a01b03165f9081526101066020526040902054151590565b5f6001600160e01b03198216637965db0b60e01b1480610b2b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f610b3a6131ad565b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb091906148ec565b905060fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2791906148ec565b604051636fc4c27f60e11b8152600160048201526001600160a01b039182169183169063df8984fe90602401602060405180830381865afa158015610c6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9291906148ec565b6001600160a01b031614610cb9576040516303b8ffef60e41b815260040160405180910390fd5b604051639f7053f560e01b81526001600160a01b03821690639f7053f590610ce7908890889060040161492f565b5f604051808303815f87803b158015610cfe575f80fd5b505af1158015610d10573d5f803e3d5ffd5b50505050610d1d836131f3565b604051633e71376960e21b81523360048201526001600160a01b0382169063f9c4dda490602401602060405180830381865afa158015610d5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d83919061494a565b15610da15760405163707999fb60e11b815260040160405180910390fd5b5f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e1791906148ec565b60fd54604051636a0b688160e01b81526001600482015260248101919091526001600160a01b039190911690636a0b6881906044016020604051808303815f875af1158015610e68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8c91906148ec565b60fd545f9081526101096020526040902080546001600160a01b0319166001600160a01b038316179055905086610ec35780610f38565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3891906148ec565b9250610f468787878761321a565b5050949350505050565b610f586133a8565b610f606131ad565b60fb5460408051633871d0f160e01b81529051610fde923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd99190614965565b613401565b60fc5485908490839081610ff28486614990565b610ffc9190614990565b111561101b5760405163525e3de760e01b815260040160405180910390fd5b5f5b838110156110e4575f6101038b8b8481811061103b5761103b6149a3565b905060200281019061104d91906149b7565b60405161105b9291906149f9565b90815260200160405180910390205490506110758161348d565b61107e816134d9565b7f21d79a0b22a7d5a18b9535162fe2f0580e24c042b0541a05afc298a77ddf56938b8b848181106110b1576110b16149a3565b90506020028101906110c391906149b7565b836040516110d393929190614a08565b60405180910390a15060010161101d565b5081156111c15760fb600a9054906101000a90046001600160a01b03166001600160a01b031663b5cfee6c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116091906148ec565b6001600160a01b0316638d0d8cb66111806729a2241af62c000085614a2b565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156111a9575f80fd5b505af11580156111bb573d5f803e3d5ffd5b50505050505b5f5b828110156112b7575f6101038989848181106111e1576111e16149a3565b90506020028101906111f391906149b7565b6040516112019291906149f9565b908152602001604051809103902054905061121b8161348d565b5f818152610102602090815260408083208054600260ff199182161782556005909101548452610105909252909120805490911690557f4e93215f00bc729272f0ff71afd3d0f385208cbf6c999fe776ad07c623b83466898984818110611284576112846149a3565b905060200281019061129691906149b7565b836040516112a693929190614a08565b60405180910390a1506001016111c3565b505f5b81811015611381575f6101038787848181106112d8576112d86149a3565b90506020028101906112ea91906149b7565b6040516112f89291906149f9565b90815260200160405180910390205490506113128161348d565b61131b8161351a565b7f596ee835bed6cb827d21ba1785c468f0755ee40d33d87132df5d2ec90b645f9f87878481811061134e5761134e6149a3565b905060200281019061136091906149b7565b8360405161137093929190614a08565b60405180910390a1506001016112ba565b5050505061138f600160c955565b505050505050565b60fb5460408051637a87fa0b60e01b815290516113ec923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b5f81815261010260205260409020436006820155805460ff19166004179055604080518281524360208201527fce479ab1b7a806fa3704c907b8fae15a191ad8da9a1671659e4f411f516c4c0191015b60405180910390a150565b60fb54611465903390600160501b90046001600160a01b03166136a9565b60fb805461ffff191661ffff83169081179091556040519081527f5fd0fcd821abb4c92d47c4740e5f4a25ef35e99ee092d170faa0e5cb47013c369060200161143c565b60fb5460408051633871d0f160e01b815290516114fe923392600160501b9091046001600160a01b0316918291633871d0f19160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb546040805163b479a51760e01b815290518392600160501b90046001600160a01b03169163b479a5179160048083019260209291908290030181865afa15801561154c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115709190614965565b81111561159057604051639519af4360e01b815260040160405180910390fd5b5f5b818110156116e5575f6101038585848181106115b0576115b06149a3565b90506020028101906115c291906149b7565b6040516115d09291906149f9565b90815260200160405180910390205490506115ea8161372e565b611607576040516317136fff60e21b815260040160405180910390fd5b5f8181526101026020526040808220805460ff191660051781554360078201556004908101548251630bf8ac4960e41b815292516001600160a01b039091169363bf8ac49093808401939192919082900301818387803b158015611669575f80fd5b505af115801561167b573d5f803e3d5ffd5b505050507f450186694fefe67df6156f60235e4073b623160f28a0b85908ebc864316abf798585848181106116b2576116b26149a3565b90506020028101906116c491906149b7565b836040516116d493929190614a08565b60405180910390a150600101611592565b506116ef81613979565b505050565b6060825f03611716576040516334d6e01560e01b815260040160405180910390fd5b5f82611723600186614a42565b61172d9190614a2b565b611738906001614990565b90505f6117458483614990565b905060fd548111611756578061175a565b60fd545b90505f82821161176a575f611774565b6117748383614a42565b6001600160401b0381111561178b5761178b614672565b6040519080825280602002602001820160405280156117b4578160200160208202803683370190505b509050825b8281101561181e575f81815261010960205260409020546001600160a01b0316826117e48684614a42565b815181106117f4576117f46149a3565b6001600160a01b03909216602092830291909101909101528061181681614a55565b9150506117b9565b5095945050505050565b5f82815260656020526040902060010154611842816139c4565b6116ef83836139ce565b5f61010383836040516118609291906149f9565b9081526040519081900360200190205415159392505050565b6001600160a01b03811633146118ee5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6118f88282613a53565b5050565b60fb5461191a903390600160501b90046001600160a01b0316613ab9565b611922613b3e565b565b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611975573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199991906148ec565b6001600160a01b0316639f7053f584846040518363ffffffff1660e01b81526004016119c692919061492f565b5f604051808303815f87803b1580156119dd575f80fd5b505af11580156119ef573d5f803e3d5ffd5b505050506119fc816131f3565b611a0533613b90565b50335f9081526101066020908152604080832054808452610105909252909120600101611a33848683614aea565b505f81815261010560205260409081902060020180546001600160a01b0319166001600160a01b0385161790555133907fadc8722095edf061d7fdcb583105c05bf9eb15488503b621c39e254d8726977790611a9490879087908790614ba5565b60405180910390a250505050565b60fb5460408051637a87fa0b60e01b81529051611af7923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b806101015f828254611b099190614990565b9091555050610101546040519081527f5818a627697795ff3c3403f320c7549835866cfb64a0b06a6f7f077bc478e9f29060200161143c565b6101026020525f90815260409020805460018201805460ff9092169291611b6890614a6d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9490614a6d565b8015611bdf5780601f10611bb657610100808354040283529160200191611bdf565b820191905f5260205f20905b815481529060010190602001808311611bc257829003601f168201915b505050505090806002018054611bf490614a6d565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2090614a6d565b8015611c6b5780601f10611c4257610100808354040283529160200191611c6b565b820191905f5260205f20905b815481529060010190602001808311611c4e57829003601f168201915b505050505090806003018054611c8090614a6d565b80601f0160208091040260200160405190810160405280929190818152602001828054611cac90614a6d565b8015611cf75780601f10611cce57610100808354040283529160200191611cf7565b820191905f5260205f20905b815481529060010190602001808311611cda57829003601f168201915b5050505060048301546005840154600685015460079095015493946001600160a01b039092169390925088565b611d2c6133a8565b60fb5460408051637a87fa0b60e01b81529051611d81923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316639ca76b736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df691906148ec565b6001600160a01b0316631f033ef0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611e2e575f80fd5b505af1158015611e40573d5f803e3d5ffd5b50505050507f9407b62b10143b3ae08ce1cc7f9b66af41a4431ad59107e53ff54d6401e0730a81604051611e7691815260200190565b60405180910390a1611e88600160c955565b50565b60fb54611ea9903390600160501b90046001600160a01b0316613ab9565b60fb805469ffffffffffffffff00001916620100006001600160401b038481168202929092179283905560405192041681527facda2fe79efeffc359206ddeeb45f26ba1596223e01e1585458603af76e880a29060200161143c565b6060825f03611f27576040516334d6e01560e01b815260040160405180910390fd5b5f82611f34600186614a42565b611f3e9190614a2b565b90505f611f4b8483614990565b6001600160a01b0387165f9081526101066020526040812054919250819003611f875760405163240ebd5960e11b815260040160405180910390fd5b5f8181526101076020526040902054808311611fa35782611fa5565b805b92505f848411611fb5575f611fbf565b611fbf8585614a42565b6001600160401b03811115611fd657611fd6614672565b60405190808252806020026020018201604052801561200f57816020015b611ffc6141d9565b815260200190600190039081611ff45790505b509050845b848110156122af575f8481526101076020526040812080548390811061203c5761203c6149a3565b5f91825260208083209091015480835261010290915260409182902082516101008101909352805491935090829060ff16600581111561207e5761207e614578565b600581111561208f5761208f614578565b81526020016001820180546120a390614a6d565b80601f01602080910402602001604051908101604052809291908181526020018280546120cf90614a6d565b801561211a5780601f106120f15761010080835404028352916020019161211a565b820191905f5260205f20905b8154815290600101906020018083116120fd57829003601f168201915b5050505050815260200160028201805461213390614a6d565b80601f016020809104026020016040519081016040528092919081815260200182805461215f90614a6d565b80156121aa5780601f10612181576101008083540402835291602001916121aa565b820191905f5260205f20905b81548152906001019060200180831161218d57829003601f168201915b505050505081526020016003820180546121c390614a6d565b80601f01602080910402602001604051908101604052809291908181526020018280546121ef90614a6d565b801561223a5780601f106122115761010080835404028352916020019161223a565b820191905f5260205f20905b81548152906001019060200180831161221d57829003601f168201915b505050918352505060048201546001600160a01b031660208201526005820154604082015260068201546060820152600790910154608090910152836122808985614a42565b81518110612290576122906149a3565b60200260200101819052505080806122a790614a55565b915050612014565b5098975050505050505050565b5f6101005460ff546122ce9190614a42565b905090565b60fb546122f1903390600160501b90046001600160a01b0316613ab9565b611922613bfe565b5f8183111561231b5760405163096e13f760e21b815260040160405180910390fd5b6001600160a01b0384165f90815261010660205260408120549061234b825f908152610107602052604090205490565b905080841161235a578361235c565b805b93505f855b858110156123b9575f84815261010760205260408120805483908110612389576123896149a3565b905f5260205f200154905061239d81613c3b565b156123b057826123ac81614bd0565b9350505b50600101612361565b509695505050505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060825f03612410576040516334d6e01560e01b815260040160405180910390fd5b5f8261241d600186614a42565b6124279190614a2b565b612432906001614990565b90505f61243f8483614990565b905060fe5481116124505780612454565b60fe545b90505f846001600160401b0381111561246f5761246f614672565b6040519080825280602002602001820160405280156124a857816020015b6124956141d9565b81526020019060019003908161248d5790505b5090505f835b8381101561272d576124bf8161372e565b1561271b575f818152610102602052604090819020815161010081019092528054829060ff1660058111156124f6576124f6614578565b600581111561250757612507614578565b815260200160018201805461251b90614a6d565b80601f016020809104026020016040519081016040528092919081815260200182805461254790614a6d565b80156125925780601f1061256957610100808354040283529160200191612592565b820191905f5260205f20905b81548152906001019060200180831161257557829003601f168201915b505050505081526020016002820180546125ab90614a6d565b80601f01602080910402602001604051908101604052809291908181526020018280546125d790614a6d565b80156126225780601f106125f957610100808354040283529160200191612622565b820191905f5260205f20905b81548152906001019060200180831161260557829003601f168201915b5050505050815260200160038201805461263b90614a6d565b80601f016020809104026020016040519081016040528092919081815260200182805461266790614a6d565b80156126b25780601f10612689576101008083540402835291602001916126b2565b820191905f5260205f20905b81548152906001019060200180831161269557829003601f168201915b505050918352505060048201546001600160a01b0316602082015260058201546040820152600682015460608201526007909101546080909101528351849084908110612701576127016149a3565b6020026020010181905250818061271790614a55565b9250505b8061272581614a55565b9150506124ae565b50815295945050505050565b5f612743816139c4565b61274c826131f3565b60fb80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038516908102919091179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a15050565b60fb546127e0903390600160501b90046001600160a01b03166136a9565b60fc8190556040518181527f5d19c92c6893231b764f3320c712a4d056ff157295c8b620d893dbbed1a869b49060200161143c565b60fb5460408051637a87fa0b60e01b8152905161286a923392600160501b9091046001600160a01b0316918291637a87fa0b9160048083019260209291908290030181865afa158015610fb5573d5f803e3d5ffd5b6101008190556040518181527f711359152f2039f4182a096114b0d199c5f8e9cb268caff34080855c42ff4da99060200161143c565b6101056020525f90815260409020805460018201805460ff80841694610100909404169291906128cf90614a6d565b80601f01602080910402602001604051908101604052809291908181526020018280546128fb90614a6d565b80156129465780601f1061291d57610100808354040283529160200191612946565b820191905f5260205f20905b81548152906001019060200180831161292957829003601f168201915b50505050600283015460039093015491926001600160a01b039081169216905085565b5f82815260656020526040902060010154612983816139c4565b6116ef8383613a53565b610107602052815f5260405f2081815481106129a7575f80fd5b905f5260205f20015f91509150505481565b6129c16133a8565b6129c96131ad565b5f6129d333613b90565b90505f806129e388878686613ec1565b915091505f60fb600a9054906101000a90046001600160a01b03166001600160a01b03166318bcb2846040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a39573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a5d91906148ec565b90505f60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ab1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad591906148ec565b90505f5b84811015612f3457816001600160a01b0316639f55941b8d8d84818110612b0257612b026149a3565b9050602002810190612b1491906149b7565b8d8d86818110612b2657612b266149a3565b9050602002810190612b3891906149b7565b8d8d88818110612b4a57612b4a6149a3565b9050602002810190612b5c91906149b7565b6040518763ffffffff1660e01b8152600401612b7d96959493929190614bf5565b5f604051808303815f87803b158015612b94575f80fd5b505af1158015612ba6573d5f803e3d5ffd5b505050505f836001600160a01b0316637f70ce0d6001898589612bc99190614990565b60fe546040516001600160e01b031960e087901b16815260ff90941660048501526024840192909252604483015260648201526084016020604051808303815f875af1158015612c1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c3f91906148ec565b604080516101008101909152909150805f81526020018e8e85818110612c6757612c676149a3565b9050602002810190612c7991906149b7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018c8c85818110612cc457612cc46149a3565b9050602002810190612cd691906149b7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020018a8a85818110612d2157612d216149a3565b9050602002810190612d3391906149b7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b03841660208084019190915260408084018c905260608401839052608090930182905260fe54825261010290522081518154829060ff19166001836005811115612dbb57612dbb614578565b021790555060208201516001820190612dd49082614c3d565b5060408201516002820190612de99082614c3d565b5060608201516003820190612dfe9082614c3d565b5060808201516004820180546001600160a01b0319166001600160a01b0390921691909117905560a0820151600582015560c0820151600682015560e09091015160079091015560fe546101038e8e85818110612e5d57612e5d6149a3565b9050602002810190612e6f91906149b7565b604051612e7d9291906149f9565b9081526040805160209281900383019020929092555f898152610107825291822060fe5481546001810183559184529190922090910155337fab5128638b64e6216e80dfafa70d3cb6d54913a536dc41e76eb4a04cfbe979cf8e8e85818110612ee857612ee86149a3565b9050602002810190612efa91906149b7565b60fe54604051612f0c93929190614a08565b60405180910390a260fe8054905f612f2383614a55565b919050555081600101915050612ad9565b50505050505061138f600160c955565b5f80612f4f33613b90565b5f818152610105602052604090205490915083151561010090910460ff16151503612f8d57604051635650952b60e01b815260040160405180910390fd5b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316636e0fddfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fde573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130029190614965565b5f828152610108602052604090205461301b9190614990565b43101561303b5760405163111bb2f160e31b815260040160405180910390fd5b5f81815261010960205260409020546001600160a01b031691508215613132576001600160a01b03821631156130ba57816001600160a01b0316633ccfd60b6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156130a3575f80fd5b505af11580156130b5573d5f803e3d5ffd5b505050505b60fb600a9054906101000a90046001600160a01b03166001600160a01b0316630a3fbd9a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561310b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312f91906148ec565b91505b5f81815261010560209081526040808320805461ff0019166101008815159081029190911790915561010883529281902043908190558151858152928301939093528101919091527fc0465abaf1d51829975919c02418d521476b44f330a31d78bb6b4e96465e746b9060600160405180910390a150919050565b60975460ff16156119225760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016118e5565b6001600160a01b038116611e885760405163d92e233d60e01b815260040160405180910390fd5b6040518060a00160405280600115158152602001851515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160a01b0384166020808401919091523360409384015260fd548252610105815290829020835181549285015161ffff1990931690151561ff00191617610100921515929092029190911781559082015160018201906132d09082614c3d565b5060608201516002820180546001600160a01b03199081166001600160a01b039384161790915560809093015160039092018054909316911617905560fd8054335f9081526101066020908152604080832084905592825261010890529081204390558154919061334083614a55565b9190505550336001600160a01b03167f55b1a82a03cdb2847b1ec26dcac8ce8b3fc5f310388290b048c0ee9ac1ce8dd482600160fd546133809190614a42565b604080516001600160a01b039093168352602083019190915287151590820152606001611a94565b600260c954036133fa5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016118e5565b600260c955565b6040516359891c9160e11b81526001600160a01b0384811660048301526024820183905283169063b312392290604401602060405180830381865afa15801561344c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613470919061494a565b6116ef5760405163168dfea160e01b815260040160405180910390fd5b8015806134bb57505f818152610102602052604081205460ff1660058111156134b8576134b8614578565b14155b15611e88576040516317136fff60e21b815260040160405180910390fd5b5f81815261010260209081526040808320805460ff1916600317905560ff80548452610104909252822083905580549161351283614a55565b919050555050565b5f81815261010260209081526040808320805460ff19166001178155600501548084526101058352928190206003015460fb54825163278671bb60e01b815292516001600160a01b0392831694600160501b9092049092169263278671bb92600480830193928290030181865afa158015613597573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135bb91906148ec565b6001600160a01b031663aa67c91960fb600a9054906101000a90046001600160a01b03166001600160a01b031663082976456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561361a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061363e9190614965565b61365090673782dace9d900000614a42565b6040516001600160e01b031960e084901b1681526001600160a01b03851660048201526024015f604051808303818588803b15801561368d575f80fd5b505af115801561369f573d5f803e3d5ffd5b5050505050505050565b6040516353f5713b60e01b81526001600160a01b0383811660048301528216906353f5713b90602401602060405180830381865afa1580156136ed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613711919061494a565b6118f85760405163a5523ee560e01b815260040160405180910390fd5b5f818152610102602052604080822081516101008101909252805483929190829060ff16600581111561376357613763614578565b600581111561377457613774614578565b815260200160018201805461378890614a6d565b80601f01602080910402602001604051908101604052809291908181526020018280546137b490614a6d565b80156137ff5780601f106137d6576101008083540402835291602001916137ff565b820191905f5260205f20905b8154815290600101906020018083116137e257829003601f168201915b5050505050815260200160028201805461381890614a6d565b80601f016020809104026020016040519081016040528092919081815260200182805461384490614a6d565b801561388f5780601f106138665761010080835404028352916020019161388f565b820191905f5260205f20905b81548152906001019060200180831161387257829003601f168201915b505050505081526020016003820180546138a890614a6d565b80601f01602080910402602001604051908101604052809291908181526020018280546138d490614a6d565b801561391f5780601f106138f65761010080835404028352916020019161391f565b820191905f5260205f20905b81548152906001019060200180831161390257829003601f168201915b50505091835250506004828101546001600160a01b0316602083015260058301546040830152600683015460608301526007909201546080909101529091508151600581111561397157613971614578565b149392505050565b806101015f82825461398b9190614a42565b9091555050610101546040519081527f5040a06a11b7d9b75fc56fbbd207905dbaa4ac86c0dc9cc7fff40cd1d92aece39060200161143c565b611e888133613f89565b6139d882826123c4565b6118f8575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613a0f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b613a5d82826123c4565b156118f8575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015613afd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b21919061494a565b6118f85760405163c4230ae360e01b815260040160405180910390fd5b613b46613fe2565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381165f908152610106602052604081205490819003613bca5760405163240ebd5960e11b815260040160405180910390fd5b5f818152610105602052604090205460ff16613bf95760405163c11cb1df60e01b815260040160405180910390fd5b919050565b613c066131ad565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613b733390565b5f818152610102602052604080822081516101008101909252805483929190829060ff166005811115613c7057613c70614578565b6005811115613c8157613c81614578565b8152602001600182018054613c9590614a6d565b80601f0160208091040260200160405190810160405280929190818152602001828054613cc190614a6d565b8015613d0c5780601f10613ce357610100808354040283529160200191613d0c565b820191905f5260205f20905b815481529060010190602001808311613cef57829003601f168201915b50505050508152602001600282018054613d2590614a6d565b80601f0160208091040260200160405190810160405280929190818152602001828054613d5190614a6d565b8015613d9c5780601f10613d7357610100808354040283529160200191613d9c565b820191905f5260205f20905b815481529060010190602001808311613d7f57829003601f168201915b50505050508152602001600382018054613db590614a6d565b80601f0160208091040260200160405190810160405280929190818152602001828054613de190614a6d565b8015613e2c5780601f10613e0357610100808354040283529160200191613e2c565b820191905f5260205f20905b815481529060010190602001808311613e0f57829003601f168201915b505050918352505060048201546001600160a01b0316602082015260058083015460408301526006830154606083015260079092015460809091015290915081516005811115613e7e57613e7e614578565b1480613e9c5750600281516005811115613e9a57613e9a614578565b145b80613eb95750600181516005811115613eb757613eb7614578565b145b159392505050565b5f808486141580613ed25750838614155b15613ef05760405163e5fe884360e01b815260040160405180910390fd5b859150811580613f05575060fb5461ffff1682115b15613f23576040516379b348ff60e11b815260040160405180910390fd5b505f828152610107602052604081205490613f3f3382846122f9565b60fb546001600160401b03918216925062010000900416613f608483614990565b1115613f7f57604051633e10caad60e21b815260040160405180910390fd5b5094509492505050565b613f9382826123c4565b6118f857613fa08161402b565b613fab83602061403d565b604051602001613fbc929190614cf8565b60408051601f198184030181529082905262461bcd60e51b82526118e591600401614d6c565b60975460ff166119225760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016118e5565b6060610b2b6001600160a01b03831660145b60605f61404b836002614a2b565b614056906002614990565b6001600160401b0381111561406d5761406d614672565b6040519080825280601f01601f191660200182016040528015614097576020820181803683370190505b509050600360fc1b815f815181106140b1576140b16149a3565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106140df576140df6149a3565b60200101906001600160f81b03191690815f1a9053505f614101846002614a2b565b61410c906001614990565b90505b6001811115614183576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110614140576141406149a3565b1a60f81b828281518110614156576141566149a3565b60200101906001600160f81b03191690815f1a90535060049490941c9361417c81614d7e565b905061410f565b5083156141d25760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016118e5565b9392505050565b604080516101008101909152805f81526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f81526020015f81525090565b5f60208284031215614233575f80fd5b81356001600160e01b0319811681146141d2575f80fd5b8015158114611e88575f80fd5b5f8083601f840112614267575f80fd5b5081356001600160401b0381111561427d575f80fd5b602083019150836020828501011115614294575f80fd5b9250929050565b6001600160a01b0381168114611e88575f80fd5b5f805f80606085870312156142c2575f80fd5b84356142cd8161424a565b935060208501356001600160401b038111156142e7575f80fd5b6142f387828801614257565b90945092505060408501356143078161429b565b939692955090935050565b5f8083601f840112614322575f80fd5b5081356001600160401b03811115614338575f80fd5b6020830191508360208260051b8501011115614294575f80fd5b5f805f805f8060608789031215614367575f80fd5b86356001600160401b038082111561437d575f80fd5b6143898a838b01614312565b909850965060208901359150808211156143a1575f80fd5b6143ad8a838b01614312565b909650945060408901359150808211156143c5575f80fd5b506143d289828a01614312565b979a9699509497509295939492505050565b5f602082840312156143f4575f80fd5b5035919050565b5f6020828403121561440b575f80fd5b813561ffff811681146141d2575f80fd5b5f806020838503121561442d575f80fd5b82356001600160401b03811115614442575f80fd5b61444e85828601614312565b90969095509350505050565b5f806040838503121561446b575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b818110156144ba5783516001600160a01b031683529284019291840191600101614495565b50909695505050505050565b5f80604083850312156144d7575f80fd5b8235915060208301356144e98161429b565b809150509250929050565b5f8060208385031215614505575f80fd5b82356001600160401b0381111561451a575f80fd5b61444e85828601614257565b5f805f60408486031215614538575f80fd5b83356001600160401b0381111561454d575f80fd5b61455986828701614257565b909450925050602084013561456d8161429b565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b600681106145a857634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b838110156145c65781810151838201526020016145ae565b50505f910152565b5f81518084526145e58160208601602086016145ac565b601f01601f19169290920160200192915050565b5f610100614607838c61458c565b8060208401526146198184018b6145ce565b9050828103604084015261462d818a6145ce565b9050828103606084015261464181896145ce565b6001600160a01b03979097166080840152505060a081019390935260c083019190915260e090910152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215614696575f80fd5b81356001600160401b03808211156146ac575f80fd5b818401915084601f8301126146bf575f80fd5b8135818111156146d1576146d1614672565b604051601f8201601f19908116603f011681019083821181831017156146f9576146f9614672565b81604052828152876020848701011115614711575f80fd5b826020860160208301375f928101602001929092525095945050505050565b5f60208284031215614740575f80fd5b81356001600160401b03811681146141d2575f80fd5b5f805f60608486031215614768575f80fd5b83356147738161429b565b95602085013595506040909401359392505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b8381101561486457603f1989840301855281516101006147ce85835161458c565b88820151818a8701526147e3828701826145ce565b91505087820151858203898701526147fb82826145ce565b9150506060808301518683038288015261481583826145ce565b92505050608080830151614833828801826001600160a01b03169052565b505060a0828101519086015260c0808301519086015260e091820151919094015293860193908601906001016147ad565b509098975050505050505050565b5f60208284031215614882575f80fd5b81356141d28161429b565b8515158152841515602082015260a060408201525f6148af60a08301866145ce565b6001600160a01b03948516606084015292909316608090910152949350505050565b5f602082840312156148e1575f80fd5b81356141d28161424a565b5f602082840312156148fc575f80fd5b81516141d28161429b565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f614942602083018486614907565b949350505050565b5f6020828403121561495a575f80fd5b81516141d28161424a565b5f60208284031215614975575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b2b57610b2b61497c565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e198436030181126149cc575f80fd5b8301803591506001600160401b038211156149e5575f80fd5b602001915036819003821315614294575f80fd5b818382375f9101908152919050565b604081525f614a1b604083018587614907565b9050826020830152949350505050565b8082028115828204841417610b2b57610b2b61497c565b81810381811115610b2b57610b2b61497c565b5f60018201614a6657614a6661497c565b5060010190565b600181811c90821680614a8157607f821691505b602082108103614a9f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156116ef575f81815260208120601f850160051c81016020861015614acb5750805b601f850160051c820191505b8181101561138f57828155600101614ad7565b6001600160401b03831115614b0157614b01614672565b614b1583614b0f8354614a6d565b83614aa5565b5f601f841160018114614b46575f8515614b2f5750838201355b5f19600387901b1c1916600186901b178355614b9e565b5f83815260209020601f19861690835b82811015614b765786850135825560209485019460019092019101614b56565b5086821015614b92575f1960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b604081525f614bb8604083018587614907565b905060018060a01b0383166020830152949350505050565b5f6001600160401b03808316818103614beb57614beb61497c565b6001019392505050565b606081525f614c0860608301888a614907565b8281036020840152614c1b818789614907565b90508281036040840152614c30818587614907565b9998505050505050505050565b81516001600160401b03811115614c5657614c56614672565b614c6a81614c648454614a6d565b84614aa5565b602080601f831160018114614c9d575f8415614c865750858301515b5f19600386901b1c1916600185901b17855561138f565b5f85815260208120601f198616915b82811015614ccb57888601518255948401946001909101908401614cac565b5085821015614ce857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351614d2f8160178501602088016145ac565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614d608160288401602088016145ac565b01602801949350505050565b602081525f6141d260208301846145ce565b5f81614d8c57614d8c61497c565b505f19019056fea26469706673582212207132153208e1744f30ebd23b7fb725c796ba18c64b55f21b0d65f96e536221c664736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // PermissionlessNodeRegistryABI is the input ABI used to generate the binding from. diff --git a/testing/contracts/SDCollateral.go b/testing/contracts/SDCollateral.go index f659f5d7a..07d8d5a17 100644 --- a/testing/contracts/SDCollateral.go +++ b/testing/contracts/SDCollateral.go @@ -32,7 +32,7 @@ var ( // SDCollateralMetaData contains all meta data concerning the SDCollateral contract. var SDCollateralMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotWithdrawVault\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"operatorSDCollateral\",\"type\":\"uint256\"}],\"name\":\"InsufficientSDToWithdraw\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoStateChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SDTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sdAmount\",\"type\":\"uint256\"}],\"name\":\"SDDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"auction\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sdSlashed\",\"type\":\"uint256\"}],\"name\":\"SDSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sdAmount\",\"type\":\"uint256\"}],\"name\":\"SDWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"UpdatedPoolIdForOperator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawThreshold\",\"type\":\"uint256\"}],\"name\":\"UpdatedPoolThreshold\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ethAmount\",\"type\":\"uint256\"}],\"name\":\"convertETHToSD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_sdAmount\",\"type\":\"uint256\"}],\"name\":\"convertSDToETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_sdAmount\",\"type\":\"uint256\"}],\"name\":\"depositSDAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_numValidator\",\"type\":\"uint256\"}],\"name\":\"getMinimumSDToBond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_minSDToBond\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"getOperatorWithdrawThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"operatorWithdrawThreshold\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_numValidator\",\"type\":\"uint256\"}],\"name\":\"getRemainingSDToBond\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"getRewardEligibleSD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_rewardEligibleSD\",\"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\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_numValidator\",\"type\":\"uint256\"}],\"name\":\"hasEnoughSDCollateral\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":[],\"name\":\"maxApproveSD\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"operatorSDBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"poolThresholdbyPoolId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"withdrawThreshold\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"units\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"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\":\"uint256\",\"name\":\"_validatorId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"}],\"name\":\"slashValidatorSD\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_minThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_withdrawThreshold\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_units\",\"type\":\"string\"}],\"name\":\"updatePoolThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_requestedSD\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801562000010575f80fd5b50604051620026ad380380620026ad8339810160408190526200003391620003d6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001cb565b6200010e82620001cb565b62000118620001f6565b6200012262000252565b60c980546001600160a01b0319166001600160a01b038416179055620001495f84620002b6565b6040516001600160a01b038316907fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a28015620001c2575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050506200040c565b6001600160a01b038116620001f35760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002505760405162461bcd60e51b815260206004820152602b60248201525f805160206200268d83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002ac5760405162461bcd60e51b815260206004820152602b60248201525f805160206200268d83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200025062000359565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff1662000355575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620003143390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff16620003b35760405162461bcd60e51b815260206004820152602b60248201525f805160206200268d83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6001609755565b80516001600160a01b0381168114620003d1575f80fd5b919050565b5f8060408385031215620003e8575f80fd5b620003f383620003ba565b91506200040360208401620003ba565b90509250929050565b612273806200041a5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c80638a9b3738116100bf578063d547741f11610079578063d547741f146102d4578063dfdafccb146102e7578063e0412f0e146102fa578063e614e17c1461030d578063f9af40b814610320578063fcb7e0321461033f575f80fd5b80638a9b37381461025e57806391d14854146102815780639871a30a146102945780639ee804cb146102a7578063a217fddf146102ba578063b178e38e146102c1575f80fd5b806336568abe1161011057806336568abe146101df578063379b727e146101f25780633909afd3146102055780633e04cd3514610218578063490ffa35146102205780634c538f581461024b575f80fd5b806301ffc9a71461014c578063248a9ca3146101745780632e1a7d4d146101a45780632f2ff15d146101b9578063351691ab146101cc575b5f80fd5b61015f61015a366004611acc565b610352565b60405190151581526020015b60405180910390f35b610196610182366004611af3565b5f9081526065602052604090206001015490565b60405190815260200161016b565b6101b76101b2366004611af3565b610388565b005b6101b76101c7366004611b1e565b610542565b6101966101da366004611b5a565b61056b565b6101b76101ed366004611b1e565b6105b5565b610196610200366004611b98565b610633565b610196610213366004611bc2565b61066d565b6101b7610709565b60c954610233906001600160a01b031681565b6040516001600160a01b03909116815260200161016b565b6101b7610259366004611bdd565b61087c565b61027161026c366004611c00565b6108e4565b60405161016b9493929190611c68565b61015f61028f366004611b1e565b610994565b6101966102a2366004611bc2565b6109be565b6101b76102b5366004611bc2565b610a06565b6101965f81565b61015f6102cf366004611b5a565b610a92565b6101b76102e2366004611b1e565b610aa7565b6101966102f5366004611af3565b610acb565b6101b7610308366004611d02565b610c2a565b61019661031b366004611af3565b610d13565b61019661032e366004611bc2565b60cb6020525f908152604090205481565b6101b761034d366004611af3565b610e69565b5f6001600160e01b03198216637965db0b60e01b148061038257506301ffc9a760e01b6001600160e01b03198316145b92915050565b335f81815260cb6020526040902054826103a1836109be565b6103ab9190611dbe565b8110156103d35760405163f669f60360e01b8152600481018290526024015b60405180910390fd5b6001600160a01b0382165f90815260cb6020526040812080548592906103fa908490611dd1565b909155505060c9546040805163381a7dc560e21b815290516001600160a01b039092169163e069f714916004808201926020929091908290030181865afa158015610447573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046b9190611df4565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201869052919091169063a9059cbb906044016020604051808303815f875af11580156104b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104dd9190611e1e565b6104fa5760405163d3544e3f60e01b815260040160405180910390fd5b816001600160a01b03167f48c1f846fa4bc05385324ee60316f9c6778ed2b5f205a6319678a609b87676078460405161053591815260200190565b60405180910390a2505050565b5f8281526065602052604090206001015461055c81610fd4565b6105668383610fe1565b505050565b6001600160a01b0383165f90815260cb60205260408120548161058e8585610633565b9050808210156105a7576105a28282611dd1565b6105a9565b5f5b925050505b9392505050565b6001600160a01b03811633146106255760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016103ca565b61062f8282611066565b5050565b5f61063d836110cc565b60ff83165f90815260ca60205260409020805461065990610d13565b91506106658383611e37565b949350505050565b5f805f6106798461110c565b9250509150610687826110cc565b60ff82165f90815260ca6020526040812080549091906106a690610d13565b6106b09084611e37565b90505f6106c08360010154610d13565b6106ca9085611e37565b6001600160a01b0388165f90815260cb60205260409020549091508281106106fb576106f681836113cf565b6106fd565b5f5b98975050505050505050565b60c9546107209033906001600160a01b03166113e4565b60c95460408051630db055fd60e21b815290515f926001600160a01b0316916336c157f49160048083019260209291908290030181865afa158015610767573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078b9190611df4565b905061079681611469565b60c95f9054906101000a90046001600160a01b03166001600160a01b031663e069f7146040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080a9190611df4565b60405163095ea7b360e01b81526001600160a01b0383811660048301525f196024830152919091169063095ea7b3906044016020604051808303815f875af1158015610858573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062f9190611e1e565b610884611490565b60c9545f906108a1908390859033906001600160a01b03166114e9565b90506108ac826110cc565b60ff82165f90815260ca6020526040812080549091906108cb90610d13565b90506108d783826116e1565b50505061062f6001609755565b60ca6020525f908152604090208054600182015460028301546003840180549394929391929161091390611e4e565b80601f016020809104026020016040519081016040528092919081815260200182805461093f90611e4e565b801561098a5780601f106109615761010080835404028352916020019161098a565b820191905f5260205f20905b81548152906001019060200180831161096d57829003601f168201915b5050505050905084565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f805f6109ca8461110c565b92505091506109d8826110cc565b60ff82165f90815260ca6020526040902060028101546109fd9061031b908490611e37565b95945050505050565b5f610a1081610fd4565b610a1982611469565b60c9546001600160a01b0390811690831603610a485760405163a28a88c160e01b815260040160405180910390fd5b60c980546001600160a01b0319166001600160a01b0384169081179091556040517fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a25050565b5f610a9e84848461056b565b15949350505050565b5f82815260656020526040902060010154610ac181610fd4565b6105668383611066565b5f8060c95f9054906101000a90046001600160a01b03166001600160a01b031663defd024d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b419190611df4565b6001600160a01b031663a6870e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba09190611e86565b905060c95f9054906101000a90046001600160a01b03166001600160a01b031663f0141d846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c169190611e86565b610c208285611e37565b6105ae9190611e9d565b60c954610c419033906001600160a01b03166113e4565b81841180610c4e57508284115b15610c6c576040516375075b2960e11b815260040160405180910390fd5b6040805160808101825285815260208082018681528284018681526060840186815260ff8b165f90815260ca9094529490922083518155905160018201559051600282015591519091906003820190610cc59082611f09565b50506040805160ff88168152602081018790529081018490527f18757dd1fbfe2ad823e1bd4de3f8a2ee76b49f92f6aa34cc7cbf717cdf4d1758915060600160405180910390a15050505050565b5f8060c95f9054906101000a90046001600160a01b03166001600160a01b031663defd024d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d899190611df4565b6001600160a01b031663a6870e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de89190611e86565b90508060c95f9054906101000a90046001600160a01b03166001600160a01b031663f0141d846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5f9190611e86565b610c209085611e37565b335f81815260cb602052604081208054849290610e87908490611dbe565b909155505060c9546040805163381a7dc560e21b815290516001600160a01b039092169163e069f714916004808201926020929091908290030181865afa158015610ed4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef89190611df4565b6040516323b872dd60e01b81526001600160a01b0383811660048301523060248301526001604483015291909116906323b872dd906064016020604051808303815f875af1158015610f4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f709190611e1e565b610f8d5760405163d3544e3f60e01b815260040160405180910390fd5b806001600160a01b03167f112973aa2e3b182a34447572d830c1e97afc414558a08f33554be8e54522425983604051610fc891815260200190565b60405180910390a25050565b610fde81336118cb565b50565b610feb8282610994565b61062f575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556110223390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6110708282610994565b1561062f575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60ff81165f90815260ca6020526040902060030180546110eb90611e4e565b90505f03610fde5760405163015f4fdd60e31b815260040160405180910390fd5b5f805f8060c95f9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611160573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111849190611df4565b604051634721e29d60e11b81526001600160a01b03878116600483015291925090821690638e43c53a90602401602060405180830381865afa1580156111cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f09190611fc5565b60405163133a0ab960e31b815260ff821660048201529094505f906001600160a01b038316906399d055c890602401602060405180830381865afa15801561123a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061125e9190611df4565b604051636564598360e11b81526001600160a01b0388811660048301529192509082169063cac8b30690602401602060405180830381865afa1580156112a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ca9190611e86565b9350816001600160a01b0316635d713ec386885f856001600160a01b031663c34ade5c8a6040518263ffffffff1660e01b815260040161130c91815260200190565b602060405180830381865afa158015611327573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134b9190611e86565b6040516001600160e01b031960e087901b16815260ff90941660048501526001600160a01b03909216602484015260448301526064820152608401602060405180830381865afa1580156113a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c59190611e86565b9496939550505050565b5f8183106113dd57816105ae565b5090919050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015611428573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144c9190611e1e565b61062f5760405163c4230ae360e01b815260040160405180910390fd5b6001600160a01b038116610fde5760405163d92e233d60e01b815260040160405180910390fd5b6002609754036114e25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103ca565b6002609755565b5f80826001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611527573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061154b9190611df4565b60405163133a0ab960e31b815260ff881660048201526001600160a01b0391909116906399d055c890602401602060405180830381865afa158015611592573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b69190611df4565b90505f80826001600160a01b0316635a1239c1886040518263ffffffff1660e01b81526004016115e891815260200190565b5f60405180830381865afa158015611602573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611629919081019061203a565b50509550955050505050816001600160a01b0316866001600160a01b03161461166557604051636aa52cb560e01b815260040160405180910390fd5b604051636450073d60e11b8152600481018290525f906001600160a01b0385169063c8a00e7a906024015f60405180830381865afa1580156116a9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116d091908101906120f9565b9d9c50505050505050505050505050565b6001600160a01b0382165f90815260cb60205260408120549061170483836113cf565b9050805f036117135750505050565b6001600160a01b0384165f90815260cb60205260408120805483929061173a908490611dd1565b909155505060c95460408051630db055fd60e21b815290516001600160a01b03909216916336c157f4916004808201926020929091908290030181865afa158015611787573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ab9190611df4565b6001600160a01b0316637a78e12d826040518263ffffffff1660e01b81526004016117d891815260200190565b5f604051808303815f87803b1580156117ef575f80fd5b505af1158015611801573d5f803e3d5ffd5b5050505060c95f9054906101000a90046001600160a01b03166001600160a01b03166336c157f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611855573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118799190611df4565b6001600160a01b0316846001600160a01b03167fe4a6f5b1a676a94b2af7a506093c172e23d46a5bea6f2d783d4d32c9047800f4836040516118bd91815260200190565b60405180910390a350505050565b6118d58282610994565b61062f576118e281611924565b6118ed836020611936565b6040516020016118fe92919061218e565b60408051601f198184030181529082905262461bcd60e51b82526103ca91600401612202565b60606103826001600160a01b03831660145b60605f611944836002611e37565b61194f906002611dbe565b67ffffffffffffffff81111561196757611967611c96565b6040519080825280601f01601f191660200182016040528015611991576020820181803683370190505b509050600360fc1b815f815181106119ab576119ab612214565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106119d9576119d9612214565b60200101906001600160f81b03191690815f1a9053505f6119fb846002611e37565b611a06906001611dbe565b90505b6001811115611a7d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a3a57611a3a612214565b1a60f81b828281518110611a5057611a50612214565b60200101906001600160f81b03191690815f1a90535060049490941c93611a7681612228565b9050611a09565b5083156105ae5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016103ca565b5f60208284031215611adc575f80fd5b81356001600160e01b0319811681146105ae575f80fd5b5f60208284031215611b03575f80fd5b5035919050565b6001600160a01b0381168114610fde575f80fd5b5f8060408385031215611b2f575f80fd5b823591506020830135611b4181611b0a565b809150509250929050565b60ff81168114610fde575f80fd5b5f805f60608486031215611b6c575f80fd5b8335611b7781611b0a565b92506020840135611b8781611b4c565b929592945050506040919091013590565b5f8060408385031215611ba9575f80fd5b8235611bb481611b4c565b946020939093013593505050565b5f60208284031215611bd2575f80fd5b81356105ae81611b0a565b5f8060408385031215611bee575f80fd5b823591506020830135611b4181611b4c565b5f60208284031215611c10575f80fd5b81356105ae81611b4c565b5f5b83811015611c35578181015183820152602001611c1d565b50505f910152565b5f8151808452611c54816020860160208601611c1b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f611c8c6080830184611c3d565b9695505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cd357611cd3611c96565b604052919050565b5f67ffffffffffffffff821115611cf457611cf4611c96565b50601f01601f191660200190565b5f805f805f60a08688031215611d16575f80fd5b8535611d2181611b4c565b9450602086013593506040860135925060608601359150608086013567ffffffffffffffff811115611d51575f80fd5b8601601f81018813611d61575f80fd5b8035611d74611d6f82611cdb565b611caa565b818152896020838501011115611d88575f80fd5b816020840160208301375f602083830101528093505050509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561038257610382611daa565b8181038181111561038257610382611daa565b8051611def81611b0a565b919050565b5f60208284031215611e04575f80fd5b81516105ae81611b0a565b80518015158114611def575f80fd5b5f60208284031215611e2e575f80fd5b6105ae82611e0f565b808202811582820484141761038257610382611daa565b600181811c90821680611e6257607f821691505b602082108103611e8057634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215611e96575f80fd5b5051919050565b5f82611eb757634e487b7160e01b5f52601260045260245ffd5b500490565b601f821115610566575f81815260208120601f850160051c81016020861015611ee25750805b601f850160051c820191505b81811015611f0157828155600101611eee565b505050505050565b815167ffffffffffffffff811115611f2357611f23611c96565b611f3781611f318454611e4e565b84611ebc565b602080601f831160018114611f6a575f8415611f535750858301515b5f19600386901b1c1916600185901b178555611f01565b5f85815260208120601f198616915b82811015611f9857888601518255948401946001909101908401611f79565b5085821015611fb557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215611fd5575f80fd5b81516105ae81611b4c565b805160068110611def575f80fd5b5f611ffb611d6f84611cdb565b905082815283838301111561200e575f80fd5b6105ae836020830184611c1b565b5f82601f83011261202b575f80fd5b6105ae83835160208501611fee565b5f805f805f805f80610100898b031215612052575f80fd5b61205b89611fe0565b9750602089015167ffffffffffffffff80821115612077575f80fd5b6120838c838d0161201c565b985060408b0151915080821115612098575f80fd5b6120a48c838d0161201c565b975060608b01519150808211156120b9575f80fd5b506120c68b828c0161201c565b9550506120d560808a01611de4565b935060a0890151925060c0890151915060e089015190509295985092959890939650565b5f805f805f60a0868803121561210d575f80fd5b61211686611e0f565b945061212460208701611e0f565b9350604086015167ffffffffffffffff81111561213f575f80fd5b8601601f8101881361214f575f80fd5b61215e88825160208401611fee565b935050606086015161216f81611b0a565b608087015190925061218081611b0a565b809150509295509295909350565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516121c5816017850160208801611c1b565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516121f6816028840160208801611c1b565b01602801949350505050565b602081525f6105ae6020830184611c3d565b634e487b7160e01b5f52603260045260245ffd5b5f8161223657612236611daa565b505f19019056fea26469706673582212205882f62f0d1caf55b0022380d57ddb99d840014f537ebbdc49f5b7a0e1b9fc7164736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + Bin: "0x608060405234801562000010575f80fd5b50604051620026ad380380620026ad8339810160408190526200003391620003d6565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620001cb565b6200010e82620001cb565b62000118620001f6565b6200012262000252565b60c980546001600160a01b0319166001600160a01b038416179055620001495f84620002b6565b6040516001600160a01b038316907fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a28015620001c2575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050506200040c565b6001600160a01b038116620001f35760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff16620002505760405162461bcd60e51b815260206004820152602b60248201525f805160206200268d83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620002ac5760405162461bcd60e51b815260206004820152602b60248201525f805160206200268d83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200025062000359565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff1662000355575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620003143390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff16620003b35760405162461bcd60e51b815260206004820152602b60248201525f805160206200268d83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6001609755565b80516001600160a01b0381168114620003d1575f80fd5b919050565b5f8060408385031215620003e8575f80fd5b620003f383620003ba565b91506200040360208401620003ba565b90509250929050565b612273806200041a5f395ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c80638a9b3738116100bf578063d547741f11610079578063d547741f146102d4578063dfdafccb146102e7578063e0412f0e146102fa578063e614e17c1461030d578063f9af40b814610320578063fcb7e0321461033f575f80fd5b80638a9b37381461025e57806391d14854146102815780639871a30a146102945780639ee804cb146102a7578063a217fddf146102ba578063b178e38e146102c1575f80fd5b806336568abe1161011057806336568abe146101df578063379b727e146101f25780633909afd3146102055780633e04cd3514610218578063490ffa35146102205780634c538f581461024b575f80fd5b806301ffc9a71461014c578063248a9ca3146101745780632e1a7d4d146101a45780632f2ff15d146101b9578063351691ab146101cc575b5f80fd5b61015f61015a366004611acc565b610352565b60405190151581526020015b60405180910390f35b610196610182366004611af3565b5f9081526065602052604090206001015490565b60405190815260200161016b565b6101b76101b2366004611af3565b610388565b005b6101b76101c7366004611b1e565b610542565b6101966101da366004611b5a565b61056b565b6101b76101ed366004611b1e565b6105b5565b610196610200366004611b98565b610633565b610196610213366004611bc2565b61066d565b6101b7610709565b60c954610233906001600160a01b031681565b6040516001600160a01b03909116815260200161016b565b6101b7610259366004611bdd565b61087c565b61027161026c366004611c00565b6108e4565b60405161016b9493929190611c68565b61015f61028f366004611b1e565b610994565b6101966102a2366004611bc2565b6109be565b6101b76102b5366004611bc2565b610a06565b6101965f81565b61015f6102cf366004611b5a565b610a92565b6101b76102e2366004611b1e565b610aa7565b6101966102f5366004611af3565b610acb565b6101b7610308366004611d02565b610c2a565b61019661031b366004611af3565b610d13565b61019661032e366004611bc2565b60cb6020525f908152604090205481565b6101b761034d366004611af3565b610e69565b5f6001600160e01b03198216637965db0b60e01b148061038257506301ffc9a760e01b6001600160e01b03198316145b92915050565b335f81815260cb6020526040902054826103a1836109be565b6103ab9190611dbe565b8110156103d35760405163f669f60360e01b8152600481018290526024015b60405180910390fd5b6001600160a01b0382165f90815260cb6020526040812080548592906103fa908490611dd1565b909155505060c9546040805163381a7dc560e21b815290516001600160a01b039092169163e069f714916004808201926020929091908290030181865afa158015610447573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046b9190611df4565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201869052919091169063a9059cbb906044016020604051808303815f875af11580156104b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104dd9190611e1e565b6104fa5760405163d3544e3f60e01b815260040160405180910390fd5b816001600160a01b03167f48c1f846fa4bc05385324ee60316f9c6778ed2b5f205a6319678a609b87676078460405161053591815260200190565b60405180910390a2505050565b5f8281526065602052604090206001015461055c81610fd4565b6105668383610fe1565b505050565b6001600160a01b0383165f90815260cb60205260408120548161058e8585610633565b9050808210156105a7576105a28282611dd1565b6105a9565b5f5b925050505b9392505050565b6001600160a01b03811633146106255760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016103ca565b61062f8282611066565b5050565b5f61063d836110cc565b60ff83165f90815260ca60205260409020805461065990610d13565b91506106658383611e37565b949350505050565b5f805f6106798461110c565b9250509150610687826110cc565b60ff82165f90815260ca6020526040812080549091906106a690610d13565b6106b09084611e37565b90505f6106c08360010154610d13565b6106ca9085611e37565b6001600160a01b0388165f90815260cb60205260409020549091508281106106fb576106f681836113cf565b6106fd565b5f5b98975050505050505050565b60c9546107209033906001600160a01b03166113e4565b60c95460408051630db055fd60e21b815290515f926001600160a01b0316916336c157f49160048083019260209291908290030181865afa158015610767573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078b9190611df4565b905061079681611469565b60c95f9054906101000a90046001600160a01b03166001600160a01b031663e069f7146040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080a9190611df4565b60405163095ea7b360e01b81526001600160a01b0383811660048301525f196024830152919091169063095ea7b3906044016020604051808303815f875af1158015610858573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062f9190611e1e565b610884611490565b60c9545f906108a1908390859033906001600160a01b03166114e9565b90506108ac826110cc565b60ff82165f90815260ca6020526040812080549091906108cb90610d13565b90506108d783826116e1565b50505061062f6001609755565b60ca6020525f908152604090208054600182015460028301546003840180549394929391929161091390611e4e565b80601f016020809104026020016040519081016040528092919081815260200182805461093f90611e4e565b801561098a5780601f106109615761010080835404028352916020019161098a565b820191905f5260205f20905b81548152906001019060200180831161096d57829003601f168201915b5050505050905084565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f805f6109ca8461110c565b92505091506109d8826110cc565b60ff82165f90815260ca6020526040902060028101546109fd9061031b908490611e37565b95945050505050565b5f610a1081610fd4565b610a1982611469565b60c9546001600160a01b0390811690831603610a485760405163a28a88c160e01b815260040160405180910390fd5b60c980546001600160a01b0319166001600160a01b0384169081179091556040517fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485905f90a25050565b5f610a9e84848461056b565b15949350505050565b5f82815260656020526040902060010154610ac181610fd4565b6105668383611066565b5f8060c95f9054906101000a90046001600160a01b03166001600160a01b031663defd024d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b419190611df4565b6001600160a01b031663a6870e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba09190611e86565b905060c95f9054906101000a90046001600160a01b03166001600160a01b031663f0141d846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c169190611e86565b610c208285611e37565b6105ae9190611e9d565b60c954610c419033906001600160a01b03166113e4565b81841180610c4e57508284115b15610c6c576040516375075b2960e11b815260040160405180910390fd5b6040805160808101825285815260208082018681528284018681526060840186815260ff8b165f90815260ca9094529490922083518155905160018201559051600282015591519091906003820190610cc59082611f09565b50506040805160ff88168152602081018790529081018490527f18757dd1fbfe2ad823e1bd4de3f8a2ee76b49f92f6aa34cc7cbf717cdf4d1758915060600160405180910390a15050505050565b5f8060c95f9054906101000a90046001600160a01b03166001600160a01b031663defd024d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d899190611df4565b6001600160a01b031663a6870e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de89190611e86565b90508060c95f9054906101000a90046001600160a01b03166001600160a01b031663f0141d846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5f9190611e86565b610c209085611e37565b335f81815260cb602052604081208054849290610e87908490611dbe565b909155505060c9546040805163381a7dc560e21b815290516001600160a01b039092169163e069f714916004808201926020929091908290030181865afa158015610ed4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef89190611df4565b6040516323b872dd60e01b81526001600160a01b0383811660048301523060248301526044820185905291909116906323b872dd906064016020604051808303815f875af1158015610f4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f709190611e1e565b610f8d5760405163d3544e3f60e01b815260040160405180910390fd5b806001600160a01b03167f112973aa2e3b182a34447572d830c1e97afc414558a08f33554be8e54522425983604051610fc891815260200190565b60405180910390a25050565b610fde81336118cb565b50565b610feb8282610994565b61062f575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556110223390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6110708282610994565b1561062f575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60ff81165f90815260ca6020526040902060030180546110eb90611e4e565b90505f03610fde5760405163015f4fdd60e31b815260040160405180910390fd5b5f805f8060c95f9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611160573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111849190611df4565b604051634721e29d60e11b81526001600160a01b03878116600483015291925090821690638e43c53a90602401602060405180830381865afa1580156111cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111f09190611fc5565b60405163133a0ab960e31b815260ff821660048201529094505f906001600160a01b038316906399d055c890602401602060405180830381865afa15801561123a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061125e9190611df4565b604051636564598360e11b81526001600160a01b0388811660048301529192509082169063cac8b30690602401602060405180830381865afa1580156112a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ca9190611e86565b9350816001600160a01b0316635d713ec386885f856001600160a01b031663c34ade5c8a6040518263ffffffff1660e01b815260040161130c91815260200190565b602060405180830381865afa158015611327573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134b9190611e86565b6040516001600160e01b031960e087901b16815260ff90941660048501526001600160a01b03909216602484015260448301526064820152608401602060405180830381865afa1580156113a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c59190611e86565b9496939550505050565b5f8183106113dd57816105ae565b5090919050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa158015611428573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144c9190611e1e565b61062f5760405163c4230ae360e01b815260040160405180910390fd5b6001600160a01b038116610fde5760405163d92e233d60e01b815260040160405180910390fd5b6002609754036114e25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103ca565b6002609755565b5f80826001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611527573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061154b9190611df4565b60405163133a0ab960e31b815260ff881660048201526001600160a01b0391909116906399d055c890602401602060405180830381865afa158015611592573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b69190611df4565b90505f80826001600160a01b0316635a1239c1886040518263ffffffff1660e01b81526004016115e891815260200190565b5f60405180830381865afa158015611602573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611629919081019061203a565b50509550955050505050816001600160a01b0316866001600160a01b03161461166557604051636aa52cb560e01b815260040160405180910390fd5b604051636450073d60e11b8152600481018290525f906001600160a01b0385169063c8a00e7a906024015f60405180830381865afa1580156116a9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116d091908101906120f9565b9d9c50505050505050505050505050565b6001600160a01b0382165f90815260cb60205260408120549061170483836113cf565b9050805f036117135750505050565b6001600160a01b0384165f90815260cb60205260408120805483929061173a908490611dd1565b909155505060c95460408051630db055fd60e21b815290516001600160a01b03909216916336c157f4916004808201926020929091908290030181865afa158015611787573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ab9190611df4565b6001600160a01b0316637a78e12d826040518263ffffffff1660e01b81526004016117d891815260200190565b5f604051808303815f87803b1580156117ef575f80fd5b505af1158015611801573d5f803e3d5ffd5b5050505060c95f9054906101000a90046001600160a01b03166001600160a01b03166336c157f46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611855573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118799190611df4565b6001600160a01b0316846001600160a01b03167fe4a6f5b1a676a94b2af7a506093c172e23d46a5bea6f2d783d4d32c9047800f4836040516118bd91815260200190565b60405180910390a350505050565b6118d58282610994565b61062f576118e281611924565b6118ed836020611936565b6040516020016118fe92919061218e565b60408051601f198184030181529082905262461bcd60e51b82526103ca91600401612202565b60606103826001600160a01b03831660145b60605f611944836002611e37565b61194f906002611dbe565b67ffffffffffffffff81111561196757611967611c96565b6040519080825280601f01601f191660200182016040528015611991576020820181803683370190505b509050600360fc1b815f815181106119ab576119ab612214565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106119d9576119d9612214565b60200101906001600160f81b03191690815f1a9053505f6119fb846002611e37565b611a06906001611dbe565b90505b6001811115611a7d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a3a57611a3a612214565b1a60f81b828281518110611a5057611a50612214565b60200101906001600160f81b03191690815f1a90535060049490941c93611a7681612228565b9050611a09565b5083156105ae5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016103ca565b5f60208284031215611adc575f80fd5b81356001600160e01b0319811681146105ae575f80fd5b5f60208284031215611b03575f80fd5b5035919050565b6001600160a01b0381168114610fde575f80fd5b5f8060408385031215611b2f575f80fd5b823591506020830135611b4181611b0a565b809150509250929050565b60ff81168114610fde575f80fd5b5f805f60608486031215611b6c575f80fd5b8335611b7781611b0a565b92506020840135611b8781611b4c565b929592945050506040919091013590565b5f8060408385031215611ba9575f80fd5b8235611bb481611b4c565b946020939093013593505050565b5f60208284031215611bd2575f80fd5b81356105ae81611b0a565b5f8060408385031215611bee575f80fd5b823591506020830135611b4181611b4c565b5f60208284031215611c10575f80fd5b81356105ae81611b4c565b5f5b83811015611c35578181015183820152602001611c1d565b50505f910152565b5f8151808452611c54816020860160208601611c1b565b601f01601f19169290920160200192915050565b848152836020820152826040820152608060608201525f611c8c6080830184611c3d565b9695505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cd357611cd3611c96565b604052919050565b5f67ffffffffffffffff821115611cf457611cf4611c96565b50601f01601f191660200190565b5f805f805f60a08688031215611d16575f80fd5b8535611d2181611b4c565b9450602086013593506040860135925060608601359150608086013567ffffffffffffffff811115611d51575f80fd5b8601601f81018813611d61575f80fd5b8035611d74611d6f82611cdb565b611caa565b818152896020838501011115611d88575f80fd5b816020840160208301375f602083830101528093505050509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561038257610382611daa565b8181038181111561038257610382611daa565b8051611def81611b0a565b919050565b5f60208284031215611e04575f80fd5b81516105ae81611b0a565b80518015158114611def575f80fd5b5f60208284031215611e2e575f80fd5b6105ae82611e0f565b808202811582820484141761038257610382611daa565b600181811c90821680611e6257607f821691505b602082108103611e8057634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215611e96575f80fd5b5051919050565b5f82611eb757634e487b7160e01b5f52601260045260245ffd5b500490565b601f821115610566575f81815260208120601f850160051c81016020861015611ee25750805b601f850160051c820191505b81811015611f0157828155600101611eee565b505050505050565b815167ffffffffffffffff811115611f2357611f23611c96565b611f3781611f318454611e4e565b84611ebc565b602080601f831160018114611f6a575f8415611f535750858301515b5f19600386901b1c1916600185901b178555611f01565b5f85815260208120601f198616915b82811015611f9857888601518255948401946001909101908401611f79565b5085821015611fb557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215611fd5575f80fd5b81516105ae81611b4c565b805160068110611def575f80fd5b5f611ffb611d6f84611cdb565b905082815283838301111561200e575f80fd5b6105ae836020830184611c1b565b5f82601f83011261202b575f80fd5b6105ae83835160208501611fee565b5f805f805f805f80610100898b031215612052575f80fd5b61205b89611fe0565b9750602089015167ffffffffffffffff80821115612077575f80fd5b6120838c838d0161201c565b985060408b0151915080821115612098575f80fd5b6120a48c838d0161201c565b975060608b01519150808211156120b9575f80fd5b506120c68b828c0161201c565b9550506120d560808a01611de4565b935060a0890151925060c0890151915060e089015190509295985092959890939650565b5f805f805f60a0868803121561210d575f80fd5b61211686611e0f565b945061212460208701611e0f565b9350604086015167ffffffffffffffff81111561213f575f80fd5b8601601f8101881361214f575f80fd5b61215e88825160208401611fee565b935050606086015161216f81611b0a565b608087015190925061218081611b0a565b809150509295509295909350565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516121c5816017850160208801611c1b565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516121f6816028840160208801611c1b565b01602801949350505050565b602081525f6105ae6020830184611c3d565b634e487b7160e01b5f52603260045260245ffd5b5f8161223657612236611daa565b505f19019056fea2646970667358221220bf0133cdf812781b4e70a5e2f776143fe08173680c3ee60ad06f55bf9178f6e064736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // SDCollateralABI is the input ABI used to generate the binding from. diff --git a/testing/contracts/StaderOracle.go b/testing/contracts/StaderOracle.go new file mode 100644 index 000000000..dad4e1863 --- /dev/null +++ b/testing/contracts/StaderOracle.go @@ -0,0 +1,6567 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contracts + +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 +) + +// ExchangeRate is an auto generated low-level Go binding around an user-defined struct. +type ExchangeRate struct { + ReportingBlockNumber *big.Int + TotalETHBalance *big.Int + TotalETHXSupply *big.Int +} + +// MissedAttestationPenaltyData is an auto generated low-level Go binding around an user-defined struct. +type MissedAttestationPenaltyData struct { + ReportingBlockNumber *big.Int + Index *big.Int + SortedPubkeys [][]byte +} + + + +// SDPriceData is an auto generated low-level Go binding around an user-defined struct. +type SDPriceData struct { + ReportingBlockNumber *big.Int + SdPriceInETH *big.Int +} + +// ValidatorStats is an auto generated low-level Go binding around an user-defined struct. +type ValidatorStats struct { + ReportingBlockNumber *big.Int + ExitingValidatorsBalance *big.Int + ExitedValidatorsBalance *big.Int + SlashedValidatorsBalance *big.Int + ExitingValidatorsCount uint32 + ExitedValidatorsCount uint32 + SlashedValidatorsCount uint32 +} + +// ValidatorVerificationDetail is an auto generated low-level Go binding around an user-defined struct. +type ValidatorVerificationDetail struct { + PoolId uint8 + ReportingBlockNumber *big.Int + SortedReadyToDepositPubkeys [][]byte + SortedFrontRunPubkeys [][]byte + SortedInvalidSignaturePubkeys [][]byte +} + +// WithdrawnValidators is an auto generated low-level Go binding around an user-defined struct. +type WithdrawnValidators struct { + PoolId uint8 + ReportingBlockNumber *big.Int + SortedPubkeys [][]byte +} + +// StaderOracleMetaData contains all meta data concerning the StaderOracle contract. +var StaderOracleMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CooldownNotComplete\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateSubmissionFromNode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERChangeLimitCrossed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERChangeLimitNotCrossed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERPermissibleChangeOutofBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FrequencyUnchanged\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InspectionModeActive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientTrustedNodes\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidERDataSource\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMAPDIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMerkleRootIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPubkeyLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReportingBlock\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NodeAlreadyTrusted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NodeNotTrusted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotATrustedNode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PageNumberAlreadyReported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReportingFutureBlockData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReportingPreviousCycleData\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpdateFrequencyNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroFrequency\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPORBasedERData\",\"type\":\"bool\"}],\"name\":\"ERDataSourceToggled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"erInspectionMode\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"ERInspectionModeActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalEth\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethxSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"ExchangeRateSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalEth\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethxSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"ExchangeRateUpdated\",\"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\":\"node\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes[]\",\"name\":\"pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"MissedAttestationPenaltySubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes[]\",\"name\":\"pubkeys\",\"type\":\"bytes[]\"}],\"name\":\"MissedAttestationPenaltyUpdated\",\"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\":\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"node\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sdPriceInETH\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reportedBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"SDPriceSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sdPriceInETH\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reportedBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"SDPriceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"SafeModeDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"SafeModeEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"node\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"SocializingRewardsMerkleRootSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"}],\"name\":\"SocializingRewardsMerkleRootUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"node\",\"type\":\"address\"}],\"name\":\"TrustedNodeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"trustedNodeChangeCoolingPeriod\",\"type\":\"uint256\"}],\"name\":\"TrustedNodeChangeCoolingPeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"node\",\"type\":\"address\"}],\"name\":\"TrustedNodeRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"updateFrequency\",\"type\":\"uint256\"}],\"name\":\"UpdateFrequencyUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"erChangeLimit\",\"type\":\"uint256\"}],\"name\":\"UpdatedERChangeLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"activeValidatorsBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exitedValidatorsBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"slashedValidatorsBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"activeValidatorsCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exitedValidatorsCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"slashedValidatorsCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"ValidatorStatsSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"activeValidatorsBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exitedValidatorsBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"slashedValidatorsBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"activeValidatorsCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"exitedValidatorsCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"slashedValidatorsCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"ValidatorStatsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes[]\",\"name\":\"sortedReadyToDepositPubkeys\",\"type\":\"bytes[]\"},{\"indexed\":false,\"internalType\":\"bytes[]\",\"name\":\"sortedFrontRunPubkeys\",\"type\":\"bytes[]\"},{\"indexed\":false,\"internalType\":\"bytes[]\",\"name\":\"sortedInvalidSignaturePubkeys\",\"type\":\"bytes[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"ValidatorVerificationDetailSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes[]\",\"name\":\"sortedReadyToDepositPubkeys\",\"type\":\"bytes[]\"},{\"indexed\":false,\"internalType\":\"bytes[]\",\"name\":\"sortedFrontRunPubkeys\",\"type\":\"bytes[]\"},{\"indexed\":false,\"internalType\":\"bytes[]\",\"name\":\"sortedInvalidSignaturePubkeys\",\"type\":\"bytes[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"ValidatorVerificationDetailUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes[]\",\"name\":\"pubkeys\",\"type\":\"bytes[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"WithdrawnValidatorsSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"block\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes[]\",\"name\":\"pubkeys\",\"type\":\"bytes[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"WithdrawnValidatorsUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ER_CHANGE_MAX_BPS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETHX_ER_UF\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_ER_UPDATE_FREQUENCY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_TRUSTED_NODES\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MISSED_ATTESTATION_PENALTY_UF\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SD_PRICE_UF\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_STATS_UF\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_VERIFICATION_DETAIL_UF\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WITHDRAWN_VALIDATORS_UF\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"}],\"name\":\"addTrustedNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"closeERInspectionMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableERInspectionMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableSafeMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableSafeMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erChangeLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erInspectionMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erInspectionModeStartBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalETHBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalETHXSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"}],\"name\":\"getCurrentRewardsIndexByPoolId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getERReportableBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getExchangeRate\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalETHBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalETHXSupply\",\"type\":\"uint256\"}],\"internalType\":\"structExchangeRate\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_poolId\",\"type\":\"uint8\"}],\"name\":\"getMerkleRootReportableBlockByPoolId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMissedAttestationPenaltyReportableBlock\",\"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\":[],\"name\":\"getSDPriceInETH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSDPriceReportableBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidatorStats\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"exitingValidatorsBalance\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"exitedValidatorsBalance\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"slashedValidatorsBalance\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"exitingValidatorsCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitedValidatorsCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"slashedValidatorsCount\",\"type\":\"uint32\"}],\"internalType\":\"structValidatorStats\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidatorStatsReportableBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getValidatorVerificationDetailReportableBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawnValidatorReportableBlock\",\"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\":[],\"name\":\"inspectionModeExchangeRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalETHBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalETHXSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPORFeedBasedERData\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isTrustedNode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastReportedMAPDIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastReportedSDPriceData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sdPriceInETH\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"lastReportingBlockNumberForValidatorVerificationDetailByPoolId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"lastReportingBlockNumberForWithdrawnValidatorsByPoolId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastTrustedNodeCountChangeBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"missedAttestationPenalty\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"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\":[{\"internalType\":\"address\",\"name\":\"_nodeAddress\",\"type\":\"address\"}],\"name\":\"removeTrustedNode\",\"outputs\":[],\"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\":[],\"name\":\"safeMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_updateFrequency\",\"type\":\"uint256\"}],\"name\":\"setERUpdateFrequency\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_updateFrequency\",\"type\":\"uint256\"}],\"name\":\"setMissedAttestationPenaltyUpdateFrequency\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_updateFrequency\",\"type\":\"uint256\"}],\"name\":\"setSDPriceUpdateFrequency\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_updateFrequency\",\"type\":\"uint256\"}],\"name\":\"setValidatorStatsUpdateFrequency\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_updateFrequency\",\"type\":\"uint256\"}],\"name\":\"setValidatorVerificationDetailUpdateFrequency\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_updateFrequency\",\"type\":\"uint256\"}],\"name\":\"setWithdrawnValidatorsUpdateFrequency\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalETHBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalETHXSupply\",\"type\":\"uint256\"}],\"internalType\":\"structExchangeRate\",\"name\":\"_exchangeRate\",\"type\":\"tuple\"}],\"name\":\"submitExchangeRateData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"sortedPubkeys\",\"type\":\"bytes[]\"}],\"internalType\":\"structMissedAttestationPenaltyData\",\"name\":\"_mapd\",\"type\":\"tuple\"}],\"name\":\"submitMissedAttestationPenalties\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sdPriceInETH\",\"type\":\"uint256\"}],\"internalType\":\"structSDPriceData\",\"name\":\"_sdPriceData\",\"type\":\"tuple\"}],\"name\":\"submitSDPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"operatorETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolETHRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"operatorSDRewards\",\"type\":\"uint256\"}],\"internalType\":\"structRewardsData\",\"name\":\"_rewardsData\",\"type\":\"tuple\"}],\"name\":\"submitSocializingRewardsMerkleRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"exitingValidatorsBalance\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"exitedValidatorsBalance\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"slashedValidatorsBalance\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"exitingValidatorsCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitedValidatorsCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"slashedValidatorsCount\",\"type\":\"uint32\"}],\"internalType\":\"structValidatorStats\",\"name\":\"_validatorStats\",\"type\":\"tuple\"}],\"name\":\"submitValidatorStats\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"sortedReadyToDepositPubkeys\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"sortedFrontRunPubkeys\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"sortedInvalidSignaturePubkeys\",\"type\":\"bytes[]\"}],\"internalType\":\"structValidatorVerificationDetail\",\"name\":\"_validatorVerificationDetail\",\"type\":\"tuple\"}],\"name\":\"submitValidatorVerificationDetail\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"poolId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"sortedPubkeys\",\"type\":\"bytes[]\"}],\"internalType\":\"structWithdrawnValidators\",\"name\":\"_withdrawnValidators\",\"type\":\"tuple\"}],\"name\":\"submitWithdrawnValidators\",\"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\":\"togglePORFeedBasedERData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trustedNodeChangeCoolingPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trustedNodesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_erChangeLimit\",\"type\":\"uint256\"}],\"name\":\"updateERChangeLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateERFromPORFeed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"updateFrequencyMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_trustedNodeChangeCoolingPeriod\",\"type\":\"uint256\"}],\"name\":\"updateTrustedNodeChangeCoolingPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorStats\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reportingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"exitingValidatorsBalance\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"exitedValidatorsBalance\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"slashedValidatorsBalance\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"exitingValidatorsCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"exitedValidatorsCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"slashedValidatorsCount\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801562000010575f80fd5b5060405162004d9338038062004d9383398101604081905262000033916200066e565b5f54610100900460ff16158080156200005257505f54600160ff909116105b806200006d5750303b1580156200006d57505f5460ff166001145b620000d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015620000f8575f805461ff0019166101001790555b6200010383620002f9565b6200010e82620002f9565b6200011862000324565b6200012262000380565b6200012c620003e4565b6101f461010855620001617f783e3ebf40ee443ac9cbca8dc88c9f47450598583c2168f0ae0021de08ad333b611c2062000448565b6200018f7f8ec4e223bb52129c3d652c6e55a137389860823d9a02acb9d051e591994c6d6f611c2062000448565b620001bd7f7607f5053d01557adb731d4aad009009bba2bf77a5b5f779733919451d426336611c2062000448565b620001eb7f9ae142790790fc18374cd6a6cc28573ecc78841658523afa63055cea42a9e1dd61384062000448565b620002197fedb5588a851185ccd926df348aee898122cd3e827fb7020e3c966fdac62a46af61c4e062000448565b620002477f6a7b51c29672c0ed412394a3e65ab758361d7c963b8657ce8c1f43dc0770b162611c2062000448565b60fe80546001600160a01b0319166001600160a01b0384161790556200026e5f84620004e8565b6040516001600160a01b03831681527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b44859060200160405180910390a18015620002f0575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050620006a4565b6001600160a01b038116620003215760405163d92e233d60e01b815260040160405180910390fd5b50565b5f54610100900460ff166200037e5760405162461bcd60e51b815260206004820152602b60248201525f8051602062004d7383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b565b5f54610100900460ff16620003da5760405162461bcd60e51b815260206004820152602b60248201525f8051602062004d7383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200037e6200058b565b5f54610100900460ff166200043e5760405162461bcd60e51b815260206004820152602b60248201525f8051602062004d7383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6200037e620005f1565b805f036200046957604051637036cfc960e11b815260040160405180910390fd5b5f82815261011660205260409020548103620004985760405163806e577f60e01b815260040160405180910390fd5b5f828152610116602052604090819020829055517f6231a3e049e2072a042ae727208e7650b487871f4080458371e84d6e7d39113890620004dc9083815260200190565b60405180910390a15050565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff1662000587575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620005463390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b5f54610100900460ff16620005e55760405162461bcd60e51b815260206004820152602b60248201525f8051602062004d7383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b6097805460ff19169055565b5f54610100900460ff166200064b5760405162461bcd60e51b815260206004820152602b60248201525f8051602062004d7383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000cd565b600160c955565b80516001600160a01b038116811462000669575f80fd5b919050565b5f806040838503121562000680575f80fd5b6200068b8362000652565b91506200069b6020840162000652565b90509250929050565b6146c180620006b25f395ff3fe608060405234801561000f575f80fd5b5060043610610422575f3560e01c80639773ee601161022c578063c06a620111610135578063e36c3140116100bf578063f00e022311610084578063f00e022314610a95578063f10b256914610ab5578063f51c0fe714610abe578063f6a3c09014610ad1578063fc8b821c14610ae4575f80fd5b8063e36c314014610a34578063e514fe5514610a3c578063e61befa714610a44578063e6aa216c14610a58578063ea18568b14610a82575f80fd5b8063d6275dd711610105578063d6275dd7146109df578063de271c6d146109f2578063e0bcb378146109fc578063e10025e614610a05578063e2f6339214610a0d575f80fd5b8063c06a620114610993578063d06628ed146109a6578063d0a8f679146109b9578063d547741f146109cc575f80fd5b8063a71b3907116101b6578063ae815a0411610186578063ae815a0414610939578063b17b4d8614610943578063b5c25ba614610963578063b940a0031461096b578063be48e58d1461097f575f80fd5b8063a71b3907146108ed578063a8c3a3a8146108f5578063abe3219c14610918578063ae541d6514610926575f80fd5b8063a0c54387116101fc578063a0c54387146108ae578063a217fddf146108c1578063a220c2d3146108c8578063a3737869146108db578063a6870e5b146108e5575f80fd5b80639773ee601461085257806397a3a10a146108895780639bfdf9a4146108935780639ee804cb1461089b575f80fd5b80634f560abd1161032e5780637150bc5b116102b8578063844007fe11610288578063844007fe146107fe5780638456cb59146108115780638ca8703c1461081957806391d148541461082c578063962c1e051461083f575f80fd5b80637150bc5b146107a5578063735efb96146107c5578063749f7d8a146107d8578063818c8b26146107eb575f80fd5b80635c975abb116102fe5780635c975abb1461076d578063615a02531461077857806361f00c171461078057806367fbf7311461078a578063712033eb1461079d575f80fd5b80634f560abd146107375780635063b5bd1461073f57806352e0fc80146107475780635c7ccd3b1461075a575f80fd5b80632f739b1d116103af5780633ba0b9a91161037f5780633ba0b9a9146105aa5780633e23a827146105da5780633f4ba83a146106fc578063490ffa351461070457806349115a2e1461072f575f80fd5b80632f739b1d14610506578063342280b31461052957806336568abe146105365780633b5eb03a14610549575f80fd5b806312710361116103f5578063127103611461049757806316515428146104ab578063248a9ca3146104bd57806329f96856146104df5780632f2ff15d146104f3575f80fd5b806301ffc9a714610426578063052a68401461044e5780630989001c14610483578063101b6e341461048d575b5f80fd5b610439610434366004613be2565b610aec565b60405190151581526020015b60405180910390f35b6104757fedb5588a851185ccd926df348aee898122cd3e827fb7020e3c966fdac62a46af81565b604051908152602001610445565b61047561010d5481565b610495610b22565b005b6104755f8051602061460c83398151915281565b60fb5461043990610100900460ff1681565b6104756104cb366004613c09565b5f9081526065602052604090206001015490565b6104755f8051602061466c83398151915281565b610495610501366004613c34565b610b6d565b610439610514366004613c62565b61010f6020525f908152604090205460ff1681565b60fb546104399060ff1681565b610495610544366004613c34565b610b96565b61010554610106546101075461059792916001600160801b0380821692600160801b928390048216929181169163ffffffff908204811691600160a01b8104821691600160c01b9091041687565b6040516104459796959493929190613c7d565b6101025461010354610104546105bf92919083565b60408051938452602084019290925290820152606001610445565b6106886040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152506040805160e081018252610105548152610106546001600160801b038082166020840152600160801b9182900481169383019390935261010754928316606083015263ffffffff90830481166080830152600160a01b8304811660a0830152600160c01b90920490911660c082015290565b60405161044591905f60e0820190508251825260208301516001600160801b0380821660208501528060408601511660408501528060608601511660608501525050608083015163ffffffff80821660808501528060a08601511660a08501528060c08601511660c0850152505092915050565b610495610c19565b60fe54610717906001600160a01b031681565b6040516001600160a01b039091168152602001610445565b610475610c2e565b610495610c4a565b610475610c99565b610495610755366004613c62565b610cb0565b610495610768366004613cc1565b610daa565b60975460ff16610439565b610475611191565b6104756101095481565b610495610798366004613ce7565b6111a8565b610495611491565b6104756107b3366004613c09565b6101166020525f908152604090205481565b6104956107d3366004613d21565b61152e565b6104956107e6366004613c09565b6119e9565b6104956107f9366004613d58565b611a2a565b61049561080c366004613c09565b611c75565b610495611ca3565b610495610827366004613c09565b611cc2565b61043961083a366004613c34565b611d42565b61049561084d366004613c09565b611d6c565b610876610860366004613c09565b6101126020525f908152604090205461ffff1681565b60405161ffff9091168152602001610445565b6104756101085481565b610495611db9565b6104956108a9366004613c62565b611e28565b6104756108bc366004613d87565b611e91565b6104755f81565b6104956108d6366004613ce7565b611fda565b61047561010b5481565b60fd54610475565b610475612406565b60fc5460fd54610903919082565b60408051928352602083019190915201610445565b61010e546104399060ff1681565b610495610934366004613da0565b612430565b61047561010a5481565b610475610951366004613d87565b6101146020525f908152604090205481565b610475612870565b60ff5461010054610101546105bf92919083565b6104755f8051602061462c83398151915281565b6104956109a1366004613c09565b612887565b6104756109b4366004613d87565b6128b5565b6104956109c7366004613c09565b6129ea565b6104956109da366004613c34565b612a3b565b6104956109ed366004613c62565b612a5f565b61047561010c5481565b61047561271081565b610495612b5d565b6104757f8ec4e223bb52129c3d652c6e55a137389860823d9a02acb9d051e591994c6d6f81565b610475600581565b610495612c15565b6104755f8051602061464c83398151915281565b610a60612c55565b6040805182518152602080840151908201529181015190820152606001610445565b610495610a90366004613c09565b612c9e565b610475610aa3366004613d87565b6101136020525f908152604090205481565b61047561c4e081565b610495610acc366004613c09565b612ccc565b610495610adf366004613db1565b612d0d565b610475612f21565b5f6001600160e01b03198216637965db0b60e01b1480610b1c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b610b2a612f4b565b60fb5460ff16610b4d5760405163b1df7eb360e01b815260040160405180910390fd5b610b55612b5d565b610100546101015460ff54610b6b929190612f91565b565b5f82815260656020526040902060010154610b8781612fef565b610b918383612ff9565b505050565b6001600160a01b0381163314610c0b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610c15828261307e565b5050565b5f610c2381612fef565b610c2b6130e4565b50565b5f610c455f8051602061466c833981519152613131565b905090565b60fe54610c619033906001600160a01b031661317c565b61010e805460ff191660011790556040517f3328bda355014adfb66d5d9086ab2c3204d1af7f83a69a3276daeed721f6ce3c905f90a1565b5f610c455f8051602061464c833981519152613131565b60fe54610cc79033906001600160a01b031661317c565b610cd081613201565b6001600160a01b0381165f90815261010f602052604090205460ff16610d095760405163f9644b0760e01b815260040160405180910390fd5b6101095461010d54610d1b9190613dd5565b431015610d3b5760405163111bb2f160e31b815260040160405180910390fd5b4361010d556001600160a01b0381165f90815261010f60205260408120805460ff1916905561010a805491610d6f83613de8565b90915550506040516001600160a01b038216907f6d1de2fb0c63996bae7ba6277c720c0560ba42874ea34c1ebe8e1423b9b47421905f90a250565b335f90815261010f602052604090205460ff16610dda57604051633e2100a160e01b815260040160405180910390fd5b600561010a541015610dff5760405163dfffd22f60e01b815260040160405180910390fd5b610e07612f4b565b43813510610e2857604051633bb0413f60e01b815260040160405180910390fd5b5f8051602061466c8339815191525f9081526101166020527f0683174ee47ba7ded338389c4047f439d06240e01796e9941d2e1ad04002de1b54610e6d908335613e11565b1115610e8c5760405163222ea98560e01b815260040160405180910390fd5b5f338235610ea06040850160208601613e38565b610eb06060860160408701613e38565b610ec06080870160608801613e38565b610ed060a0880160808901613e64565b610ee060c0890160a08a01613e64565b610ef060e08a0160c08b01613e64565b604080516001600160a01b0390991660208a01528801969096526001600160801b0394851660608801529284166080870152921660a085015263ffffffff91821660c0850152811660e084015216610100820152610120016040516020818303038152906040528051906020012090505f825f0135836020016020810190610f789190613e38565b610f886060860160408701613e38565b610f986080870160608801613e38565b610fa860a0880160808901613e64565b610fb860c0890160a08a01613e64565b610fc860e08a0160c08b01613e64565b604051602001610fde9796959493929190613c7d565b6040516020818303038152906040528051906020012090505f6110018383613228565b9050337f72745b0271618e5d84d738ea416e3a3be6eb267e0f639198f63c0ef124c29ffc85356110376040880160208901613e38565b6110476060890160408a01613e38565b61105760808a0160608b01613e38565b61106760a08b0160808c01613e64565b61107760c08c0160a08d01613e64565b61108760e08d0160c08e01613e64565b4260405161109c989796959493929190613e7f565b60405180910390a2600261010a546110b49190613ecc565b6110bf906001613dd5565b8160ff16101580156110d45750610105548435115b1561118b57836101056110e78282613eeb565b507f6988248fd82a7ce842fbdce0c49889ad926bf1548bae4194de0006498d069c949050843561111d6040870160208801613e38565b61112d6060880160408901613e38565b61113d6080890160608a01613e38565b61114d60a08a0160808b01613e64565b61115d60c08b0160a08c01613e64565b61116d60e08c0160c08d01613e64565b42604051611182989796959493929190613e7f565b60405180910390a15b50505050565b5f610c455f8051602061462c833981519152613131565b335f90815261010f602052604090205460ff166111d857604051633e2100a160e01b815260040160405180910390fd5b600561010a5410156111fd5760405163dfffd22f60e01b815260040160405180910390fd5b611205612f4b565b4381351061122657604051633bb0413f60e01b815260040160405180910390fd5b61122e612406565b81351461124e5760405163222ea98560e01b815260040160405180910390fd5b61010b5461125d906001613dd5565b8160200135146112805760405163b59f801760e01b815260040160405180910390fd5b5f61128e6040830183614005565b60405160200161129f929190614107565b60405160208183030381529060405290505f338360200135836040516020016112ca93929190614167565b6040516020818303038152906040528051906020012090505f8360200135836040516020016112fa92919061418d565b6040516020818303038152906040528051906020012090505f61131d8383613228565b9050337f51308cad1da8fe95d4be43112c17d5651d3e3713a675ec61c2214fa16d9f6beb602087013543883561135660408b018b614005565b6040516113679594939291906141a5565b60405180910390a2600261010a5461137f9190613ecc565b61138a906001613dd5565b8160ff161061148a57602085013561010b555f6113aa6040870187614005565b905090505f5b8181101561143b575f6113f06113c960408a018a614005565b848181106113d9576113d96141d5565b90506020028101906113eb91906141e9565b6132c2565b5f81815261011260205260408120805492935061ffff90921691906114148361422c565b91906101000a81548161ffff021916908361ffff16021790555050816001019150506113b0565b507f5454855cf2eeb89296b9e10ba0881425fa305f06ce9ccb1b0ce47bc2f107a19160208701354361147060408a018a614005565b604051611480949392919061424c565b60405180910390a1505b5050505050565b60fb5460ff16156114b557604051632178bc4d60e11b815260040160405180910390fd5b60fe546114cc9033906001600160a01b031661317c565b60fb805460ff610100808304821615810261ff001990931692909217928390556040517fc59a5de02f9d69be770ff0d61bbc894968433bb599f9fd9c2016e149c509c5e5936115249390049091161515815260200190565b60405180910390a1565b611536613354565b335f90815261010f602052604090205460ff1661156657604051633e2100a160e01b815260040160405180910390fd5b600561010a54101561158b5760405163dfffd22f60e01b815260040160405180910390fd5b611593612f4b565b438160200135106115b757604051633bb0413f60e01b815260040160405180910390fd5b5f8051602061462c8339815191525f90815261011660209081527f7a641f2a170436cb9ff0edd342e448ed4a6e9ee295946f1b627f5ee896014a73546115ff91840135613e11565b111561161e5760405163222ea98560e01b815260040160405180910390fd5b5f61162c6040830183614005565b6116396060850185614005565b6116466080870187614005565b60405160200161165b9695949392919061426b565b60408051601f1981840301815291905290505f3361167c6020850185613d87565b84602001358460405160200161169594939291906142b3565b60408051601f19818403018152919052805160209182012091505f906116bd90850185613d87565b8460200135846040516020016116d5939291906142e2565b6040516020818303038152906040528051906020012090505f6116f88383613228565b9050337f9827231af99e07dd2167998d4c6855a2f78e0eead80a6a490393b1c3ead048a16117296020880188613d87565b602088013561173b60408a018a614005565b61174860608c018c614005565b61175560808e018e614005565b4260405161176b99989796959493929190614303565b60405180910390a2600261010a546117839190613ecc565b61178e906001613dd5565b8160ff16101580156117c757506101145f6117ac6020880188613d87565b60ff1660ff1681526020019081526020015f20548560200135115b156119db5760208501803590610114905f906117e39089613d87565b60ff16815260208082019290925260409081015f209290925560fe5482516306ccb9d760e41b815292516001600160a01b0390911692636ccb9d709260048083019391928290030181865afa15801561183e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118629190614364565b6001600160a01b03166399d055c861187d6020880188613d87565b6040516001600160e01b031960e084901b16815260ff9091166004820152602401602060405180830381865afa1580156118b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118dd9190614364565b6001600160a01b03166313797bff6118f86040880188614005565b61190560608a018a614005565b61191260808c018c614005565b6040518763ffffffff1660e01b81526004016119339695949392919061426b565b5f604051808303815f87803b15801561194a575f80fd5b505af115801561195c573d5f803e3d5ffd5b507f64a4ab6f7a6ca6fe9c5750207ea4a9d3e2d5f5ba81f707146b7b20624f61cf1192506119909150506020870187613d87565b60208701356119a26040890189614005565b6119af60608b018b614005565b6119bc60808d018d614005565b426040516119d299989796959493929190614303565b60405180910390a15b50505050610c2b600160c955565b60fe54611a009033906001600160a01b031661317c565b610c2b7f8ec4e223bb52129c3d652c6e55a137389860823d9a02acb9d051e591994c6d6f826133ad565b335f90815261010f602052604090205460ff16611a5a57604051633e2100a160e01b815260040160405180910390fd5b600561010a541015611a7f5760405163dfffd22f60e01b815260040160405180910390fd5b60fb5460ff1615611aa357604051632178bc4d60e11b815260040160405180910390fd5b611aab612f4b565b60fb54610100900460ff1615611ad35760405162ff240360e21b815260040160405180910390fd5b43813510611af457604051633bb0413f60e01b815260040160405180910390fd5b5f8051602061460c8339815191525f9081526101166020527f78e40c6661d84c085b652d9fa30921a229e88abd691be104ff2436753fe240c454611b39908335613e11565b1115611b585760405163222ea98560e01b815260040160405180910390fd5b604080513360208083019190915283358284015283013560608201529082013560808201525f9060a00160408051808303601f190181528282528051602091820120853582850152908501358383015290840135606083015291505f906080016040516020818303038152906040528051906020012090505f611bdb8383613228565b6040805186358152602080880135908201528682013581830152426060820152905191925033917f73327a5c0fdb3104b4a0f993bc20ce59885ac5bfe5f23e4bfdd19c21fb79cb129181900360800190a2600261010a54611c3c9190613ecc565b611c47906001613dd5565b8160ff1610158015611c5c5750610102548435115b1561118b5761118b60208501356040860135863561343e565b60fe54611c8c9033906001600160a01b031661317c565b610c2b5f8051602061466c833981519152826133ad565b60fe54611cba9033906001600160a01b031661317c565b610b6b613551565b60fe54611cd99033906001600160a01b031661317c565b801580611ce7575061271081115b15611d055760405163b14f197760e01b815260040160405180910390fd5b6101088190556040518181527f94a97bfc9c7a83fe5f75c66931ca7d2d16372fdc244afc5db36044f3ca52a520906020015b60405180910390a150565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60fe54611d839033906001600160a01b031661317c565b6101098190556040518181527f4ab6bf3c94e4c92b7b93e89e984ef66d28392f440a58d91d244b6c303e85f04690602001611d37565b60fb5460ff1615611ddd57604051632178bc4d60e11b815260040160405180910390fd5b611de5612f4b565b60fb54610100900460ff16611e0c5760405162ff240360e21b815260040160405180910390fd5b5f805f611e1761358e565b925092509250610b9183838361343e565b5f611e3281612fef565b611e3b82613201565b60fe80546001600160a01b0319166001600160a01b0384169081179091556040519081527fdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485906020015b60405180910390a15050565b5f8060fe5f9054906101000a90046001600160a01b03166001600160a01b0316636ccb9d706040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ee3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f079190614364565b604051637526d42960e01b815260ff851660048201526001600160a01b039190911690637526d42990602401602060405180830381865afa158015611f4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f729190614364565b6001600160a01b031663d0c402766040518163ffffffff1660e01b8152600401606060405180830381865afa158015611fad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fd1919061437f565b95945050505050565b611fe2613354565b335f90815261010f602052604090205460ff1661201257604051633e2100a160e01b815260040160405180910390fd5b600561010a5410156120375760405163dfffd22f60e01b815260040160405180910390fd5b61203f612f4b565b4381602001351061206357604051633bb0413f60e01b815260040160405180910390fd5b5f8051602061464c8339815191525f90815261011660209081527fbc6eadc409e9002a7c49dda55566447da97ef8d5367e522b12bf4559b3c929c8546120ab91840135613e11565b11156120ca5760405163222ea98560e01b815260040160405180910390fd5b5f6120d86040830183614005565b6040516020016120e9929190614107565b60408051601f1981840301815291905290505f3361210a6020850185613d87565b84602001358460405160200161212394939291906142b3565b60408051601f19818403018152919052805160209182012091505f9061214b90850185613d87565b846020013584604051602001612163939291906142e2565b6040516020818303038152906040528051906020012090505f6121868383613228565b9050337f3b426b614a89830a3d92d8dead18e2ded3cba56101dbff12dddfc1c77b21fbe66121b76020880188613d87565b60208801356121c960408a018a614005565b426040516121db9594939291906143aa565b60405180910390a2600261010a546121f39190613ecc565b6121fe906001613dd5565b8160ff161015801561223757506101135f61221c6020880188613d87565b60ff1660ff1681526020019081526020015f20548560200135115b156119db5760208501803590610113905f906122539089613d87565b60ff16815260208082019290925260409081015f209290925560fe5482516306ccb9d760e41b815292516001600160a01b0390911692636ccb9d709260048083019391928290030181865afa1580156122ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122d29190614364565b6001600160a01b03166399d055c86122ed6020880188613d87565b6040516001600160e01b031960e084901b16815260ff9091166004820152602401602060405180830381865afa158015612329573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061234d9190614364565b6001600160a01b031663264f27f36123686040880188614005565b6040518363ffffffff1660e01b8152600401612385929190614107565b5f604051808303815f87803b15801561239c575f80fd5b505af11580156123ae573d5f803e3d5ffd5b507f5209293842928a1567d714f34fed8d87769d89d29dfb20f48ea678b02337e84d92506123e29150506020870187613d87565b60208701356123f46040890189614005565b426040516119d29594939291906143aa565b5f610c457fedb5588a851185ccd926df348aee898122cd3e827fb7020e3c966fdac62a46af613131565b612438613354565b335f90815261010f602052604090205460ff1661246857604051633e2100a160e01b815260040160405180910390fd5b600561010a54101561248d5760405163dfffd22f60e01b815260040160405180910390fd5b612495612f4b565b438135106124b657604051633bb0413f60e01b815260040160405180910390fd5b6124c96108bc6080830160608401613d87565b8135146124e95760405163222ea98560e01b815260040160405180910390fd5b6124fc6109b46080830160608401613d87565b81602001351461251f5760405163b4bf916f60e01b815260040160405180910390fd5b5f336020830135604084013561253b6080860160608701613d87565b604080516001600160a01b039095166020860152840192909252606083015260ff1660808281019190915283013560a08281019190915283013560c08281019190915283013560e0828101919091528301356101008201526101200160408051601f19818403018152918152815160209283012092505f91840135908401356125ca6080860160608701613d87565b60408051602081019490945283019190915260ff1660608201526080808501359082015260a0808501359082015260c0808501359082015260e080850135908201526101000160408051601f198184030181529181528151602092830120925033917f97f29f2f9a3ad2e8ebffd3fb4a6dbf5035b92b432c8344609b8368407dd233779190860135908601356126666080880160608901613d87565b60408051938452602084019290925260ff169082015243606082015260800160405180910390a25f6126988383613228565b9050600261010a546126aa9190613ecc565b6126b5906001613dd5565b8160ff16106128635760fe54604080516306ccb9d760e41b815290515f926001600160a01b031691636ccb9d709160048083019260209291908290030181865afa158015612705573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127299190614364565b6001600160a01b0316637526d4296127476080880160608901613d87565b6040516001600160e01b031960e084901b16815260ff9091166004820152602401602060405180830381865afa158015612783573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127a79190614364565b604051630d83e4ed60e01b81529091506001600160a01b03821690630d83e4ed906127d69088906004016143de565b5f604051808303815f87803b1580156127ed575f80fd5b505af11580156127ff573d5f803e3d5ffd5b507f4394ee7a4ca89453c6900058c69bfaf14014d9fc4d510ead54ae47ac06d1f05e925050506020860135604087013561283f6080890160608a01613d87565b60408051938452602084019290925260ff16908201524360608201526080016119d2565b505050610c2b600160c955565b5f610c455f8051602061460c833981519152613131565b60fe5461289e9033906001600160a01b031661317c565b610c2b5f8051602061464c833981519152826133ad565b60fe54604080516306ccb9d760e41b815290515f926001600160a01b031691636ccb9d709160048083019260209291908290030181865afa1580156128fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129209190614364565b604051637526d42960e01b815260ff841660048201526001600160a01b039190911690637526d42990602401602060405180830381865afa158015612967573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061298b9190614364565b6001600160a01b031663189956a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129c6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b1c919061443d565b60fe54612a019033906001600160a01b031661317c565b61c4e0811115612a2457604051637d5ba07f60e01b815260040160405180910390fd5b610c2b5f8051602061460c833981519152826133ad565b5f82815260656020526040902060010154612a5581612fef565b610b91838361307e565b60fe54612a769033906001600160a01b031661317c565b612a7f81613201565b6001600160a01b0381165f90815261010f602052604090205460ff1615612ab957604051631adb013360e11b815260040160405180910390fd5b6101095461010d54612acb9190613dd5565b431015612aeb5760405163111bb2f160e31b815260040160405180910390fd5b4361010d556001600160a01b0381165f90815261010f60205260408120805460ff1916600117905561010a805491612b2283614454565b90915550506040516001600160a01b038216907fff4a290f0500d113133708d378eb9a151c32d91cb8f5778cfda6328d89cfc4b8905f90a250565b612b65612f4b565b60fe546040516318903ee760e21b81523360048201526001600160a01b0390911690636240fb9c90602401602060405180830381865afa158015612bab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bcf919061446c565b158015612beb57504361c4e061010c54612be99190613dd5565b115b15612c095760405163111bb2f160e31b815260040160405180910390fd5b60fb805460ff19169055565b5f612c1f81612fef565b61010e805460ff191690556040517ff29e751b3c28b619a215d25fee98a7828471a8e554626186d3f8d122f1650292905f90a150565b612c7660405180606001604052805f81526020015f81526020015f81525090565b5060408051606081018252610102548152610103546020820152610104549181019190915290565b60fe54612cb59033906001600160a01b031661317c565b610c2b5f8051602061462c833981519152826133ad565b60fe54612ce39033906001600160a01b031661317c565b610c2b7fedb5588a851185ccd926df348aee898122cd3e827fb7020e3c966fdac62a46af826133ad565b335f90815261010f602052604090205460ff16612d3d57604051633e2100a160e01b815260040160405180910390fd5b600561010a541015612d625760405163dfffd22f60e01b815260040160405180910390fd5b43813510612d8357604051633bb0413f60e01b815260040160405180910390fd5b612d8b612f21565b813514612dab5760405163222ea98560e01b815260040160405180910390fd5b60fc54813511612dcd5760405162e1442b60e41b815260040160405180910390fd5b604080513360208083019190915283358284018190528351808403850181526060840185528051908301206080808501929092528451808503909201825260a090930190935282519201919091205f612e268383613228565b90508060ff16600103612e3f57612e3f6101155f613bb4565b612e4c8460200135613751565b6040805160208681013582528635908201524381830152905133917f6c291a7ce9906b2982643002c104cb0ba9f2b9fecc8b38e9cc3cf5cfca65b4e8919081900360600190a2600361010a546002612ea4919061448b565b612eae9190613ecc565b612eb9906001613dd5565b8160ff161061118b57833560fc55602084013560fd55612eda61011561385f565b60fd5560408051602086810135825286359082015243918101919091527fbc1a0795e699bbeaa982f6049ae9689f4d0e3e22d554adb7c46626be62f3b8bc90606001611182565b5f610c457f8ec4e223bb52129c3d652c6e55a137389860823d9a02acb9d051e591994c6d6f613131565b60975460ff1615610b6b5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c02565b61010383905561010482905561010281905560408051828152602081018590529081018390524260608201527ff525f19964f35afcb9a475680bb27abecbc5e62b4d6d4f66a81a5bd7e8a107e39060800160405180910390a1505050565b610c2b81336138d0565b6130038282611d42565b610c15575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561303a3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6130888282611d42565b15610c15575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6130ec613929565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001611524565b5f8181526101166020526040812054808203613160576040516379a715fb60e11b815260040160405180910390fd5b8061316b8143613ecc565b613175919061448b565b9392505050565b6040516318903ee760e21b81526001600160a01b038381166004830152821690636240fb9c90602401602060405180830381865afa1580156131c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131e4919061446c565b610c155760405163c4230ae360e01b815260040160405180910390fd5b6001600160a01b038116610c2b5760405163d92e233d60e01b815260040160405180910390fd5b5f828152610110602052604081205460ff161561325857604051635da1eec160e11b815260040160405180910390fd5b5f83815261011060209081526040808320805460ff191660011790558483526101119091528120805460ff169161328e836144a2565b82546101009290920a60ff8181021990931691831602179091555f9384526101116020526040909320549092169392505050565b5f603082146132e457604051639ca717ed60e01b815260040160405180910390fd5b6040516002906132fc90859085905f906020016144c0565b60408051601f1981840301815290829052613316916144de565b602060405180830381855afa158015613331573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190613175919061443d565b600260c954036133a65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c02565b600260c955565b805f036133cd57604051637036cfc960e11b815260040160405180910390fd5b5f828152610116602052604090205481036133fb5760405163806e577f60e01b815260040160405180910390fd5b5f828152610116602052604090819020829055517f6231a3e049e2072a042ae727208e7650b487871f4080458371e84d6e7d39113890611e859083815260200190565b610103546101045460fe545f9261345f9290916001600160a01b0316613972565b60fe549091505f9061347d90869086906001600160a01b0316613972565b90506127106101085461271061349391906144f9565b61349d908461448b565b6134a79190613ecc565b81101580156134dd5750612710610108546127106134c59190613dd5565b6134cf908461448b565b6134d99190613ecc565b8111155b6135465760fb805460ff191660019081179091554361010c5561010086905561010185905560ff849055604080519182524260208301527f9dea6ddefbcfcf9c4f6c1c086e462c2ab380c0be199d0289bf23b09f20814415910160405180910390a15050505050565b61148a858585612f91565b613559612f4b565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586131193390565b5f805f8060fe5f9054906101000a90046001600160a01b03166001600160a01b031663489ed6516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135e2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136069190614364565b6001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015613641573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136659190614525565b5050509150505f60fe5f9054906101000a90046001600160a01b03166001600160a01b0316632ca03f666040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136e09190614364565b6001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561371b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061373f9190614525565b50949891975043965090945050505050565b6101158054600181810183555f8390527f77886ee853a0f02c8259429c7bfca08679ca3ab8bdec2c3bd5cca8557e06493a909101839055905490036137935750565b610115545f906137a5906001906144f9565b90505b600181101580156137de57506101156137c26001836144f9565b815481106137d2576137d26141d5565b905f5260205f20015482105b1561383b576101156137f16001836144f9565b81548110613801576138016141d5565b905f5260205f200154610115828154811061381e5761381e6141d5565b5f918252602090912001558061383381613de8565b9150506137a8565b816101158281548110613850576138506141d5565b5f918252602090912001555050565b80545f906002836138708284613ecc565b81548110613880576138806141d5565b905f5260205f20015484600260018561389991906144f9565b6138a39190613ecc565b815481106138b3576138b36141d5565b905f5260205f2001546138c69190613dd5565b6131759190613ecc565b6138da8282611d42565b610c15576138e781613a0c565b6138f2836020613a1e565b604051602001613903929190614571565b60408051601f198184030181529082905262461bcd60e51b8252610c02916004016145e5565b60975460ff16610b6b5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c02565b5f80826001600160a01b031663f0141d846040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139d4919061443d565b90505f8515806139e2575084155b613a0057846139f1838861448b565b6139fb9190613ecc565b613a02565b815b9695505050505050565b6060610b1c6001600160a01b03831660145b60605f613a2c83600261448b565b613a37906002613dd5565b67ffffffffffffffff811115613a4f57613a4f6145f7565b6040519080825280601f01601f191660200182016040528015613a79576020820181803683370190505b509050600360fc1b815f81518110613a9357613a936141d5565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110613ac157613ac16141d5565b60200101906001600160f81b03191690815f1a9053505f613ae384600261448b565b613aee906001613dd5565b90505b6001811115613b65576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613b2257613b226141d5565b1a60f81b828281518110613b3857613b386141d5565b60200101906001600160f81b03191690815f1a90535060049490941c93613b5e81613de8565b9050613af1565b5083156131755760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610c02565b5080545f8255905f5260205f2090810190610c2b91905b80821115613bde575f8155600101613bcb565b5090565b5f60208284031215613bf2575f80fd5b81356001600160e01b031981168114613175575f80fd5b5f60208284031215613c19575f80fd5b5035919050565b6001600160a01b0381168114610c2b575f80fd5b5f8060408385031215613c45575f80fd5b823591506020830135613c5781613c20565b809150509250929050565b5f60208284031215613c72575f80fd5b813561317581613c20565b9687526001600160801b039586166020880152938516604087015291909316606085015263ffffffff9283166080850152821660a08401521660c082015260e00190565b5f60e08284031215613cd1575f80fd5b50919050565b5f60608284031215613cd1575f80fd5b5f60208284031215613cf7575f80fd5b813567ffffffffffffffff811115613d0d575f80fd5b613d1984828501613cd7565b949350505050565b5f60208284031215613d31575f80fd5b813567ffffffffffffffff811115613d47575f80fd5b820160a08185031215613175575f80fd5b5f60608284031215613d68575f80fd5b6131758383613cd7565b803560ff81168114613d82575f80fd5b919050565b5f60208284031215613d97575f80fd5b61317582613d72565b5f6101008284031215613cd1575f80fd5b5f60408284031215613cd1575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b1c57610b1c613dc1565b5f81613df657613df6613dc1565b505f190190565b634e487b7160e01b5f52601260045260245ffd5b5f82613e1f57613e1f613dfd565b500690565b6001600160801b0381168114610c2b575f80fd5b5f60208284031215613e48575f80fd5b813561317581613e24565b63ffffffff81168114610c2b575f80fd5b5f60208284031215613e74575f80fd5b813561317581613e53565b9788526001600160801b039687166020890152948616604088015292909416606086015263ffffffff908116608086015292831660a085015290911660c083015260e08201526101000190565b5f82613eda57613eda613dfd565b500490565b5f8135610b1c81613e53565b81358155600181016020830135613f0181613e24565b81546001600160801b0319166001600160801b038216178255506040830135613f2981613e24565b81546001600160801b031660809190911b6001600160801b031916179055600281016060830135613f5981613e24565b81546001600160801b0319166001600160801b038216178255506080830135613f8181613e53565b815463ffffffff60801b191660809190911b63ffffffff60801b16178155613fd2613fae60a08501613edf565b82805463ffffffff60a01b191660a09290921b63ffffffff60a01b16919091179055565b610b91613fe160c08501613edf565b82805463ffffffff60c01b191660c09290921b63ffffffff60c01b16919091179055565b5f808335601e1984360301811261401a575f80fd5b83018035915067ffffffffffffffff821115614034575f80fd5b6020019150600581901b360382131561404b575f80fd5b9250929050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b8183525f6020808501808196508560051b81019150845f5b878110156140fa5782840389528135601e198836030181126140b2575f80fd5b8701858101903567ffffffffffffffff8111156140cd575f80fd5b8036038213156140db575f80fd5b6140e6868284614052565b9a87019a9550505090840190600101614092565b5091979650505050505050565b602081525f613d1960208301848661407a565b5f5b8381101561413457818101518382015260200161411c565b50505f910152565b5f815180845261415381602086016020860161411a565b601f01601f19169290920160200192915050565b60018060a01b0384168152826020820152606060408201525f611fd1606083018461413c565b828152604060208201525f613d19604083018461413c565b858152846020820152836040820152608060608201525f6141ca60808301848661407a565b979650505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e198436030181126141fe575f80fd5b83018035915067ffffffffffffffff821115614218575f80fd5b60200191503681900382131561404b575f80fd5b5f61ffff80831681810361424257614242613dc1565b6001019392505050565b848152836020820152606060408201525f613a0260608301848661407a565b606081525f61427e60608301888a61407a565b828103602084015261429181878961407a565b905082810360408401526142a681858761407a565b9998505050505050505050565b60018060a01b038516815260ff84166020820152826040820152608060608201525f613a02608083018461413c565b60ff84168152826020820152606060408201525f611fd1606083018461413c565b60ff8a16815288602082015260c060408201525f61432560c08301898b61407a565b828103606084015261433881888a61407a565b9050828103608084015261434d81868861407a565b9150508260a08301529a9950505050505050505050565b5f60208284031215614374575f80fd5b815161317581613c20565b5f805f60608486031215614391575f80fd5b8351925060208401519150604084015190509250925092565b60ff86168152846020820152608060408201525f6143cc60808301858761407a565b90508260608301529695505050505050565b813581526020808301359082015260408083013590820152610100810160ff61440960608501613d72565b1660608301526080830135608083015260a083013560a083015260c083013560c083015260e083013560e083015292915050565b5f6020828403121561444d575f80fd5b5051919050565b5f6001820161446557614465613dc1565b5060010190565b5f6020828403121561447c575f80fd5b81518015158114613175575f80fd5b8082028115828204841417610b1c57610b1c613dc1565b5f60ff821660ff81036144b7576144b7613dc1565b60010192915050565b828482376001600160801b0319919091169101908152601001919050565b5f82516144ef81846020870161411a565b9190910192915050565b81810381811115610b1c57610b1c613dc1565b805169ffffffffffffffffffff81168114613d82575f80fd5b5f805f805f60a08688031215614539575f80fd5b6145428661450c565b94506020860151935060408601519250606086015191506145656080870161450c565b90509295509295909350565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516145a881601785016020880161411a565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516145d981602884016020880161411a565b01602801949350505050565b602081525f613175602083018461413c565b634e487b7160e01b5f52604160045260245ffdfe783e3ebf40ee443ac9cbca8dc88c9f47450598583c2168f0ae0021de08ad333b6a7b51c29672c0ed412394a3e65ab758361d7c963b8657ce8c1f43dc0770b1629ae142790790fc18374cd6a6cc28573ecc78841658523afa63055cea42a9e1dd7607f5053d01557adb731d4aad009009bba2bf77a5b5f779733919451d426336a2646970667358221220c4ed90d27fad89c563dc7b8b1e4c2d00c1200316230dbc228abd053ef1a8301d64736f6c63430008140033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", +} + +// StaderOracleABI is the input ABI used to generate the binding from. +// Deprecated: Use StaderOracleMetaData.ABI instead. +var StaderOracleABI = StaderOracleMetaData.ABI + +// StaderOracleBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use StaderOracleMetaData.Bin instead. +var StaderOracleBin = StaderOracleMetaData.Bin + +// DeployStaderOracle deploys a new Ethereum contract, binding an instance of StaderOracle to it. +func DeployStaderOracle(auth *bind.TransactOpts, backend bind.ContractBackend, _admin common.Address, _staderConfig common.Address) (common.Address, *types.Transaction, *StaderOracle, error) { + parsed, err := StaderOracleMetaData.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(StaderOracleBin), backend, _admin, _staderConfig) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &StaderOracle{StaderOracleCaller: StaderOracleCaller{contract: contract}, StaderOracleTransactor: StaderOracleTransactor{contract: contract}, StaderOracleFilterer: StaderOracleFilterer{contract: contract}}, nil +} + +// StaderOracle is an auto generated Go binding around an Ethereum contract. +type StaderOracle struct { + StaderOracleCaller // Read-only binding to the contract + StaderOracleTransactor // Write-only binding to the contract + StaderOracleFilterer // Log filterer for contract events +} + +// StaderOracleCaller is an auto generated read-only Go binding around an Ethereum contract. +type StaderOracleCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StaderOracleTransactor is an auto generated write-only Go binding around an Ethereum contract. +type StaderOracleTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StaderOracleFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type StaderOracleFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// StaderOracleSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type StaderOracleSession struct { + Contract *StaderOracle // 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 +} + +// StaderOracleCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type StaderOracleCallerSession struct { + Contract *StaderOracleCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// StaderOracleTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type StaderOracleTransactorSession struct { + Contract *StaderOracleTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// StaderOracleRaw is an auto generated low-level Go binding around an Ethereum contract. +type StaderOracleRaw struct { + Contract *StaderOracle // Generic contract binding to access the raw methods on +} + +// StaderOracleCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type StaderOracleCallerRaw struct { + Contract *StaderOracleCaller // Generic read-only contract binding to access the raw methods on +} + +// StaderOracleTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type StaderOracleTransactorRaw struct { + Contract *StaderOracleTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewStaderOracle creates a new instance of StaderOracle, bound to a specific deployed contract. +func NewStaderOracle(address common.Address, backend bind.ContractBackend) (*StaderOracle, error) { + contract, err := bindStaderOracle(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &StaderOracle{StaderOracleCaller: StaderOracleCaller{contract: contract}, StaderOracleTransactor: StaderOracleTransactor{contract: contract}, StaderOracleFilterer: StaderOracleFilterer{contract: contract}}, nil +} + +// NewStaderOracleCaller creates a new read-only instance of StaderOracle, bound to a specific deployed contract. +func NewStaderOracleCaller(address common.Address, caller bind.ContractCaller) (*StaderOracleCaller, error) { + contract, err := bindStaderOracle(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &StaderOracleCaller{contract: contract}, nil +} + +// NewStaderOracleTransactor creates a new write-only instance of StaderOracle, bound to a specific deployed contract. +func NewStaderOracleTransactor(address common.Address, transactor bind.ContractTransactor) (*StaderOracleTransactor, error) { + contract, err := bindStaderOracle(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &StaderOracleTransactor{contract: contract}, nil +} + +// NewStaderOracleFilterer creates a new log filterer instance of StaderOracle, bound to a specific deployed contract. +func NewStaderOracleFilterer(address common.Address, filterer bind.ContractFilterer) (*StaderOracleFilterer, error) { + contract, err := bindStaderOracle(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &StaderOracleFilterer{contract: contract}, nil +} + +// bindStaderOracle binds a generic wrapper to an already deployed contract. +func bindStaderOracle(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := StaderOracleMetaData.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 (_StaderOracle *StaderOracleRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StaderOracle.Contract.StaderOracleCaller.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 (_StaderOracle *StaderOracleRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StaderOracle.Contract.StaderOracleTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StaderOracle *StaderOracleRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StaderOracle.Contract.StaderOracleTransactor.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 (_StaderOracle *StaderOracleCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _StaderOracle.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 (_StaderOracle *StaderOracleTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StaderOracle.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_StaderOracle *StaderOracleTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _StaderOracle.Contract.contract.Transact(opts, method, params...) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_StaderOracle *StaderOracleCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_StaderOracle *StaderOracleSession) DEFAULTADMINROLE() ([32]byte, error) { + return _StaderOracle.Contract.DEFAULTADMINROLE(&_StaderOracle.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_StaderOracle *StaderOracleCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _StaderOracle.Contract.DEFAULTADMINROLE(&_StaderOracle.CallOpts) +} + +// ERCHANGEMAXBPS is a free data retrieval call binding the contract method 0xe0bcb378. +// +// Solidity: function ER_CHANGE_MAX_BPS() view returns(uint256) +func (_StaderOracle *StaderOracleCaller) ERCHANGEMAXBPS(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "ER_CHANGE_MAX_BPS") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ERCHANGEMAXBPS is a free data retrieval call binding the contract method 0xe0bcb378. +// +// Solidity: function ER_CHANGE_MAX_BPS() view returns(uint256) +func (_StaderOracle *StaderOracleSession) ERCHANGEMAXBPS() (*big.Int, error) { + return _StaderOracle.Contract.ERCHANGEMAXBPS(&_StaderOracle.CallOpts) +} + +// ERCHANGEMAXBPS is a free data retrieval call binding the contract method 0xe0bcb378. +// +// Solidity: function ER_CHANGE_MAX_BPS() view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) ERCHANGEMAXBPS() (*big.Int, error) { + return _StaderOracle.Contract.ERCHANGEMAXBPS(&_StaderOracle.CallOpts) +} + +// ETHXERUF is a free data retrieval call binding the contract method 0x12710361. +// +// Solidity: function ETHX_ER_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleCaller) ETHXERUF(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "ETHX_ER_UF") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ETHXERUF is a free data retrieval call binding the contract method 0x12710361. +// +// Solidity: function ETHX_ER_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleSession) ETHXERUF() ([32]byte, error) { + return _StaderOracle.Contract.ETHXERUF(&_StaderOracle.CallOpts) +} + +// ETHXERUF is a free data retrieval call binding the contract method 0x12710361. +// +// Solidity: function ETHX_ER_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleCallerSession) ETHXERUF() ([32]byte, error) { + return _StaderOracle.Contract.ETHXERUF(&_StaderOracle.CallOpts) +} + +// MAXERUPDATEFREQUENCY is a free data retrieval call binding the contract method 0xf10b2569. +// +// Solidity: function MAX_ER_UPDATE_FREQUENCY() view returns(uint256) +func (_StaderOracle *StaderOracleCaller) MAXERUPDATEFREQUENCY(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "MAX_ER_UPDATE_FREQUENCY") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MAXERUPDATEFREQUENCY is a free data retrieval call binding the contract method 0xf10b2569. +// +// Solidity: function MAX_ER_UPDATE_FREQUENCY() view returns(uint256) +func (_StaderOracle *StaderOracleSession) MAXERUPDATEFREQUENCY() (*big.Int, error) { + return _StaderOracle.Contract.MAXERUPDATEFREQUENCY(&_StaderOracle.CallOpts) +} + +// MAXERUPDATEFREQUENCY is a free data retrieval call binding the contract method 0xf10b2569. +// +// Solidity: function MAX_ER_UPDATE_FREQUENCY() view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) MAXERUPDATEFREQUENCY() (*big.Int, error) { + return _StaderOracle.Contract.MAXERUPDATEFREQUENCY(&_StaderOracle.CallOpts) +} + +// MINTRUSTEDNODES is a free data retrieval call binding the contract method 0xe36c3140. +// +// Solidity: function MIN_TRUSTED_NODES() view returns(uint256) +func (_StaderOracle *StaderOracleCaller) MINTRUSTEDNODES(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "MIN_TRUSTED_NODES") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MINTRUSTEDNODES is a free data retrieval call binding the contract method 0xe36c3140. +// +// Solidity: function MIN_TRUSTED_NODES() view returns(uint256) +func (_StaderOracle *StaderOracleSession) MINTRUSTEDNODES() (*big.Int, error) { + return _StaderOracle.Contract.MINTRUSTEDNODES(&_StaderOracle.CallOpts) +} + +// MINTRUSTEDNODES is a free data retrieval call binding the contract method 0xe36c3140. +// +// Solidity: function MIN_TRUSTED_NODES() view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) MINTRUSTEDNODES() (*big.Int, error) { + return _StaderOracle.Contract.MINTRUSTEDNODES(&_StaderOracle.CallOpts) +} + +// MISSEDATTESTATIONPENALTYUF is a free data retrieval call binding the contract method 0x052a6840. +// +// Solidity: function MISSED_ATTESTATION_PENALTY_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleCaller) MISSEDATTESTATIONPENALTYUF(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "MISSED_ATTESTATION_PENALTY_UF") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MISSEDATTESTATIONPENALTYUF is a free data retrieval call binding the contract method 0x052a6840. +// +// Solidity: function MISSED_ATTESTATION_PENALTY_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleSession) MISSEDATTESTATIONPENALTYUF() ([32]byte, error) { + return _StaderOracle.Contract.MISSEDATTESTATIONPENALTYUF(&_StaderOracle.CallOpts) +} + +// MISSEDATTESTATIONPENALTYUF is a free data retrieval call binding the contract method 0x052a6840. +// +// Solidity: function MISSED_ATTESTATION_PENALTY_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleCallerSession) MISSEDATTESTATIONPENALTYUF() ([32]byte, error) { + return _StaderOracle.Contract.MISSEDATTESTATIONPENALTYUF(&_StaderOracle.CallOpts) +} + +// SDPRICEUF is a free data retrieval call binding the contract method 0xe2f63392. +// +// Solidity: function SD_PRICE_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleCaller) SDPRICEUF(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "SD_PRICE_UF") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SDPRICEUF is a free data retrieval call binding the contract method 0xe2f63392. +// +// Solidity: function SD_PRICE_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleSession) SDPRICEUF() ([32]byte, error) { + return _StaderOracle.Contract.SDPRICEUF(&_StaderOracle.CallOpts) +} + +// SDPRICEUF is a free data retrieval call binding the contract method 0xe2f63392. +// +// Solidity: function SD_PRICE_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleCallerSession) SDPRICEUF() ([32]byte, error) { + return _StaderOracle.Contract.SDPRICEUF(&_StaderOracle.CallOpts) +} + +// VALIDATORSTATSUF is a free data retrieval call binding the contract method 0x29f96856. +// +// Solidity: function VALIDATOR_STATS_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleCaller) VALIDATORSTATSUF(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "VALIDATOR_STATS_UF") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// VALIDATORSTATSUF is a free data retrieval call binding the contract method 0x29f96856. +// +// Solidity: function VALIDATOR_STATS_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleSession) VALIDATORSTATSUF() ([32]byte, error) { + return _StaderOracle.Contract.VALIDATORSTATSUF(&_StaderOracle.CallOpts) +} + +// VALIDATORSTATSUF is a free data retrieval call binding the contract method 0x29f96856. +// +// Solidity: function VALIDATOR_STATS_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleCallerSession) VALIDATORSTATSUF() ([32]byte, error) { + return _StaderOracle.Contract.VALIDATORSTATSUF(&_StaderOracle.CallOpts) +} + +// VALIDATORVERIFICATIONDETAILUF is a free data retrieval call binding the contract method 0xbe48e58d. +// +// Solidity: function VALIDATOR_VERIFICATION_DETAIL_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleCaller) VALIDATORVERIFICATIONDETAILUF(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "VALIDATOR_VERIFICATION_DETAIL_UF") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// VALIDATORVERIFICATIONDETAILUF is a free data retrieval call binding the contract method 0xbe48e58d. +// +// Solidity: function VALIDATOR_VERIFICATION_DETAIL_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleSession) VALIDATORVERIFICATIONDETAILUF() ([32]byte, error) { + return _StaderOracle.Contract.VALIDATORVERIFICATIONDETAILUF(&_StaderOracle.CallOpts) +} + +// VALIDATORVERIFICATIONDETAILUF is a free data retrieval call binding the contract method 0xbe48e58d. +// +// Solidity: function VALIDATOR_VERIFICATION_DETAIL_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleCallerSession) VALIDATORVERIFICATIONDETAILUF() ([32]byte, error) { + return _StaderOracle.Contract.VALIDATORVERIFICATIONDETAILUF(&_StaderOracle.CallOpts) +} + +// WITHDRAWNVALIDATORSUF is a free data retrieval call binding the contract method 0xe61befa7. +// +// Solidity: function WITHDRAWN_VALIDATORS_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleCaller) WITHDRAWNVALIDATORSUF(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "WITHDRAWN_VALIDATORS_UF") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// WITHDRAWNVALIDATORSUF is a free data retrieval call binding the contract method 0xe61befa7. +// +// Solidity: function WITHDRAWN_VALIDATORS_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleSession) WITHDRAWNVALIDATORSUF() ([32]byte, error) { + return _StaderOracle.Contract.WITHDRAWNVALIDATORSUF(&_StaderOracle.CallOpts) +} + +// WITHDRAWNVALIDATORSUF is a free data retrieval call binding the contract method 0xe61befa7. +// +// Solidity: function WITHDRAWN_VALIDATORS_UF() view returns(bytes32) +func (_StaderOracle *StaderOracleCallerSession) WITHDRAWNVALIDATORSUF() ([32]byte, error) { + return _StaderOracle.Contract.WITHDRAWNVALIDATORSUF(&_StaderOracle.CallOpts) +} + +// ErChangeLimit is a free data retrieval call binding the contract method 0x97a3a10a. +// +// Solidity: function erChangeLimit() view returns(uint256) +func (_StaderOracle *StaderOracleCaller) ErChangeLimit(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "erChangeLimit") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ErChangeLimit is a free data retrieval call binding the contract method 0x97a3a10a. +// +// Solidity: function erChangeLimit() view returns(uint256) +func (_StaderOracle *StaderOracleSession) ErChangeLimit() (*big.Int, error) { + return _StaderOracle.Contract.ErChangeLimit(&_StaderOracle.CallOpts) +} + +// ErChangeLimit is a free data retrieval call binding the contract method 0x97a3a10a. +// +// Solidity: function erChangeLimit() view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) ErChangeLimit() (*big.Int, error) { + return _StaderOracle.Contract.ErChangeLimit(&_StaderOracle.CallOpts) +} + +// ErInspectionMode is a free data retrieval call binding the contract method 0x342280b3. +// +// Solidity: function erInspectionMode() view returns(bool) +func (_StaderOracle *StaderOracleCaller) ErInspectionMode(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "erInspectionMode") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// ErInspectionMode is a free data retrieval call binding the contract method 0x342280b3. +// +// Solidity: function erInspectionMode() view returns(bool) +func (_StaderOracle *StaderOracleSession) ErInspectionMode() (bool, error) { + return _StaderOracle.Contract.ErInspectionMode(&_StaderOracle.CallOpts) +} + +// ErInspectionMode is a free data retrieval call binding the contract method 0x342280b3. +// +// Solidity: function erInspectionMode() view returns(bool) +func (_StaderOracle *StaderOracleCallerSession) ErInspectionMode() (bool, error) { + return _StaderOracle.Contract.ErInspectionMode(&_StaderOracle.CallOpts) +} + +// ErInspectionModeStartBlock is a free data retrieval call binding the contract method 0xde271c6d. +// +// Solidity: function erInspectionModeStartBlock() view returns(uint256) +func (_StaderOracle *StaderOracleCaller) ErInspectionModeStartBlock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "erInspectionModeStartBlock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ErInspectionModeStartBlock is a free data retrieval call binding the contract method 0xde271c6d. +// +// Solidity: function erInspectionModeStartBlock() view returns(uint256) +func (_StaderOracle *StaderOracleSession) ErInspectionModeStartBlock() (*big.Int, error) { + return _StaderOracle.Contract.ErInspectionModeStartBlock(&_StaderOracle.CallOpts) +} + +// ErInspectionModeStartBlock is a free data retrieval call binding the contract method 0xde271c6d. +// +// Solidity: function erInspectionModeStartBlock() view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) ErInspectionModeStartBlock() (*big.Int, error) { + return _StaderOracle.Contract.ErInspectionModeStartBlock(&_StaderOracle.CallOpts) +} + +// ExchangeRate is a free data retrieval call binding the contract method 0x3ba0b9a9. +// +// Solidity: function exchangeRate() view returns(uint256 reportingBlockNumber, uint256 totalETHBalance, uint256 totalETHXSupply) +func (_StaderOracle *StaderOracleCaller) ExchangeRate(opts *bind.CallOpts) (struct { + ReportingBlockNumber *big.Int + TotalETHBalance *big.Int + TotalETHXSupply *big.Int +}, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "exchangeRate") + + outstruct := new(struct { + ReportingBlockNumber *big.Int + TotalETHBalance *big.Int + TotalETHXSupply *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.ReportingBlockNumber = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.TotalETHBalance = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.TotalETHXSupply = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// ExchangeRate is a free data retrieval call binding the contract method 0x3ba0b9a9. +// +// Solidity: function exchangeRate() view returns(uint256 reportingBlockNumber, uint256 totalETHBalance, uint256 totalETHXSupply) +func (_StaderOracle *StaderOracleSession) ExchangeRate() (struct { + ReportingBlockNumber *big.Int + TotalETHBalance *big.Int + TotalETHXSupply *big.Int +}, error) { + return _StaderOracle.Contract.ExchangeRate(&_StaderOracle.CallOpts) +} + +// ExchangeRate is a free data retrieval call binding the contract method 0x3ba0b9a9. +// +// Solidity: function exchangeRate() view returns(uint256 reportingBlockNumber, uint256 totalETHBalance, uint256 totalETHXSupply) +func (_StaderOracle *StaderOracleCallerSession) ExchangeRate() (struct { + ReportingBlockNumber *big.Int + TotalETHBalance *big.Int + TotalETHXSupply *big.Int +}, error) { + return _StaderOracle.Contract.ExchangeRate(&_StaderOracle.CallOpts) +} + +// GetCurrentRewardsIndexByPoolId is a free data retrieval call binding the contract method 0xd06628ed. +// +// Solidity: function getCurrentRewardsIndexByPoolId(uint8 _poolId) view returns(uint256) +func (_StaderOracle *StaderOracleCaller) GetCurrentRewardsIndexByPoolId(opts *bind.CallOpts, _poolId uint8) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "getCurrentRewardsIndexByPoolId", _poolId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetCurrentRewardsIndexByPoolId is a free data retrieval call binding the contract method 0xd06628ed. +// +// Solidity: function getCurrentRewardsIndexByPoolId(uint8 _poolId) view returns(uint256) +func (_StaderOracle *StaderOracleSession) GetCurrentRewardsIndexByPoolId(_poolId uint8) (*big.Int, error) { + return _StaderOracle.Contract.GetCurrentRewardsIndexByPoolId(&_StaderOracle.CallOpts, _poolId) +} + +// GetCurrentRewardsIndexByPoolId is a free data retrieval call binding the contract method 0xd06628ed. +// +// Solidity: function getCurrentRewardsIndexByPoolId(uint8 _poolId) view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) GetCurrentRewardsIndexByPoolId(_poolId uint8) (*big.Int, error) { + return _StaderOracle.Contract.GetCurrentRewardsIndexByPoolId(&_StaderOracle.CallOpts, _poolId) +} + +// GetERReportableBlock is a free data retrieval call binding the contract method 0xb5c25ba6. +// +// Solidity: function getERReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleCaller) GetERReportableBlock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "getERReportableBlock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetERReportableBlock is a free data retrieval call binding the contract method 0xb5c25ba6. +// +// Solidity: function getERReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleSession) GetERReportableBlock() (*big.Int, error) { + return _StaderOracle.Contract.GetERReportableBlock(&_StaderOracle.CallOpts) +} + +// GetERReportableBlock is a free data retrieval call binding the contract method 0xb5c25ba6. +// +// Solidity: function getERReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) GetERReportableBlock() (*big.Int, error) { + return _StaderOracle.Contract.GetERReportableBlock(&_StaderOracle.CallOpts) +} + +// GetExchangeRate is a free data retrieval call binding the contract method 0xe6aa216c. +// +// Solidity: function getExchangeRate() view returns((uint256,uint256,uint256)) +func (_StaderOracle *StaderOracleCaller) GetExchangeRate(opts *bind.CallOpts) (ExchangeRate, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "getExchangeRate") + + if err != nil { + return *new(ExchangeRate), err + } + + out0 := *abi.ConvertType(out[0], new(ExchangeRate)).(*ExchangeRate) + + return out0, err + +} + +// GetExchangeRate is a free data retrieval call binding the contract method 0xe6aa216c. +// +// Solidity: function getExchangeRate() view returns((uint256,uint256,uint256)) +func (_StaderOracle *StaderOracleSession) GetExchangeRate() (ExchangeRate, error) { + return _StaderOracle.Contract.GetExchangeRate(&_StaderOracle.CallOpts) +} + +// GetExchangeRate is a free data retrieval call binding the contract method 0xe6aa216c. +// +// Solidity: function getExchangeRate() view returns((uint256,uint256,uint256)) +func (_StaderOracle *StaderOracleCallerSession) GetExchangeRate() (ExchangeRate, error) { + return _StaderOracle.Contract.GetExchangeRate(&_StaderOracle.CallOpts) +} + +// GetMerkleRootReportableBlockByPoolId is a free data retrieval call binding the contract method 0xa0c54387. +// +// Solidity: function getMerkleRootReportableBlockByPoolId(uint8 _poolId) view returns(uint256) +func (_StaderOracle *StaderOracleCaller) GetMerkleRootReportableBlockByPoolId(opts *bind.CallOpts, _poolId uint8) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "getMerkleRootReportableBlockByPoolId", _poolId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetMerkleRootReportableBlockByPoolId is a free data retrieval call binding the contract method 0xa0c54387. +// +// Solidity: function getMerkleRootReportableBlockByPoolId(uint8 _poolId) view returns(uint256) +func (_StaderOracle *StaderOracleSession) GetMerkleRootReportableBlockByPoolId(_poolId uint8) (*big.Int, error) { + return _StaderOracle.Contract.GetMerkleRootReportableBlockByPoolId(&_StaderOracle.CallOpts, _poolId) +} + +// GetMerkleRootReportableBlockByPoolId is a free data retrieval call binding the contract method 0xa0c54387. +// +// Solidity: function getMerkleRootReportableBlockByPoolId(uint8 _poolId) view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) GetMerkleRootReportableBlockByPoolId(_poolId uint8) (*big.Int, error) { + return _StaderOracle.Contract.GetMerkleRootReportableBlockByPoolId(&_StaderOracle.CallOpts, _poolId) +} + +// GetMissedAttestationPenaltyReportableBlock is a free data retrieval call binding the contract method 0xa71b3907. +// +// Solidity: function getMissedAttestationPenaltyReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleCaller) GetMissedAttestationPenaltyReportableBlock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "getMissedAttestationPenaltyReportableBlock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetMissedAttestationPenaltyReportableBlock is a free data retrieval call binding the contract method 0xa71b3907. +// +// Solidity: function getMissedAttestationPenaltyReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleSession) GetMissedAttestationPenaltyReportableBlock() (*big.Int, error) { + return _StaderOracle.Contract.GetMissedAttestationPenaltyReportableBlock(&_StaderOracle.CallOpts) +} + +// GetMissedAttestationPenaltyReportableBlock is a free data retrieval call binding the contract method 0xa71b3907. +// +// Solidity: function getMissedAttestationPenaltyReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) GetMissedAttestationPenaltyReportableBlock() (*big.Int, error) { + return _StaderOracle.Contract.GetMissedAttestationPenaltyReportableBlock(&_StaderOracle.CallOpts) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_StaderOracle *StaderOracleCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "getRoleAdmin", role) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_StaderOracle *StaderOracleSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _StaderOracle.Contract.GetRoleAdmin(&_StaderOracle.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_StaderOracle *StaderOracleCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _StaderOracle.Contract.GetRoleAdmin(&_StaderOracle.CallOpts, role) +} + +// GetSDPriceInETH is a free data retrieval call binding the contract method 0xa6870e5b. +// +// Solidity: function getSDPriceInETH() view returns(uint256) +func (_StaderOracle *StaderOracleCaller) GetSDPriceInETH(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "getSDPriceInETH") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetSDPriceInETH is a free data retrieval call binding the contract method 0xa6870e5b. +// +// Solidity: function getSDPriceInETH() view returns(uint256) +func (_StaderOracle *StaderOracleSession) GetSDPriceInETH() (*big.Int, error) { + return _StaderOracle.Contract.GetSDPriceInETH(&_StaderOracle.CallOpts) +} + +// GetSDPriceInETH is a free data retrieval call binding the contract method 0xa6870e5b. +// +// Solidity: function getSDPriceInETH() view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) GetSDPriceInETH() (*big.Int, error) { + return _StaderOracle.Contract.GetSDPriceInETH(&_StaderOracle.CallOpts) +} + +// GetSDPriceReportableBlock is a free data retrieval call binding the contract method 0xfc8b821c. +// +// Solidity: function getSDPriceReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleCaller) GetSDPriceReportableBlock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "getSDPriceReportableBlock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetSDPriceReportableBlock is a free data retrieval call binding the contract method 0xfc8b821c. +// +// Solidity: function getSDPriceReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleSession) GetSDPriceReportableBlock() (*big.Int, error) { + return _StaderOracle.Contract.GetSDPriceReportableBlock(&_StaderOracle.CallOpts) +} + +// GetSDPriceReportableBlock is a free data retrieval call binding the contract method 0xfc8b821c. +// +// Solidity: function getSDPriceReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) GetSDPriceReportableBlock() (*big.Int, error) { + return _StaderOracle.Contract.GetSDPriceReportableBlock(&_StaderOracle.CallOpts) +} + +// GetValidatorStats is a free data retrieval call binding the contract method 0x3e23a827. +// +// Solidity: function getValidatorStats() view returns((uint256,uint128,uint128,uint128,uint32,uint32,uint32)) +func (_StaderOracle *StaderOracleCaller) GetValidatorStats(opts *bind.CallOpts) (ValidatorStats, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "getValidatorStats") + + if err != nil { + return *new(ValidatorStats), err + } + + out0 := *abi.ConvertType(out[0], new(ValidatorStats)).(*ValidatorStats) + + return out0, err + +} + +// GetValidatorStats is a free data retrieval call binding the contract method 0x3e23a827. +// +// Solidity: function getValidatorStats() view returns((uint256,uint128,uint128,uint128,uint32,uint32,uint32)) +func (_StaderOracle *StaderOracleSession) GetValidatorStats() (ValidatorStats, error) { + return _StaderOracle.Contract.GetValidatorStats(&_StaderOracle.CallOpts) +} + +// GetValidatorStats is a free data retrieval call binding the contract method 0x3e23a827. +// +// Solidity: function getValidatorStats() view returns((uint256,uint128,uint128,uint128,uint32,uint32,uint32)) +func (_StaderOracle *StaderOracleCallerSession) GetValidatorStats() (ValidatorStats, error) { + return _StaderOracle.Contract.GetValidatorStats(&_StaderOracle.CallOpts) +} + +// GetValidatorStatsReportableBlock is a free data retrieval call binding the contract method 0x49115a2e. +// +// Solidity: function getValidatorStatsReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleCaller) GetValidatorStatsReportableBlock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "getValidatorStatsReportableBlock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetValidatorStatsReportableBlock is a free data retrieval call binding the contract method 0x49115a2e. +// +// Solidity: function getValidatorStatsReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleSession) GetValidatorStatsReportableBlock() (*big.Int, error) { + return _StaderOracle.Contract.GetValidatorStatsReportableBlock(&_StaderOracle.CallOpts) +} + +// GetValidatorStatsReportableBlock is a free data retrieval call binding the contract method 0x49115a2e. +// +// Solidity: function getValidatorStatsReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) GetValidatorStatsReportableBlock() (*big.Int, error) { + return _StaderOracle.Contract.GetValidatorStatsReportableBlock(&_StaderOracle.CallOpts) +} + +// GetValidatorVerificationDetailReportableBlock is a free data retrieval call binding the contract method 0x615a0253. +// +// Solidity: function getValidatorVerificationDetailReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleCaller) GetValidatorVerificationDetailReportableBlock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "getValidatorVerificationDetailReportableBlock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetValidatorVerificationDetailReportableBlock is a free data retrieval call binding the contract method 0x615a0253. +// +// Solidity: function getValidatorVerificationDetailReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleSession) GetValidatorVerificationDetailReportableBlock() (*big.Int, error) { + return _StaderOracle.Contract.GetValidatorVerificationDetailReportableBlock(&_StaderOracle.CallOpts) +} + +// GetValidatorVerificationDetailReportableBlock is a free data retrieval call binding the contract method 0x615a0253. +// +// Solidity: function getValidatorVerificationDetailReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) GetValidatorVerificationDetailReportableBlock() (*big.Int, error) { + return _StaderOracle.Contract.GetValidatorVerificationDetailReportableBlock(&_StaderOracle.CallOpts) +} + +// GetWithdrawnValidatorReportableBlock is a free data retrieval call binding the contract method 0x5063b5bd. +// +// Solidity: function getWithdrawnValidatorReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleCaller) GetWithdrawnValidatorReportableBlock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "getWithdrawnValidatorReportableBlock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetWithdrawnValidatorReportableBlock is a free data retrieval call binding the contract method 0x5063b5bd. +// +// Solidity: function getWithdrawnValidatorReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleSession) GetWithdrawnValidatorReportableBlock() (*big.Int, error) { + return _StaderOracle.Contract.GetWithdrawnValidatorReportableBlock(&_StaderOracle.CallOpts) +} + +// GetWithdrawnValidatorReportableBlock is a free data retrieval call binding the contract method 0x5063b5bd. +// +// Solidity: function getWithdrawnValidatorReportableBlock() view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) GetWithdrawnValidatorReportableBlock() (*big.Int, error) { + return _StaderOracle.Contract.GetWithdrawnValidatorReportableBlock(&_StaderOracle.CallOpts) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_StaderOracle *StaderOracleCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "hasRole", role, account) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_StaderOracle *StaderOracleSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _StaderOracle.Contract.HasRole(&_StaderOracle.CallOpts, role, account) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_StaderOracle *StaderOracleCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _StaderOracle.Contract.HasRole(&_StaderOracle.CallOpts, role, account) +} + +// InspectionModeExchangeRate is a free data retrieval call binding the contract method 0xb940a003. +// +// Solidity: function inspectionModeExchangeRate() view returns(uint256 reportingBlockNumber, uint256 totalETHBalance, uint256 totalETHXSupply) +func (_StaderOracle *StaderOracleCaller) InspectionModeExchangeRate(opts *bind.CallOpts) (struct { + ReportingBlockNumber *big.Int + TotalETHBalance *big.Int + TotalETHXSupply *big.Int +}, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "inspectionModeExchangeRate") + + outstruct := new(struct { + ReportingBlockNumber *big.Int + TotalETHBalance *big.Int + TotalETHXSupply *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.ReportingBlockNumber = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.TotalETHBalance = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.TotalETHXSupply = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// InspectionModeExchangeRate is a free data retrieval call binding the contract method 0xb940a003. +// +// Solidity: function inspectionModeExchangeRate() view returns(uint256 reportingBlockNumber, uint256 totalETHBalance, uint256 totalETHXSupply) +func (_StaderOracle *StaderOracleSession) InspectionModeExchangeRate() (struct { + ReportingBlockNumber *big.Int + TotalETHBalance *big.Int + TotalETHXSupply *big.Int +}, error) { + return _StaderOracle.Contract.InspectionModeExchangeRate(&_StaderOracle.CallOpts) +} + +// InspectionModeExchangeRate is a free data retrieval call binding the contract method 0xb940a003. +// +// Solidity: function inspectionModeExchangeRate() view returns(uint256 reportingBlockNumber, uint256 totalETHBalance, uint256 totalETHXSupply) +func (_StaderOracle *StaderOracleCallerSession) InspectionModeExchangeRate() (struct { + ReportingBlockNumber *big.Int + TotalETHBalance *big.Int + TotalETHXSupply *big.Int +}, error) { + return _StaderOracle.Contract.InspectionModeExchangeRate(&_StaderOracle.CallOpts) +} + +// IsPORFeedBasedERData is a free data retrieval call binding the contract method 0x16515428. +// +// Solidity: function isPORFeedBasedERData() view returns(bool) +func (_StaderOracle *StaderOracleCaller) IsPORFeedBasedERData(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "isPORFeedBasedERData") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsPORFeedBasedERData is a free data retrieval call binding the contract method 0x16515428. +// +// Solidity: function isPORFeedBasedERData() view returns(bool) +func (_StaderOracle *StaderOracleSession) IsPORFeedBasedERData() (bool, error) { + return _StaderOracle.Contract.IsPORFeedBasedERData(&_StaderOracle.CallOpts) +} + +// IsPORFeedBasedERData is a free data retrieval call binding the contract method 0x16515428. +// +// Solidity: function isPORFeedBasedERData() view returns(bool) +func (_StaderOracle *StaderOracleCallerSession) IsPORFeedBasedERData() (bool, error) { + return _StaderOracle.Contract.IsPORFeedBasedERData(&_StaderOracle.CallOpts) +} + +// IsTrustedNode is a free data retrieval call binding the contract method 0x2f739b1d. +// +// Solidity: function isTrustedNode(address ) view returns(bool) +func (_StaderOracle *StaderOracleCaller) IsTrustedNode(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "isTrustedNode", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsTrustedNode is a free data retrieval call binding the contract method 0x2f739b1d. +// +// Solidity: function isTrustedNode(address ) view returns(bool) +func (_StaderOracle *StaderOracleSession) IsTrustedNode(arg0 common.Address) (bool, error) { + return _StaderOracle.Contract.IsTrustedNode(&_StaderOracle.CallOpts, arg0) +} + +// IsTrustedNode is a free data retrieval call binding the contract method 0x2f739b1d. +// +// Solidity: function isTrustedNode(address ) view returns(bool) +func (_StaderOracle *StaderOracleCallerSession) IsTrustedNode(arg0 common.Address) (bool, error) { + return _StaderOracle.Contract.IsTrustedNode(&_StaderOracle.CallOpts, arg0) +} + +// LastReportedMAPDIndex is a free data retrieval call binding the contract method 0xa3737869. +// +// Solidity: function lastReportedMAPDIndex() view returns(uint256) +func (_StaderOracle *StaderOracleCaller) LastReportedMAPDIndex(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "lastReportedMAPDIndex") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// LastReportedMAPDIndex is a free data retrieval call binding the contract method 0xa3737869. +// +// Solidity: function lastReportedMAPDIndex() view returns(uint256) +func (_StaderOracle *StaderOracleSession) LastReportedMAPDIndex() (*big.Int, error) { + return _StaderOracle.Contract.LastReportedMAPDIndex(&_StaderOracle.CallOpts) +} + +// LastReportedMAPDIndex is a free data retrieval call binding the contract method 0xa3737869. +// +// Solidity: function lastReportedMAPDIndex() view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) LastReportedMAPDIndex() (*big.Int, error) { + return _StaderOracle.Contract.LastReportedMAPDIndex(&_StaderOracle.CallOpts) +} + +// LastReportedSDPriceData is a free data retrieval call binding the contract method 0xa8c3a3a8. +// +// Solidity: function lastReportedSDPriceData() view returns(uint256 reportingBlockNumber, uint256 sdPriceInETH) +func (_StaderOracle *StaderOracleCaller) LastReportedSDPriceData(opts *bind.CallOpts) (struct { + ReportingBlockNumber *big.Int + SdPriceInETH *big.Int +}, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "lastReportedSDPriceData") + + outstruct := new(struct { + ReportingBlockNumber *big.Int + SdPriceInETH *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.ReportingBlockNumber = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.SdPriceInETH = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// LastReportedSDPriceData is a free data retrieval call binding the contract method 0xa8c3a3a8. +// +// Solidity: function lastReportedSDPriceData() view returns(uint256 reportingBlockNumber, uint256 sdPriceInETH) +func (_StaderOracle *StaderOracleSession) LastReportedSDPriceData() (struct { + ReportingBlockNumber *big.Int + SdPriceInETH *big.Int +}, error) { + return _StaderOracle.Contract.LastReportedSDPriceData(&_StaderOracle.CallOpts) +} + +// LastReportedSDPriceData is a free data retrieval call binding the contract method 0xa8c3a3a8. +// +// Solidity: function lastReportedSDPriceData() view returns(uint256 reportingBlockNumber, uint256 sdPriceInETH) +func (_StaderOracle *StaderOracleCallerSession) LastReportedSDPriceData() (struct { + ReportingBlockNumber *big.Int + SdPriceInETH *big.Int +}, error) { + return _StaderOracle.Contract.LastReportedSDPriceData(&_StaderOracle.CallOpts) +} + +// LastReportingBlockNumberForValidatorVerificationDetailByPoolId is a free data retrieval call binding the contract method 0xb17b4d86. +// +// Solidity: function lastReportingBlockNumberForValidatorVerificationDetailByPoolId(uint8 ) view returns(uint256) +func (_StaderOracle *StaderOracleCaller) LastReportingBlockNumberForValidatorVerificationDetailByPoolId(opts *bind.CallOpts, arg0 uint8) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "lastReportingBlockNumberForValidatorVerificationDetailByPoolId", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// LastReportingBlockNumberForValidatorVerificationDetailByPoolId is a free data retrieval call binding the contract method 0xb17b4d86. +// +// Solidity: function lastReportingBlockNumberForValidatorVerificationDetailByPoolId(uint8 ) view returns(uint256) +func (_StaderOracle *StaderOracleSession) LastReportingBlockNumberForValidatorVerificationDetailByPoolId(arg0 uint8) (*big.Int, error) { + return _StaderOracle.Contract.LastReportingBlockNumberForValidatorVerificationDetailByPoolId(&_StaderOracle.CallOpts, arg0) +} + +// LastReportingBlockNumberForValidatorVerificationDetailByPoolId is a free data retrieval call binding the contract method 0xb17b4d86. +// +// Solidity: function lastReportingBlockNumberForValidatorVerificationDetailByPoolId(uint8 ) view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) LastReportingBlockNumberForValidatorVerificationDetailByPoolId(arg0 uint8) (*big.Int, error) { + return _StaderOracle.Contract.LastReportingBlockNumberForValidatorVerificationDetailByPoolId(&_StaderOracle.CallOpts, arg0) +} + +// LastReportingBlockNumberForWithdrawnValidatorsByPoolId is a free data retrieval call binding the contract method 0xf00e0223. +// +// Solidity: function lastReportingBlockNumberForWithdrawnValidatorsByPoolId(uint8 ) view returns(uint256) +func (_StaderOracle *StaderOracleCaller) LastReportingBlockNumberForWithdrawnValidatorsByPoolId(opts *bind.CallOpts, arg0 uint8) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "lastReportingBlockNumberForWithdrawnValidatorsByPoolId", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// LastReportingBlockNumberForWithdrawnValidatorsByPoolId is a free data retrieval call binding the contract method 0xf00e0223. +// +// Solidity: function lastReportingBlockNumberForWithdrawnValidatorsByPoolId(uint8 ) view returns(uint256) +func (_StaderOracle *StaderOracleSession) LastReportingBlockNumberForWithdrawnValidatorsByPoolId(arg0 uint8) (*big.Int, error) { + return _StaderOracle.Contract.LastReportingBlockNumberForWithdrawnValidatorsByPoolId(&_StaderOracle.CallOpts, arg0) +} + +// LastReportingBlockNumberForWithdrawnValidatorsByPoolId is a free data retrieval call binding the contract method 0xf00e0223. +// +// Solidity: function lastReportingBlockNumberForWithdrawnValidatorsByPoolId(uint8 ) view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) LastReportingBlockNumberForWithdrawnValidatorsByPoolId(arg0 uint8) (*big.Int, error) { + return _StaderOracle.Contract.LastReportingBlockNumberForWithdrawnValidatorsByPoolId(&_StaderOracle.CallOpts, arg0) +} + +// LastTrustedNodeCountChangeBlock is a free data retrieval call binding the contract method 0x0989001c. +// +// Solidity: function lastTrustedNodeCountChangeBlock() view returns(uint256) +func (_StaderOracle *StaderOracleCaller) LastTrustedNodeCountChangeBlock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "lastTrustedNodeCountChangeBlock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// LastTrustedNodeCountChangeBlock is a free data retrieval call binding the contract method 0x0989001c. +// +// Solidity: function lastTrustedNodeCountChangeBlock() view returns(uint256) +func (_StaderOracle *StaderOracleSession) LastTrustedNodeCountChangeBlock() (*big.Int, error) { + return _StaderOracle.Contract.LastTrustedNodeCountChangeBlock(&_StaderOracle.CallOpts) +} + +// LastTrustedNodeCountChangeBlock is a free data retrieval call binding the contract method 0x0989001c. +// +// Solidity: function lastTrustedNodeCountChangeBlock() view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) LastTrustedNodeCountChangeBlock() (*big.Int, error) { + return _StaderOracle.Contract.LastTrustedNodeCountChangeBlock(&_StaderOracle.CallOpts) +} + +// MissedAttestationPenalty is a free data retrieval call binding the contract method 0x9773ee60. +// +// Solidity: function missedAttestationPenalty(bytes32 ) view returns(uint16) +func (_StaderOracle *StaderOracleCaller) MissedAttestationPenalty(opts *bind.CallOpts, arg0 [32]byte) (uint16, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "missedAttestationPenalty", arg0) + + if err != nil { + return *new(uint16), err + } + + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + + return out0, err + +} + +// MissedAttestationPenalty is a free data retrieval call binding the contract method 0x9773ee60. +// +// Solidity: function missedAttestationPenalty(bytes32 ) view returns(uint16) +func (_StaderOracle *StaderOracleSession) MissedAttestationPenalty(arg0 [32]byte) (uint16, error) { + return _StaderOracle.Contract.MissedAttestationPenalty(&_StaderOracle.CallOpts, arg0) +} + +// MissedAttestationPenalty is a free data retrieval call binding the contract method 0x9773ee60. +// +// Solidity: function missedAttestationPenalty(bytes32 ) view returns(uint16) +func (_StaderOracle *StaderOracleCallerSession) MissedAttestationPenalty(arg0 [32]byte) (uint16, error) { + return _StaderOracle.Contract.MissedAttestationPenalty(&_StaderOracle.CallOpts, arg0) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_StaderOracle *StaderOracleCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _StaderOracle.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 (_StaderOracle *StaderOracleSession) Paused() (bool, error) { + return _StaderOracle.Contract.Paused(&_StaderOracle.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_StaderOracle *StaderOracleCallerSession) Paused() (bool, error) { + return _StaderOracle.Contract.Paused(&_StaderOracle.CallOpts) +} + +// SafeMode is a free data retrieval call binding the contract method 0xabe3219c. +// +// Solidity: function safeMode() view returns(bool) +func (_StaderOracle *StaderOracleCaller) SafeMode(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "safeMode") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SafeMode is a free data retrieval call binding the contract method 0xabe3219c. +// +// Solidity: function safeMode() view returns(bool) +func (_StaderOracle *StaderOracleSession) SafeMode() (bool, error) { + return _StaderOracle.Contract.SafeMode(&_StaderOracle.CallOpts) +} + +// SafeMode is a free data retrieval call binding the contract method 0xabe3219c. +// +// Solidity: function safeMode() view returns(bool) +func (_StaderOracle *StaderOracleCallerSession) SafeMode() (bool, error) { + return _StaderOracle.Contract.SafeMode(&_StaderOracle.CallOpts) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_StaderOracle *StaderOracleCaller) StaderConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "staderConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_StaderOracle *StaderOracleSession) StaderConfig() (common.Address, error) { + return _StaderOracle.Contract.StaderConfig(&_StaderOracle.CallOpts) +} + +// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. +// +// Solidity: function staderConfig() view returns(address) +func (_StaderOracle *StaderOracleCallerSession) StaderConfig() (common.Address, error) { + return _StaderOracle.Contract.StaderConfig(&_StaderOracle.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_StaderOracle *StaderOracleCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _StaderOracle.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 (_StaderOracle *StaderOracleSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _StaderOracle.Contract.SupportsInterface(&_StaderOracle.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_StaderOracle *StaderOracleCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _StaderOracle.Contract.SupportsInterface(&_StaderOracle.CallOpts, interfaceId) +} + +// TrustedNodeChangeCoolingPeriod is a free data retrieval call binding the contract method 0x61f00c17. +// +// Solidity: function trustedNodeChangeCoolingPeriod() view returns(uint256) +func (_StaderOracle *StaderOracleCaller) TrustedNodeChangeCoolingPeriod(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "trustedNodeChangeCoolingPeriod") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TrustedNodeChangeCoolingPeriod is a free data retrieval call binding the contract method 0x61f00c17. +// +// Solidity: function trustedNodeChangeCoolingPeriod() view returns(uint256) +func (_StaderOracle *StaderOracleSession) TrustedNodeChangeCoolingPeriod() (*big.Int, error) { + return _StaderOracle.Contract.TrustedNodeChangeCoolingPeriod(&_StaderOracle.CallOpts) +} + +// TrustedNodeChangeCoolingPeriod is a free data retrieval call binding the contract method 0x61f00c17. +// +// Solidity: function trustedNodeChangeCoolingPeriod() view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) TrustedNodeChangeCoolingPeriod() (*big.Int, error) { + return _StaderOracle.Contract.TrustedNodeChangeCoolingPeriod(&_StaderOracle.CallOpts) +} + +// TrustedNodesCount is a free data retrieval call binding the contract method 0xae815a04. +// +// Solidity: function trustedNodesCount() view returns(uint256) +func (_StaderOracle *StaderOracleCaller) TrustedNodesCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "trustedNodesCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TrustedNodesCount is a free data retrieval call binding the contract method 0xae815a04. +// +// Solidity: function trustedNodesCount() view returns(uint256) +func (_StaderOracle *StaderOracleSession) TrustedNodesCount() (*big.Int, error) { + return _StaderOracle.Contract.TrustedNodesCount(&_StaderOracle.CallOpts) +} + +// TrustedNodesCount is a free data retrieval call binding the contract method 0xae815a04. +// +// Solidity: function trustedNodesCount() view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) TrustedNodesCount() (*big.Int, error) { + return _StaderOracle.Contract.TrustedNodesCount(&_StaderOracle.CallOpts) +} + +// UpdateFrequencyMap is a free data retrieval call binding the contract method 0x7150bc5b. +// +// Solidity: function updateFrequencyMap(bytes32 ) view returns(uint256) +func (_StaderOracle *StaderOracleCaller) UpdateFrequencyMap(opts *bind.CallOpts, arg0 [32]byte) (*big.Int, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "updateFrequencyMap", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// UpdateFrequencyMap is a free data retrieval call binding the contract method 0x7150bc5b. +// +// Solidity: function updateFrequencyMap(bytes32 ) view returns(uint256) +func (_StaderOracle *StaderOracleSession) UpdateFrequencyMap(arg0 [32]byte) (*big.Int, error) { + return _StaderOracle.Contract.UpdateFrequencyMap(&_StaderOracle.CallOpts, arg0) +} + +// UpdateFrequencyMap is a free data retrieval call binding the contract method 0x7150bc5b. +// +// Solidity: function updateFrequencyMap(bytes32 ) view returns(uint256) +func (_StaderOracle *StaderOracleCallerSession) UpdateFrequencyMap(arg0 [32]byte) (*big.Int, error) { + return _StaderOracle.Contract.UpdateFrequencyMap(&_StaderOracle.CallOpts, arg0) +} + +// ValidatorStats is a free data retrieval call binding the contract method 0x3b5eb03a. +// +// Solidity: function validatorStats() view returns(uint256 reportingBlockNumber, uint128 exitingValidatorsBalance, uint128 exitedValidatorsBalance, uint128 slashedValidatorsBalance, uint32 exitingValidatorsCount, uint32 exitedValidatorsCount, uint32 slashedValidatorsCount) +func (_StaderOracle *StaderOracleCaller) ValidatorStats(opts *bind.CallOpts) (struct { + ReportingBlockNumber *big.Int + ExitingValidatorsBalance *big.Int + ExitedValidatorsBalance *big.Int + SlashedValidatorsBalance *big.Int + ExitingValidatorsCount uint32 + ExitedValidatorsCount uint32 + SlashedValidatorsCount uint32 +}, error) { + var out []interface{} + err := _StaderOracle.contract.Call(opts, &out, "validatorStats") + + outstruct := new(struct { + ReportingBlockNumber *big.Int + ExitingValidatorsBalance *big.Int + ExitedValidatorsBalance *big.Int + SlashedValidatorsBalance *big.Int + ExitingValidatorsCount uint32 + ExitedValidatorsCount uint32 + SlashedValidatorsCount uint32 + }) + if err != nil { + return *outstruct, err + } + + outstruct.ReportingBlockNumber = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.ExitingValidatorsBalance = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.ExitedValidatorsBalance = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.SlashedValidatorsBalance = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.ExitingValidatorsCount = *abi.ConvertType(out[4], new(uint32)).(*uint32) + outstruct.ExitedValidatorsCount = *abi.ConvertType(out[5], new(uint32)).(*uint32) + outstruct.SlashedValidatorsCount = *abi.ConvertType(out[6], new(uint32)).(*uint32) + + return *outstruct, err + +} + +// ValidatorStats is a free data retrieval call binding the contract method 0x3b5eb03a. +// +// Solidity: function validatorStats() view returns(uint256 reportingBlockNumber, uint128 exitingValidatorsBalance, uint128 exitedValidatorsBalance, uint128 slashedValidatorsBalance, uint32 exitingValidatorsCount, uint32 exitedValidatorsCount, uint32 slashedValidatorsCount) +func (_StaderOracle *StaderOracleSession) ValidatorStats() (struct { + ReportingBlockNumber *big.Int + ExitingValidatorsBalance *big.Int + ExitedValidatorsBalance *big.Int + SlashedValidatorsBalance *big.Int + ExitingValidatorsCount uint32 + ExitedValidatorsCount uint32 + SlashedValidatorsCount uint32 +}, error) { + return _StaderOracle.Contract.ValidatorStats(&_StaderOracle.CallOpts) +} + +// ValidatorStats is a free data retrieval call binding the contract method 0x3b5eb03a. +// +// Solidity: function validatorStats() view returns(uint256 reportingBlockNumber, uint128 exitingValidatorsBalance, uint128 exitedValidatorsBalance, uint128 slashedValidatorsBalance, uint32 exitingValidatorsCount, uint32 exitedValidatorsCount, uint32 slashedValidatorsCount) +func (_StaderOracle *StaderOracleCallerSession) ValidatorStats() (struct { + ReportingBlockNumber *big.Int + ExitingValidatorsBalance *big.Int + ExitedValidatorsBalance *big.Int + SlashedValidatorsBalance *big.Int + ExitingValidatorsCount uint32 + ExitedValidatorsCount uint32 + SlashedValidatorsCount uint32 +}, error) { + return _StaderOracle.Contract.ValidatorStats(&_StaderOracle.CallOpts) +} + +// AddTrustedNode is a paid mutator transaction binding the contract method 0xd6275dd7. +// +// Solidity: function addTrustedNode(address _nodeAddress) returns() +func (_StaderOracle *StaderOracleTransactor) AddTrustedNode(opts *bind.TransactOpts, _nodeAddress common.Address) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "addTrustedNode", _nodeAddress) +} + +// AddTrustedNode is a paid mutator transaction binding the contract method 0xd6275dd7. +// +// Solidity: function addTrustedNode(address _nodeAddress) returns() +func (_StaderOracle *StaderOracleSession) AddTrustedNode(_nodeAddress common.Address) (*types.Transaction, error) { + return _StaderOracle.Contract.AddTrustedNode(&_StaderOracle.TransactOpts, _nodeAddress) +} + +// AddTrustedNode is a paid mutator transaction binding the contract method 0xd6275dd7. +// +// Solidity: function addTrustedNode(address _nodeAddress) returns() +func (_StaderOracle *StaderOracleTransactorSession) AddTrustedNode(_nodeAddress common.Address) (*types.Transaction, error) { + return _StaderOracle.Contract.AddTrustedNode(&_StaderOracle.TransactOpts, _nodeAddress) +} + +// CloseERInspectionMode is a paid mutator transaction binding the contract method 0x101b6e34. +// +// Solidity: function closeERInspectionMode() returns() +func (_StaderOracle *StaderOracleTransactor) CloseERInspectionMode(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "closeERInspectionMode") +} + +// CloseERInspectionMode is a paid mutator transaction binding the contract method 0x101b6e34. +// +// Solidity: function closeERInspectionMode() returns() +func (_StaderOracle *StaderOracleSession) CloseERInspectionMode() (*types.Transaction, error) { + return _StaderOracle.Contract.CloseERInspectionMode(&_StaderOracle.TransactOpts) +} + +// CloseERInspectionMode is a paid mutator transaction binding the contract method 0x101b6e34. +// +// Solidity: function closeERInspectionMode() returns() +func (_StaderOracle *StaderOracleTransactorSession) CloseERInspectionMode() (*types.Transaction, error) { + return _StaderOracle.Contract.CloseERInspectionMode(&_StaderOracle.TransactOpts) +} + +// DisableERInspectionMode is a paid mutator transaction binding the contract method 0xe10025e6. +// +// Solidity: function disableERInspectionMode() returns() +func (_StaderOracle *StaderOracleTransactor) DisableERInspectionMode(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "disableERInspectionMode") +} + +// DisableERInspectionMode is a paid mutator transaction binding the contract method 0xe10025e6. +// +// Solidity: function disableERInspectionMode() returns() +func (_StaderOracle *StaderOracleSession) DisableERInspectionMode() (*types.Transaction, error) { + return _StaderOracle.Contract.DisableERInspectionMode(&_StaderOracle.TransactOpts) +} + +// DisableERInspectionMode is a paid mutator transaction binding the contract method 0xe10025e6. +// +// Solidity: function disableERInspectionMode() returns() +func (_StaderOracle *StaderOracleTransactorSession) DisableERInspectionMode() (*types.Transaction, error) { + return _StaderOracle.Contract.DisableERInspectionMode(&_StaderOracle.TransactOpts) +} + +// DisableSafeMode is a paid mutator transaction binding the contract method 0xe514fe55. +// +// Solidity: function disableSafeMode() returns() +func (_StaderOracle *StaderOracleTransactor) DisableSafeMode(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "disableSafeMode") +} + +// DisableSafeMode is a paid mutator transaction binding the contract method 0xe514fe55. +// +// Solidity: function disableSafeMode() returns() +func (_StaderOracle *StaderOracleSession) DisableSafeMode() (*types.Transaction, error) { + return _StaderOracle.Contract.DisableSafeMode(&_StaderOracle.TransactOpts) +} + +// DisableSafeMode is a paid mutator transaction binding the contract method 0xe514fe55. +// +// Solidity: function disableSafeMode() returns() +func (_StaderOracle *StaderOracleTransactorSession) DisableSafeMode() (*types.Transaction, error) { + return _StaderOracle.Contract.DisableSafeMode(&_StaderOracle.TransactOpts) +} + +// EnableSafeMode is a paid mutator transaction binding the contract method 0x4f560abd. +// +// Solidity: function enableSafeMode() returns() +func (_StaderOracle *StaderOracleTransactor) EnableSafeMode(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "enableSafeMode") +} + +// EnableSafeMode is a paid mutator transaction binding the contract method 0x4f560abd. +// +// Solidity: function enableSafeMode() returns() +func (_StaderOracle *StaderOracleSession) EnableSafeMode() (*types.Transaction, error) { + return _StaderOracle.Contract.EnableSafeMode(&_StaderOracle.TransactOpts) +} + +// EnableSafeMode is a paid mutator transaction binding the contract method 0x4f560abd. +// +// Solidity: function enableSafeMode() returns() +func (_StaderOracle *StaderOracleTransactorSession) EnableSafeMode() (*types.Transaction, error) { + return _StaderOracle.Contract.EnableSafeMode(&_StaderOracle.TransactOpts) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_StaderOracle *StaderOracleTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "grantRole", role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_StaderOracle *StaderOracleSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderOracle.Contract.GrantRole(&_StaderOracle.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_StaderOracle *StaderOracleTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderOracle.Contract.GrantRole(&_StaderOracle.TransactOpts, role, account) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_StaderOracle *StaderOracleTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "pause") +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_StaderOracle *StaderOracleSession) Pause() (*types.Transaction, error) { + return _StaderOracle.Contract.Pause(&_StaderOracle.TransactOpts) +} + +// Pause is a paid mutator transaction binding the contract method 0x8456cb59. +// +// Solidity: function pause() returns() +func (_StaderOracle *StaderOracleTransactorSession) Pause() (*types.Transaction, error) { + return _StaderOracle.Contract.Pause(&_StaderOracle.TransactOpts) +} + +// RemoveTrustedNode is a paid mutator transaction binding the contract method 0x52e0fc80. +// +// Solidity: function removeTrustedNode(address _nodeAddress) returns() +func (_StaderOracle *StaderOracleTransactor) RemoveTrustedNode(opts *bind.TransactOpts, _nodeAddress common.Address) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "removeTrustedNode", _nodeAddress) +} + +// RemoveTrustedNode is a paid mutator transaction binding the contract method 0x52e0fc80. +// +// Solidity: function removeTrustedNode(address _nodeAddress) returns() +func (_StaderOracle *StaderOracleSession) RemoveTrustedNode(_nodeAddress common.Address) (*types.Transaction, error) { + return _StaderOracle.Contract.RemoveTrustedNode(&_StaderOracle.TransactOpts, _nodeAddress) +} + +// RemoveTrustedNode is a paid mutator transaction binding the contract method 0x52e0fc80. +// +// Solidity: function removeTrustedNode(address _nodeAddress) returns() +func (_StaderOracle *StaderOracleTransactorSession) RemoveTrustedNode(_nodeAddress common.Address) (*types.Transaction, error) { + return _StaderOracle.Contract.RemoveTrustedNode(&_StaderOracle.TransactOpts, _nodeAddress) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_StaderOracle *StaderOracleTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "renounceRole", role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_StaderOracle *StaderOracleSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderOracle.Contract.RenounceRole(&_StaderOracle.TransactOpts, role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_StaderOracle *StaderOracleTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderOracle.Contract.RenounceRole(&_StaderOracle.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_StaderOracle *StaderOracleTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "revokeRole", role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_StaderOracle *StaderOracleSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderOracle.Contract.RevokeRole(&_StaderOracle.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_StaderOracle *StaderOracleTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _StaderOracle.Contract.RevokeRole(&_StaderOracle.TransactOpts, role, account) +} + +// SetERUpdateFrequency is a paid mutator transaction binding the contract method 0xd0a8f679. +// +// Solidity: function setERUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleTransactor) SetERUpdateFrequency(opts *bind.TransactOpts, _updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "setERUpdateFrequency", _updateFrequency) +} + +// SetERUpdateFrequency is a paid mutator transaction binding the contract method 0xd0a8f679. +// +// Solidity: function setERUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleSession) SetERUpdateFrequency(_updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.Contract.SetERUpdateFrequency(&_StaderOracle.TransactOpts, _updateFrequency) +} + +// SetERUpdateFrequency is a paid mutator transaction binding the contract method 0xd0a8f679. +// +// Solidity: function setERUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleTransactorSession) SetERUpdateFrequency(_updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.Contract.SetERUpdateFrequency(&_StaderOracle.TransactOpts, _updateFrequency) +} + +// SetMissedAttestationPenaltyUpdateFrequency is a paid mutator transaction binding the contract method 0xf51c0fe7. +// +// Solidity: function setMissedAttestationPenaltyUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleTransactor) SetMissedAttestationPenaltyUpdateFrequency(opts *bind.TransactOpts, _updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "setMissedAttestationPenaltyUpdateFrequency", _updateFrequency) +} + +// SetMissedAttestationPenaltyUpdateFrequency is a paid mutator transaction binding the contract method 0xf51c0fe7. +// +// Solidity: function setMissedAttestationPenaltyUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleSession) SetMissedAttestationPenaltyUpdateFrequency(_updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.Contract.SetMissedAttestationPenaltyUpdateFrequency(&_StaderOracle.TransactOpts, _updateFrequency) +} + +// SetMissedAttestationPenaltyUpdateFrequency is a paid mutator transaction binding the contract method 0xf51c0fe7. +// +// Solidity: function setMissedAttestationPenaltyUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleTransactorSession) SetMissedAttestationPenaltyUpdateFrequency(_updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.Contract.SetMissedAttestationPenaltyUpdateFrequency(&_StaderOracle.TransactOpts, _updateFrequency) +} + +// SetSDPriceUpdateFrequency is a paid mutator transaction binding the contract method 0x749f7d8a. +// +// Solidity: function setSDPriceUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleTransactor) SetSDPriceUpdateFrequency(opts *bind.TransactOpts, _updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "setSDPriceUpdateFrequency", _updateFrequency) +} + +// SetSDPriceUpdateFrequency is a paid mutator transaction binding the contract method 0x749f7d8a. +// +// Solidity: function setSDPriceUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleSession) SetSDPriceUpdateFrequency(_updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.Contract.SetSDPriceUpdateFrequency(&_StaderOracle.TransactOpts, _updateFrequency) +} + +// SetSDPriceUpdateFrequency is a paid mutator transaction binding the contract method 0x749f7d8a. +// +// Solidity: function setSDPriceUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleTransactorSession) SetSDPriceUpdateFrequency(_updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.Contract.SetSDPriceUpdateFrequency(&_StaderOracle.TransactOpts, _updateFrequency) +} + +// SetValidatorStatsUpdateFrequency is a paid mutator transaction binding the contract method 0x844007fe. +// +// Solidity: function setValidatorStatsUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleTransactor) SetValidatorStatsUpdateFrequency(opts *bind.TransactOpts, _updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "setValidatorStatsUpdateFrequency", _updateFrequency) +} + +// SetValidatorStatsUpdateFrequency is a paid mutator transaction binding the contract method 0x844007fe. +// +// Solidity: function setValidatorStatsUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleSession) SetValidatorStatsUpdateFrequency(_updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.Contract.SetValidatorStatsUpdateFrequency(&_StaderOracle.TransactOpts, _updateFrequency) +} + +// SetValidatorStatsUpdateFrequency is a paid mutator transaction binding the contract method 0x844007fe. +// +// Solidity: function setValidatorStatsUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleTransactorSession) SetValidatorStatsUpdateFrequency(_updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.Contract.SetValidatorStatsUpdateFrequency(&_StaderOracle.TransactOpts, _updateFrequency) +} + +// SetValidatorVerificationDetailUpdateFrequency is a paid mutator transaction binding the contract method 0xea18568b. +// +// Solidity: function setValidatorVerificationDetailUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleTransactor) SetValidatorVerificationDetailUpdateFrequency(opts *bind.TransactOpts, _updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "setValidatorVerificationDetailUpdateFrequency", _updateFrequency) +} + +// SetValidatorVerificationDetailUpdateFrequency is a paid mutator transaction binding the contract method 0xea18568b. +// +// Solidity: function setValidatorVerificationDetailUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleSession) SetValidatorVerificationDetailUpdateFrequency(_updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.Contract.SetValidatorVerificationDetailUpdateFrequency(&_StaderOracle.TransactOpts, _updateFrequency) +} + +// SetValidatorVerificationDetailUpdateFrequency is a paid mutator transaction binding the contract method 0xea18568b. +// +// Solidity: function setValidatorVerificationDetailUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleTransactorSession) SetValidatorVerificationDetailUpdateFrequency(_updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.Contract.SetValidatorVerificationDetailUpdateFrequency(&_StaderOracle.TransactOpts, _updateFrequency) +} + +// SetWithdrawnValidatorsUpdateFrequency is a paid mutator transaction binding the contract method 0xc06a6201. +// +// Solidity: function setWithdrawnValidatorsUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleTransactor) SetWithdrawnValidatorsUpdateFrequency(opts *bind.TransactOpts, _updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "setWithdrawnValidatorsUpdateFrequency", _updateFrequency) +} + +// SetWithdrawnValidatorsUpdateFrequency is a paid mutator transaction binding the contract method 0xc06a6201. +// +// Solidity: function setWithdrawnValidatorsUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleSession) SetWithdrawnValidatorsUpdateFrequency(_updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.Contract.SetWithdrawnValidatorsUpdateFrequency(&_StaderOracle.TransactOpts, _updateFrequency) +} + +// SetWithdrawnValidatorsUpdateFrequency is a paid mutator transaction binding the contract method 0xc06a6201. +// +// Solidity: function setWithdrawnValidatorsUpdateFrequency(uint256 _updateFrequency) returns() +func (_StaderOracle *StaderOracleTransactorSession) SetWithdrawnValidatorsUpdateFrequency(_updateFrequency *big.Int) (*types.Transaction, error) { + return _StaderOracle.Contract.SetWithdrawnValidatorsUpdateFrequency(&_StaderOracle.TransactOpts, _updateFrequency) +} + +// SubmitExchangeRateData is a paid mutator transaction binding the contract method 0x818c8b26. +// +// Solidity: function submitExchangeRateData((uint256,uint256,uint256) _exchangeRate) returns() +func (_StaderOracle *StaderOracleTransactor) SubmitExchangeRateData(opts *bind.TransactOpts, _exchangeRate ExchangeRate) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "submitExchangeRateData", _exchangeRate) +} + +// SubmitExchangeRateData is a paid mutator transaction binding the contract method 0x818c8b26. +// +// Solidity: function submitExchangeRateData((uint256,uint256,uint256) _exchangeRate) returns() +func (_StaderOracle *StaderOracleSession) SubmitExchangeRateData(_exchangeRate ExchangeRate) (*types.Transaction, error) { + return _StaderOracle.Contract.SubmitExchangeRateData(&_StaderOracle.TransactOpts, _exchangeRate) +} + +// SubmitExchangeRateData is a paid mutator transaction binding the contract method 0x818c8b26. +// +// Solidity: function submitExchangeRateData((uint256,uint256,uint256) _exchangeRate) returns() +func (_StaderOracle *StaderOracleTransactorSession) SubmitExchangeRateData(_exchangeRate ExchangeRate) (*types.Transaction, error) { + return _StaderOracle.Contract.SubmitExchangeRateData(&_StaderOracle.TransactOpts, _exchangeRate) +} + +// SubmitMissedAttestationPenalties is a paid mutator transaction binding the contract method 0x67fbf731. +// +// Solidity: function submitMissedAttestationPenalties((uint256,uint256,bytes[]) _mapd) returns() +func (_StaderOracle *StaderOracleTransactor) SubmitMissedAttestationPenalties(opts *bind.TransactOpts, _mapd MissedAttestationPenaltyData) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "submitMissedAttestationPenalties", _mapd) +} + +// SubmitMissedAttestationPenalties is a paid mutator transaction binding the contract method 0x67fbf731. +// +// Solidity: function submitMissedAttestationPenalties((uint256,uint256,bytes[]) _mapd) returns() +func (_StaderOracle *StaderOracleSession) SubmitMissedAttestationPenalties(_mapd MissedAttestationPenaltyData) (*types.Transaction, error) { + return _StaderOracle.Contract.SubmitMissedAttestationPenalties(&_StaderOracle.TransactOpts, _mapd) +} + +// SubmitMissedAttestationPenalties is a paid mutator transaction binding the contract method 0x67fbf731. +// +// Solidity: function submitMissedAttestationPenalties((uint256,uint256,bytes[]) _mapd) returns() +func (_StaderOracle *StaderOracleTransactorSession) SubmitMissedAttestationPenalties(_mapd MissedAttestationPenaltyData) (*types.Transaction, error) { + return _StaderOracle.Contract.SubmitMissedAttestationPenalties(&_StaderOracle.TransactOpts, _mapd) +} + +// SubmitSDPrice is a paid mutator transaction binding the contract method 0xf6a3c090. +// +// Solidity: function submitSDPrice((uint256,uint256) _sdPriceData) returns() +func (_StaderOracle *StaderOracleTransactor) SubmitSDPrice(opts *bind.TransactOpts, _sdPriceData SDPriceData) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "submitSDPrice", _sdPriceData) +} + +// SubmitSDPrice is a paid mutator transaction binding the contract method 0xf6a3c090. +// +// Solidity: function submitSDPrice((uint256,uint256) _sdPriceData) returns() +func (_StaderOracle *StaderOracleSession) SubmitSDPrice(_sdPriceData SDPriceData) (*types.Transaction, error) { + return _StaderOracle.Contract.SubmitSDPrice(&_StaderOracle.TransactOpts, _sdPriceData) +} + +// SubmitSDPrice is a paid mutator transaction binding the contract method 0xf6a3c090. +// +// Solidity: function submitSDPrice((uint256,uint256) _sdPriceData) returns() +func (_StaderOracle *StaderOracleTransactorSession) SubmitSDPrice(_sdPriceData SDPriceData) (*types.Transaction, error) { + return _StaderOracle.Contract.SubmitSDPrice(&_StaderOracle.TransactOpts, _sdPriceData) +} + +// SubmitSocializingRewardsMerkleRoot is a paid mutator transaction binding the contract method 0xae541d65. +// +// Solidity: function submitSocializingRewardsMerkleRoot((uint256,uint256,bytes32,uint8,uint256,uint256,uint256,uint256) _rewardsData) returns() +func (_StaderOracle *StaderOracleTransactor) SubmitSocializingRewardsMerkleRoot(opts *bind.TransactOpts, _rewardsData RewardsData) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "submitSocializingRewardsMerkleRoot", _rewardsData) +} + +// SubmitSocializingRewardsMerkleRoot is a paid mutator transaction binding the contract method 0xae541d65. +// +// Solidity: function submitSocializingRewardsMerkleRoot((uint256,uint256,bytes32,uint8,uint256,uint256,uint256,uint256) _rewardsData) returns() +func (_StaderOracle *StaderOracleSession) SubmitSocializingRewardsMerkleRoot(_rewardsData RewardsData) (*types.Transaction, error) { + return _StaderOracle.Contract.SubmitSocializingRewardsMerkleRoot(&_StaderOracle.TransactOpts, _rewardsData) +} + +// SubmitSocializingRewardsMerkleRoot is a paid mutator transaction binding the contract method 0xae541d65. +// +// Solidity: function submitSocializingRewardsMerkleRoot((uint256,uint256,bytes32,uint8,uint256,uint256,uint256,uint256) _rewardsData) returns() +func (_StaderOracle *StaderOracleTransactorSession) SubmitSocializingRewardsMerkleRoot(_rewardsData RewardsData) (*types.Transaction, error) { + return _StaderOracle.Contract.SubmitSocializingRewardsMerkleRoot(&_StaderOracle.TransactOpts, _rewardsData) +} + +// SubmitValidatorStats is a paid mutator transaction binding the contract method 0x5c7ccd3b. +// +// Solidity: function submitValidatorStats((uint256,uint128,uint128,uint128,uint32,uint32,uint32) _validatorStats) returns() +func (_StaderOracle *StaderOracleTransactor) SubmitValidatorStats(opts *bind.TransactOpts, _validatorStats ValidatorStats) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "submitValidatorStats", _validatorStats) +} + +// SubmitValidatorStats is a paid mutator transaction binding the contract method 0x5c7ccd3b. +// +// Solidity: function submitValidatorStats((uint256,uint128,uint128,uint128,uint32,uint32,uint32) _validatorStats) returns() +func (_StaderOracle *StaderOracleSession) SubmitValidatorStats(_validatorStats ValidatorStats) (*types.Transaction, error) { + return _StaderOracle.Contract.SubmitValidatorStats(&_StaderOracle.TransactOpts, _validatorStats) +} + +// SubmitValidatorStats is a paid mutator transaction binding the contract method 0x5c7ccd3b. +// +// Solidity: function submitValidatorStats((uint256,uint128,uint128,uint128,uint32,uint32,uint32) _validatorStats) returns() +func (_StaderOracle *StaderOracleTransactorSession) SubmitValidatorStats(_validatorStats ValidatorStats) (*types.Transaction, error) { + return _StaderOracle.Contract.SubmitValidatorStats(&_StaderOracle.TransactOpts, _validatorStats) +} + +// SubmitValidatorVerificationDetail is a paid mutator transaction binding the contract method 0x735efb96. +// +// Solidity: function submitValidatorVerificationDetail((uint8,uint256,bytes[],bytes[],bytes[]) _validatorVerificationDetail) returns() +func (_StaderOracle *StaderOracleTransactor) SubmitValidatorVerificationDetail(opts *bind.TransactOpts, _validatorVerificationDetail ValidatorVerificationDetail) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "submitValidatorVerificationDetail", _validatorVerificationDetail) +} + +// SubmitValidatorVerificationDetail is a paid mutator transaction binding the contract method 0x735efb96. +// +// Solidity: function submitValidatorVerificationDetail((uint8,uint256,bytes[],bytes[],bytes[]) _validatorVerificationDetail) returns() +func (_StaderOracle *StaderOracleSession) SubmitValidatorVerificationDetail(_validatorVerificationDetail ValidatorVerificationDetail) (*types.Transaction, error) { + return _StaderOracle.Contract.SubmitValidatorVerificationDetail(&_StaderOracle.TransactOpts, _validatorVerificationDetail) +} + +// SubmitValidatorVerificationDetail is a paid mutator transaction binding the contract method 0x735efb96. +// +// Solidity: function submitValidatorVerificationDetail((uint8,uint256,bytes[],bytes[],bytes[]) _validatorVerificationDetail) returns() +func (_StaderOracle *StaderOracleTransactorSession) SubmitValidatorVerificationDetail(_validatorVerificationDetail ValidatorVerificationDetail) (*types.Transaction, error) { + return _StaderOracle.Contract.SubmitValidatorVerificationDetail(&_StaderOracle.TransactOpts, _validatorVerificationDetail) +} + +// SubmitWithdrawnValidators is a paid mutator transaction binding the contract method 0xa220c2d3. +// +// Solidity: function submitWithdrawnValidators((uint8,uint256,bytes[]) _withdrawnValidators) returns() +func (_StaderOracle *StaderOracleTransactor) SubmitWithdrawnValidators(opts *bind.TransactOpts, _withdrawnValidators WithdrawnValidators) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "submitWithdrawnValidators", _withdrawnValidators) +} + +// SubmitWithdrawnValidators is a paid mutator transaction binding the contract method 0xa220c2d3. +// +// Solidity: function submitWithdrawnValidators((uint8,uint256,bytes[]) _withdrawnValidators) returns() +func (_StaderOracle *StaderOracleSession) SubmitWithdrawnValidators(_withdrawnValidators WithdrawnValidators) (*types.Transaction, error) { + return _StaderOracle.Contract.SubmitWithdrawnValidators(&_StaderOracle.TransactOpts, _withdrawnValidators) +} + +// SubmitWithdrawnValidators is a paid mutator transaction binding the contract method 0xa220c2d3. +// +// Solidity: function submitWithdrawnValidators((uint8,uint256,bytes[]) _withdrawnValidators) returns() +func (_StaderOracle *StaderOracleTransactorSession) SubmitWithdrawnValidators(_withdrawnValidators WithdrawnValidators) (*types.Transaction, error) { + return _StaderOracle.Contract.SubmitWithdrawnValidators(&_StaderOracle.TransactOpts, _withdrawnValidators) +} + +// TogglePORFeedBasedERData is a paid mutator transaction binding the contract method 0x712033eb. +// +// Solidity: function togglePORFeedBasedERData() returns() +func (_StaderOracle *StaderOracleTransactor) TogglePORFeedBasedERData(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "togglePORFeedBasedERData") +} + +// TogglePORFeedBasedERData is a paid mutator transaction binding the contract method 0x712033eb. +// +// Solidity: function togglePORFeedBasedERData() returns() +func (_StaderOracle *StaderOracleSession) TogglePORFeedBasedERData() (*types.Transaction, error) { + return _StaderOracle.Contract.TogglePORFeedBasedERData(&_StaderOracle.TransactOpts) +} + +// TogglePORFeedBasedERData is a paid mutator transaction binding the contract method 0x712033eb. +// +// Solidity: function togglePORFeedBasedERData() returns() +func (_StaderOracle *StaderOracleTransactorSession) TogglePORFeedBasedERData() (*types.Transaction, error) { + return _StaderOracle.Contract.TogglePORFeedBasedERData(&_StaderOracle.TransactOpts) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_StaderOracle *StaderOracleTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "unpause") +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_StaderOracle *StaderOracleSession) Unpause() (*types.Transaction, error) { + return _StaderOracle.Contract.Unpause(&_StaderOracle.TransactOpts) +} + +// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. +// +// Solidity: function unpause() returns() +func (_StaderOracle *StaderOracleTransactorSession) Unpause() (*types.Transaction, error) { + return _StaderOracle.Contract.Unpause(&_StaderOracle.TransactOpts) +} + +// UpdateERChangeLimit is a paid mutator transaction binding the contract method 0x8ca8703c. +// +// Solidity: function updateERChangeLimit(uint256 _erChangeLimit) returns() +func (_StaderOracle *StaderOracleTransactor) UpdateERChangeLimit(opts *bind.TransactOpts, _erChangeLimit *big.Int) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "updateERChangeLimit", _erChangeLimit) +} + +// UpdateERChangeLimit is a paid mutator transaction binding the contract method 0x8ca8703c. +// +// Solidity: function updateERChangeLimit(uint256 _erChangeLimit) returns() +func (_StaderOracle *StaderOracleSession) UpdateERChangeLimit(_erChangeLimit *big.Int) (*types.Transaction, error) { + return _StaderOracle.Contract.UpdateERChangeLimit(&_StaderOracle.TransactOpts, _erChangeLimit) +} + +// UpdateERChangeLimit is a paid mutator transaction binding the contract method 0x8ca8703c. +// +// Solidity: function updateERChangeLimit(uint256 _erChangeLimit) returns() +func (_StaderOracle *StaderOracleTransactorSession) UpdateERChangeLimit(_erChangeLimit *big.Int) (*types.Transaction, error) { + return _StaderOracle.Contract.UpdateERChangeLimit(&_StaderOracle.TransactOpts, _erChangeLimit) +} + +// UpdateERFromPORFeed is a paid mutator transaction binding the contract method 0x9bfdf9a4. +// +// Solidity: function updateERFromPORFeed() returns() +func (_StaderOracle *StaderOracleTransactor) UpdateERFromPORFeed(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "updateERFromPORFeed") +} + +// UpdateERFromPORFeed is a paid mutator transaction binding the contract method 0x9bfdf9a4. +// +// Solidity: function updateERFromPORFeed() returns() +func (_StaderOracle *StaderOracleSession) UpdateERFromPORFeed() (*types.Transaction, error) { + return _StaderOracle.Contract.UpdateERFromPORFeed(&_StaderOracle.TransactOpts) +} + +// UpdateERFromPORFeed is a paid mutator transaction binding the contract method 0x9bfdf9a4. +// +// Solidity: function updateERFromPORFeed() returns() +func (_StaderOracle *StaderOracleTransactorSession) UpdateERFromPORFeed() (*types.Transaction, error) { + return _StaderOracle.Contract.UpdateERFromPORFeed(&_StaderOracle.TransactOpts) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_StaderOracle *StaderOracleTransactor) UpdateStaderConfig(opts *bind.TransactOpts, _staderConfig common.Address) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "updateStaderConfig", _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_StaderOracle *StaderOracleSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _StaderOracle.Contract.UpdateStaderConfig(&_StaderOracle.TransactOpts, _staderConfig) +} + +// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. +// +// Solidity: function updateStaderConfig(address _staderConfig) returns() +func (_StaderOracle *StaderOracleTransactorSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { + return _StaderOracle.Contract.UpdateStaderConfig(&_StaderOracle.TransactOpts, _staderConfig) +} + +// UpdateTrustedNodeChangeCoolingPeriod is a paid mutator transaction binding the contract method 0x962c1e05. +// +// Solidity: function updateTrustedNodeChangeCoolingPeriod(uint256 _trustedNodeChangeCoolingPeriod) returns() +func (_StaderOracle *StaderOracleTransactor) UpdateTrustedNodeChangeCoolingPeriod(opts *bind.TransactOpts, _trustedNodeChangeCoolingPeriod *big.Int) (*types.Transaction, error) { + return _StaderOracle.contract.Transact(opts, "updateTrustedNodeChangeCoolingPeriod", _trustedNodeChangeCoolingPeriod) +} + +// UpdateTrustedNodeChangeCoolingPeriod is a paid mutator transaction binding the contract method 0x962c1e05. +// +// Solidity: function updateTrustedNodeChangeCoolingPeriod(uint256 _trustedNodeChangeCoolingPeriod) returns() +func (_StaderOracle *StaderOracleSession) UpdateTrustedNodeChangeCoolingPeriod(_trustedNodeChangeCoolingPeriod *big.Int) (*types.Transaction, error) { + return _StaderOracle.Contract.UpdateTrustedNodeChangeCoolingPeriod(&_StaderOracle.TransactOpts, _trustedNodeChangeCoolingPeriod) +} + +// UpdateTrustedNodeChangeCoolingPeriod is a paid mutator transaction binding the contract method 0x962c1e05. +// +// Solidity: function updateTrustedNodeChangeCoolingPeriod(uint256 _trustedNodeChangeCoolingPeriod) returns() +func (_StaderOracle *StaderOracleTransactorSession) UpdateTrustedNodeChangeCoolingPeriod(_trustedNodeChangeCoolingPeriod *big.Int) (*types.Transaction, error) { + return _StaderOracle.Contract.UpdateTrustedNodeChangeCoolingPeriod(&_StaderOracle.TransactOpts, _trustedNodeChangeCoolingPeriod) +} + +// StaderOracleERDataSourceToggledIterator is returned from FilterERDataSourceToggled and is used to iterate over the raw logs and unpacked data for ERDataSourceToggled events raised by the StaderOracle contract. +type StaderOracleERDataSourceToggledIterator struct { + Event *StaderOracleERDataSourceToggled // 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 *StaderOracleERDataSourceToggledIterator) 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(StaderOracleERDataSourceToggled) + if err := 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(StaderOracleERDataSourceToggled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleERDataSourceToggledIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleERDataSourceToggledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleERDataSourceToggled represents a ERDataSourceToggled event raised by the StaderOracle contract. +type StaderOracleERDataSourceToggled struct { + IsPORBasedERData bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterERDataSourceToggled is a free log retrieval operation binding the contract event 0xc59a5de02f9d69be770ff0d61bbc894968433bb599f9fd9c2016e149c509c5e5. +// +// Solidity: event ERDataSourceToggled(bool isPORBasedERData) +func (_StaderOracle *StaderOracleFilterer) FilterERDataSourceToggled(opts *bind.FilterOpts) (*StaderOracleERDataSourceToggledIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "ERDataSourceToggled") + if err != nil { + return nil, err + } + return &StaderOracleERDataSourceToggledIterator{contract: _StaderOracle.contract, event: "ERDataSourceToggled", logs: logs, sub: sub}, nil +} + +// WatchERDataSourceToggled is a free log subscription operation binding the contract event 0xc59a5de02f9d69be770ff0d61bbc894968433bb599f9fd9c2016e149c509c5e5. +// +// Solidity: event ERDataSourceToggled(bool isPORBasedERData) +func (_StaderOracle *StaderOracleFilterer) WatchERDataSourceToggled(opts *bind.WatchOpts, sink chan<- *StaderOracleERDataSourceToggled) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "ERDataSourceToggled") + 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(StaderOracleERDataSourceToggled) + if err := _StaderOracle.contract.UnpackLog(event, "ERDataSourceToggled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseERDataSourceToggled is a log parse operation binding the contract event 0xc59a5de02f9d69be770ff0d61bbc894968433bb599f9fd9c2016e149c509c5e5. +// +// Solidity: event ERDataSourceToggled(bool isPORBasedERData) +func (_StaderOracle *StaderOracleFilterer) ParseERDataSourceToggled(log types.Log) (*StaderOracleERDataSourceToggled, error) { + event := new(StaderOracleERDataSourceToggled) + if err := _StaderOracle.contract.UnpackLog(event, "ERDataSourceToggled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleERInspectionModeActivatedIterator is returned from FilterERInspectionModeActivated and is used to iterate over the raw logs and unpacked data for ERInspectionModeActivated events raised by the StaderOracle contract. +type StaderOracleERInspectionModeActivatedIterator struct { + Event *StaderOracleERInspectionModeActivated // 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 *StaderOracleERInspectionModeActivatedIterator) 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(StaderOracleERInspectionModeActivated) + if err := 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(StaderOracleERInspectionModeActivated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleERInspectionModeActivatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleERInspectionModeActivatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleERInspectionModeActivated represents a ERInspectionModeActivated event raised by the StaderOracle contract. +type StaderOracleERInspectionModeActivated struct { + ErInspectionMode bool + Time *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterERInspectionModeActivated is a free log retrieval operation binding the contract event 0x9dea6ddefbcfcf9c4f6c1c086e462c2ab380c0be199d0289bf23b09f20814415. +// +// Solidity: event ERInspectionModeActivated(bool erInspectionMode, uint256 time) +func (_StaderOracle *StaderOracleFilterer) FilterERInspectionModeActivated(opts *bind.FilterOpts) (*StaderOracleERInspectionModeActivatedIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "ERInspectionModeActivated") + if err != nil { + return nil, err + } + return &StaderOracleERInspectionModeActivatedIterator{contract: _StaderOracle.contract, event: "ERInspectionModeActivated", logs: logs, sub: sub}, nil +} + +// WatchERInspectionModeActivated is a free log subscription operation binding the contract event 0x9dea6ddefbcfcf9c4f6c1c086e462c2ab380c0be199d0289bf23b09f20814415. +// +// Solidity: event ERInspectionModeActivated(bool erInspectionMode, uint256 time) +func (_StaderOracle *StaderOracleFilterer) WatchERInspectionModeActivated(opts *bind.WatchOpts, sink chan<- *StaderOracleERInspectionModeActivated) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "ERInspectionModeActivated") + 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(StaderOracleERInspectionModeActivated) + if err := _StaderOracle.contract.UnpackLog(event, "ERInspectionModeActivated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseERInspectionModeActivated is a log parse operation binding the contract event 0x9dea6ddefbcfcf9c4f6c1c086e462c2ab380c0be199d0289bf23b09f20814415. +// +// Solidity: event ERInspectionModeActivated(bool erInspectionMode, uint256 time) +func (_StaderOracle *StaderOracleFilterer) ParseERInspectionModeActivated(log types.Log) (*StaderOracleERInspectionModeActivated, error) { + event := new(StaderOracleERInspectionModeActivated) + if err := _StaderOracle.contract.UnpackLog(event, "ERInspectionModeActivated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleExchangeRateSubmittedIterator is returned from FilterExchangeRateSubmitted and is used to iterate over the raw logs and unpacked data for ExchangeRateSubmitted events raised by the StaderOracle contract. +type StaderOracleExchangeRateSubmittedIterator struct { + Event *StaderOracleExchangeRateSubmitted // 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 *StaderOracleExchangeRateSubmittedIterator) 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(StaderOracleExchangeRateSubmitted) + if err := 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(StaderOracleExchangeRateSubmitted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleExchangeRateSubmittedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleExchangeRateSubmittedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleExchangeRateSubmitted represents a ExchangeRateSubmitted event raised by the StaderOracle contract. +type StaderOracleExchangeRateSubmitted struct { + From common.Address + Block *big.Int + TotalEth *big.Int + EthxSupply *big.Int + Time *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExchangeRateSubmitted is a free log retrieval operation binding the contract event 0x73327a5c0fdb3104b4a0f993bc20ce59885ac5bfe5f23e4bfdd19c21fb79cb12. +// +// Solidity: event ExchangeRateSubmitted(address indexed from, uint256 block, uint256 totalEth, uint256 ethxSupply, uint256 time) +func (_StaderOracle *StaderOracleFilterer) FilterExchangeRateSubmitted(opts *bind.FilterOpts, from []common.Address) (*StaderOracleExchangeRateSubmittedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "ExchangeRateSubmitted", fromRule) + if err != nil { + return nil, err + } + return &StaderOracleExchangeRateSubmittedIterator{contract: _StaderOracle.contract, event: "ExchangeRateSubmitted", logs: logs, sub: sub}, nil +} + +// WatchExchangeRateSubmitted is a free log subscription operation binding the contract event 0x73327a5c0fdb3104b4a0f993bc20ce59885ac5bfe5f23e4bfdd19c21fb79cb12. +// +// Solidity: event ExchangeRateSubmitted(address indexed from, uint256 block, uint256 totalEth, uint256 ethxSupply, uint256 time) +func (_StaderOracle *StaderOracleFilterer) WatchExchangeRateSubmitted(opts *bind.WatchOpts, sink chan<- *StaderOracleExchangeRateSubmitted, from []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "ExchangeRateSubmitted", 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(StaderOracleExchangeRateSubmitted) + if err := _StaderOracle.contract.UnpackLog(event, "ExchangeRateSubmitted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseExchangeRateSubmitted is a log parse operation binding the contract event 0x73327a5c0fdb3104b4a0f993bc20ce59885ac5bfe5f23e4bfdd19c21fb79cb12. +// +// Solidity: event ExchangeRateSubmitted(address indexed from, uint256 block, uint256 totalEth, uint256 ethxSupply, uint256 time) +func (_StaderOracle *StaderOracleFilterer) ParseExchangeRateSubmitted(log types.Log) (*StaderOracleExchangeRateSubmitted, error) { + event := new(StaderOracleExchangeRateSubmitted) + if err := _StaderOracle.contract.UnpackLog(event, "ExchangeRateSubmitted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleExchangeRateUpdatedIterator is returned from FilterExchangeRateUpdated and is used to iterate over the raw logs and unpacked data for ExchangeRateUpdated events raised by the StaderOracle contract. +type StaderOracleExchangeRateUpdatedIterator struct { + Event *StaderOracleExchangeRateUpdated // 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 *StaderOracleExchangeRateUpdatedIterator) 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(StaderOracleExchangeRateUpdated) + if err := 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(StaderOracleExchangeRateUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleExchangeRateUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleExchangeRateUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleExchangeRateUpdated represents a ExchangeRateUpdated event raised by the StaderOracle contract. +type StaderOracleExchangeRateUpdated struct { + Block *big.Int + TotalEth *big.Int + EthxSupply *big.Int + Time *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExchangeRateUpdated is a free log retrieval operation binding the contract event 0xf525f19964f35afcb9a475680bb27abecbc5e62b4d6d4f66a81a5bd7e8a107e3. +// +// Solidity: event ExchangeRateUpdated(uint256 block, uint256 totalEth, uint256 ethxSupply, uint256 time) +func (_StaderOracle *StaderOracleFilterer) FilterExchangeRateUpdated(opts *bind.FilterOpts) (*StaderOracleExchangeRateUpdatedIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "ExchangeRateUpdated") + if err != nil { + return nil, err + } + return &StaderOracleExchangeRateUpdatedIterator{contract: _StaderOracle.contract, event: "ExchangeRateUpdated", logs: logs, sub: sub}, nil +} + +// WatchExchangeRateUpdated is a free log subscription operation binding the contract event 0xf525f19964f35afcb9a475680bb27abecbc5e62b4d6d4f66a81a5bd7e8a107e3. +// +// Solidity: event ExchangeRateUpdated(uint256 block, uint256 totalEth, uint256 ethxSupply, uint256 time) +func (_StaderOracle *StaderOracleFilterer) WatchExchangeRateUpdated(opts *bind.WatchOpts, sink chan<- *StaderOracleExchangeRateUpdated) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "ExchangeRateUpdated") + 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(StaderOracleExchangeRateUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "ExchangeRateUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseExchangeRateUpdated is a log parse operation binding the contract event 0xf525f19964f35afcb9a475680bb27abecbc5e62b4d6d4f66a81a5bd7e8a107e3. +// +// Solidity: event ExchangeRateUpdated(uint256 block, uint256 totalEth, uint256 ethxSupply, uint256 time) +func (_StaderOracle *StaderOracleFilterer) ParseExchangeRateUpdated(log types.Log) (*StaderOracleExchangeRateUpdated, error) { + event := new(StaderOracleExchangeRateUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "ExchangeRateUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the StaderOracle contract. +type StaderOracleInitializedIterator struct { + Event *StaderOracleInitialized // 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 *StaderOracleInitializedIterator) 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(StaderOracleInitialized) + if err := 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(StaderOracleInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleInitialized represents a Initialized event raised by the StaderOracle contract. +type StaderOracleInitialized 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 (_StaderOracle *StaderOracleFilterer) FilterInitialized(opts *bind.FilterOpts) (*StaderOracleInitializedIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &StaderOracleInitializedIterator{contract: _StaderOracle.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 (_StaderOracle *StaderOracleFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *StaderOracleInitialized) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.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(StaderOracleInitialized) + if err := _StaderOracle.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 (_StaderOracle *StaderOracleFilterer) ParseInitialized(log types.Log) (*StaderOracleInitialized, error) { + event := new(StaderOracleInitialized) + if err := _StaderOracle.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleMissedAttestationPenaltySubmittedIterator is returned from FilterMissedAttestationPenaltySubmitted and is used to iterate over the raw logs and unpacked data for MissedAttestationPenaltySubmitted events raised by the StaderOracle contract. +type StaderOracleMissedAttestationPenaltySubmittedIterator struct { + Event *StaderOracleMissedAttestationPenaltySubmitted // 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 *StaderOracleMissedAttestationPenaltySubmittedIterator) 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(StaderOracleMissedAttestationPenaltySubmitted) + if err := 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(StaderOracleMissedAttestationPenaltySubmitted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleMissedAttestationPenaltySubmittedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleMissedAttestationPenaltySubmittedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleMissedAttestationPenaltySubmitted represents a MissedAttestationPenaltySubmitted event raised by the StaderOracle contract. +type StaderOracleMissedAttestationPenaltySubmitted struct { + Node common.Address + Index *big.Int + Block *big.Int + ReportingBlockNumber *big.Int + Pubkeys [][]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMissedAttestationPenaltySubmitted is a free log retrieval operation binding the contract event 0x51308cad1da8fe95d4be43112c17d5651d3e3713a675ec61c2214fa16d9f6beb. +// +// Solidity: event MissedAttestationPenaltySubmitted(address indexed node, uint256 index, uint256 block, uint256 reportingBlockNumber, bytes[] pubkeys) +func (_StaderOracle *StaderOracleFilterer) FilterMissedAttestationPenaltySubmitted(opts *bind.FilterOpts, node []common.Address) (*StaderOracleMissedAttestationPenaltySubmittedIterator, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "MissedAttestationPenaltySubmitted", nodeRule) + if err != nil { + return nil, err + } + return &StaderOracleMissedAttestationPenaltySubmittedIterator{contract: _StaderOracle.contract, event: "MissedAttestationPenaltySubmitted", logs: logs, sub: sub}, nil +} + +// WatchMissedAttestationPenaltySubmitted is a free log subscription operation binding the contract event 0x51308cad1da8fe95d4be43112c17d5651d3e3713a675ec61c2214fa16d9f6beb. +// +// Solidity: event MissedAttestationPenaltySubmitted(address indexed node, uint256 index, uint256 block, uint256 reportingBlockNumber, bytes[] pubkeys) +func (_StaderOracle *StaderOracleFilterer) WatchMissedAttestationPenaltySubmitted(opts *bind.WatchOpts, sink chan<- *StaderOracleMissedAttestationPenaltySubmitted, node []common.Address) (event.Subscription, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "MissedAttestationPenaltySubmitted", nodeRule) + 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(StaderOracleMissedAttestationPenaltySubmitted) + if err := _StaderOracle.contract.UnpackLog(event, "MissedAttestationPenaltySubmitted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseMissedAttestationPenaltySubmitted is a log parse operation binding the contract event 0x51308cad1da8fe95d4be43112c17d5651d3e3713a675ec61c2214fa16d9f6beb. +// +// Solidity: event MissedAttestationPenaltySubmitted(address indexed node, uint256 index, uint256 block, uint256 reportingBlockNumber, bytes[] pubkeys) +func (_StaderOracle *StaderOracleFilterer) ParseMissedAttestationPenaltySubmitted(log types.Log) (*StaderOracleMissedAttestationPenaltySubmitted, error) { + event := new(StaderOracleMissedAttestationPenaltySubmitted) + if err := _StaderOracle.contract.UnpackLog(event, "MissedAttestationPenaltySubmitted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleMissedAttestationPenaltyUpdatedIterator is returned from FilterMissedAttestationPenaltyUpdated and is used to iterate over the raw logs and unpacked data for MissedAttestationPenaltyUpdated events raised by the StaderOracle contract. +type StaderOracleMissedAttestationPenaltyUpdatedIterator struct { + Event *StaderOracleMissedAttestationPenaltyUpdated // 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 *StaderOracleMissedAttestationPenaltyUpdatedIterator) 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(StaderOracleMissedAttestationPenaltyUpdated) + if err := 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(StaderOracleMissedAttestationPenaltyUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleMissedAttestationPenaltyUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleMissedAttestationPenaltyUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleMissedAttestationPenaltyUpdated represents a MissedAttestationPenaltyUpdated event raised by the StaderOracle contract. +type StaderOracleMissedAttestationPenaltyUpdated struct { + Index *big.Int + Block *big.Int + Pubkeys [][]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMissedAttestationPenaltyUpdated is a free log retrieval operation binding the contract event 0x5454855cf2eeb89296b9e10ba0881425fa305f06ce9ccb1b0ce47bc2f107a191. +// +// Solidity: event MissedAttestationPenaltyUpdated(uint256 index, uint256 block, bytes[] pubkeys) +func (_StaderOracle *StaderOracleFilterer) FilterMissedAttestationPenaltyUpdated(opts *bind.FilterOpts) (*StaderOracleMissedAttestationPenaltyUpdatedIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "MissedAttestationPenaltyUpdated") + if err != nil { + return nil, err + } + return &StaderOracleMissedAttestationPenaltyUpdatedIterator{contract: _StaderOracle.contract, event: "MissedAttestationPenaltyUpdated", logs: logs, sub: sub}, nil +} + +// WatchMissedAttestationPenaltyUpdated is a free log subscription operation binding the contract event 0x5454855cf2eeb89296b9e10ba0881425fa305f06ce9ccb1b0ce47bc2f107a191. +// +// Solidity: event MissedAttestationPenaltyUpdated(uint256 index, uint256 block, bytes[] pubkeys) +func (_StaderOracle *StaderOracleFilterer) WatchMissedAttestationPenaltyUpdated(opts *bind.WatchOpts, sink chan<- *StaderOracleMissedAttestationPenaltyUpdated) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "MissedAttestationPenaltyUpdated") + 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(StaderOracleMissedAttestationPenaltyUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "MissedAttestationPenaltyUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseMissedAttestationPenaltyUpdated is a log parse operation binding the contract event 0x5454855cf2eeb89296b9e10ba0881425fa305f06ce9ccb1b0ce47bc2f107a191. +// +// Solidity: event MissedAttestationPenaltyUpdated(uint256 index, uint256 block, bytes[] pubkeys) +func (_StaderOracle *StaderOracleFilterer) ParseMissedAttestationPenaltyUpdated(log types.Log) (*StaderOracleMissedAttestationPenaltyUpdated, error) { + event := new(StaderOracleMissedAttestationPenaltyUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "MissedAttestationPenaltyUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOraclePausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the StaderOracle contract. +type StaderOraclePausedIterator struct { + Event *StaderOraclePaused // 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 *StaderOraclePausedIterator) 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(StaderOraclePaused) + if err := 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(StaderOraclePaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOraclePausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOraclePausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOraclePaused represents a Paused event raised by the StaderOracle contract. +type StaderOraclePaused 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 (_StaderOracle *StaderOracleFilterer) FilterPaused(opts *bind.FilterOpts) (*StaderOraclePausedIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "Paused") + if err != nil { + return nil, err + } + return &StaderOraclePausedIterator{contract: _StaderOracle.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 (_StaderOracle *StaderOracleFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *StaderOraclePaused) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.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(StaderOraclePaused) + if err := _StaderOracle.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 (_StaderOracle *StaderOracleFilterer) ParsePaused(log types.Log) (*StaderOraclePaused, error) { + event := new(StaderOraclePaused) + if err := _StaderOracle.contract.UnpackLog(event, "Paused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the StaderOracle contract. +type StaderOracleRoleAdminChangedIterator struct { + Event *StaderOracleRoleAdminChanged // 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 *StaderOracleRoleAdminChangedIterator) 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(StaderOracleRoleAdminChanged) + if err := 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(StaderOracleRoleAdminChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleRoleAdminChanged represents a RoleAdminChanged event raised by the StaderOracle contract. +type StaderOracleRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_StaderOracle *StaderOracleFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*StaderOracleRoleAdminChangedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &StaderOracleRoleAdminChangedIterator{contract: _StaderOracle.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_StaderOracle *StaderOracleFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *StaderOracleRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var previousAdminRoleRule []interface{} + for _, previousAdminRoleItem := range previousAdminRole { + previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) + } + var newAdminRoleRule []interface{} + for _, newAdminRoleItem := range newAdminRole { + newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) + } + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(StaderOracleRoleAdminChanged) + if err := _StaderOracle.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_StaderOracle *StaderOracleFilterer) ParseRoleAdminChanged(log types.Log) (*StaderOracleRoleAdminChanged, error) { + event := new(StaderOracleRoleAdminChanged) + if err := _StaderOracle.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the StaderOracle contract. +type StaderOracleRoleGrantedIterator struct { + Event *StaderOracleRoleGranted // 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 *StaderOracleRoleGrantedIterator) 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(StaderOracleRoleGranted) + if err := 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(StaderOracleRoleGranted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleRoleGranted represents a RoleGranted event raised by the StaderOracle contract. +type StaderOracleRoleGranted struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderOracle *StaderOracleFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*StaderOracleRoleGrantedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &StaderOracleRoleGrantedIterator{contract: _StaderOracle.contract, event: "RoleGranted", logs: logs, sub: sub}, nil +} + +// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderOracle *StaderOracleFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *StaderOracleRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, 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(StaderOracleRoleGranted) + if err := _StaderOracle.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. +// +// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderOracle *StaderOracleFilterer) ParseRoleGranted(log types.Log) (*StaderOracleRoleGranted, error) { + event := new(StaderOracleRoleGranted) + if err := _StaderOracle.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the StaderOracle contract. +type StaderOracleRoleRevokedIterator struct { + Event *StaderOracleRoleRevoked // 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 *StaderOracleRoleRevokedIterator) 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(StaderOracleRoleRevoked) + if err := 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(StaderOracleRoleRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleRoleRevoked represents a RoleRevoked event raised by the StaderOracle contract. +type StaderOracleRoleRevoked struct { + Role [32]byte + Account common.Address + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderOracle *StaderOracleFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*StaderOracleRoleRevokedIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &StaderOracleRoleRevokedIterator{contract: _StaderOracle.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil +} + +// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderOracle *StaderOracleFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *StaderOracleRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, 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(StaderOracleRoleRevoked) + if err := _StaderOracle.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. +// +// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) +func (_StaderOracle *StaderOracleFilterer) ParseRoleRevoked(log types.Log) (*StaderOracleRoleRevoked, error) { + event := new(StaderOracleRoleRevoked) + if err := _StaderOracle.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleSDPriceSubmittedIterator is returned from FilterSDPriceSubmitted and is used to iterate over the raw logs and unpacked data for SDPriceSubmitted events raised by the StaderOracle contract. +type StaderOracleSDPriceSubmittedIterator struct { + Event *StaderOracleSDPriceSubmitted // 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 *StaderOracleSDPriceSubmittedIterator) 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(StaderOracleSDPriceSubmitted) + if err := 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(StaderOracleSDPriceSubmitted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleSDPriceSubmittedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleSDPriceSubmittedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleSDPriceSubmitted represents a SDPriceSubmitted event raised by the StaderOracle contract. +type StaderOracleSDPriceSubmitted struct { + Node common.Address + SdPriceInETH *big.Int + ReportedBlock *big.Int + Block *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSDPriceSubmitted is a free log retrieval operation binding the contract event 0x6c291a7ce9906b2982643002c104cb0ba9f2b9fecc8b38e9cc3cf5cfca65b4e8. +// +// Solidity: event SDPriceSubmitted(address indexed node, uint256 sdPriceInETH, uint256 reportedBlock, uint256 block) +func (_StaderOracle *StaderOracleFilterer) FilterSDPriceSubmitted(opts *bind.FilterOpts, node []common.Address) (*StaderOracleSDPriceSubmittedIterator, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "SDPriceSubmitted", nodeRule) + if err != nil { + return nil, err + } + return &StaderOracleSDPriceSubmittedIterator{contract: _StaderOracle.contract, event: "SDPriceSubmitted", logs: logs, sub: sub}, nil +} + +// WatchSDPriceSubmitted is a free log subscription operation binding the contract event 0x6c291a7ce9906b2982643002c104cb0ba9f2b9fecc8b38e9cc3cf5cfca65b4e8. +// +// Solidity: event SDPriceSubmitted(address indexed node, uint256 sdPriceInETH, uint256 reportedBlock, uint256 block) +func (_StaderOracle *StaderOracleFilterer) WatchSDPriceSubmitted(opts *bind.WatchOpts, sink chan<- *StaderOracleSDPriceSubmitted, node []common.Address) (event.Subscription, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "SDPriceSubmitted", nodeRule) + 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(StaderOracleSDPriceSubmitted) + if err := _StaderOracle.contract.UnpackLog(event, "SDPriceSubmitted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSDPriceSubmitted is a log parse operation binding the contract event 0x6c291a7ce9906b2982643002c104cb0ba9f2b9fecc8b38e9cc3cf5cfca65b4e8. +// +// Solidity: event SDPriceSubmitted(address indexed node, uint256 sdPriceInETH, uint256 reportedBlock, uint256 block) +func (_StaderOracle *StaderOracleFilterer) ParseSDPriceSubmitted(log types.Log) (*StaderOracleSDPriceSubmitted, error) { + event := new(StaderOracleSDPriceSubmitted) + if err := _StaderOracle.contract.UnpackLog(event, "SDPriceSubmitted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleSDPriceUpdatedIterator is returned from FilterSDPriceUpdated and is used to iterate over the raw logs and unpacked data for SDPriceUpdated events raised by the StaderOracle contract. +type StaderOracleSDPriceUpdatedIterator struct { + Event *StaderOracleSDPriceUpdated // 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 *StaderOracleSDPriceUpdatedIterator) 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(StaderOracleSDPriceUpdated) + if err := 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(StaderOracleSDPriceUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleSDPriceUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleSDPriceUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleSDPriceUpdated represents a SDPriceUpdated event raised by the StaderOracle contract. +type StaderOracleSDPriceUpdated struct { + SdPriceInETH *big.Int + ReportedBlock *big.Int + Block *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSDPriceUpdated is a free log retrieval operation binding the contract event 0xbc1a0795e699bbeaa982f6049ae9689f4d0e3e22d554adb7c46626be62f3b8bc. +// +// Solidity: event SDPriceUpdated(uint256 sdPriceInETH, uint256 reportedBlock, uint256 block) +func (_StaderOracle *StaderOracleFilterer) FilterSDPriceUpdated(opts *bind.FilterOpts) (*StaderOracleSDPriceUpdatedIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "SDPriceUpdated") + if err != nil { + return nil, err + } + return &StaderOracleSDPriceUpdatedIterator{contract: _StaderOracle.contract, event: "SDPriceUpdated", logs: logs, sub: sub}, nil +} + +// WatchSDPriceUpdated is a free log subscription operation binding the contract event 0xbc1a0795e699bbeaa982f6049ae9689f4d0e3e22d554adb7c46626be62f3b8bc. +// +// Solidity: event SDPriceUpdated(uint256 sdPriceInETH, uint256 reportedBlock, uint256 block) +func (_StaderOracle *StaderOracleFilterer) WatchSDPriceUpdated(opts *bind.WatchOpts, sink chan<- *StaderOracleSDPriceUpdated) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "SDPriceUpdated") + 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(StaderOracleSDPriceUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "SDPriceUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSDPriceUpdated is a log parse operation binding the contract event 0xbc1a0795e699bbeaa982f6049ae9689f4d0e3e22d554adb7c46626be62f3b8bc. +// +// Solidity: event SDPriceUpdated(uint256 sdPriceInETH, uint256 reportedBlock, uint256 block) +func (_StaderOracle *StaderOracleFilterer) ParseSDPriceUpdated(log types.Log) (*StaderOracleSDPriceUpdated, error) { + event := new(StaderOracleSDPriceUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "SDPriceUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleSafeModeDisabledIterator is returned from FilterSafeModeDisabled and is used to iterate over the raw logs and unpacked data for SafeModeDisabled events raised by the StaderOracle contract. +type StaderOracleSafeModeDisabledIterator struct { + Event *StaderOracleSafeModeDisabled // 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 *StaderOracleSafeModeDisabledIterator) 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(StaderOracleSafeModeDisabled) + if err := 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(StaderOracleSafeModeDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleSafeModeDisabledIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleSafeModeDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleSafeModeDisabled represents a SafeModeDisabled event raised by the StaderOracle contract. +type StaderOracleSafeModeDisabled struct { + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSafeModeDisabled is a free log retrieval operation binding the contract event 0xf29e751b3c28b619a215d25fee98a7828471a8e554626186d3f8d122f1650292. +// +// Solidity: event SafeModeDisabled() +func (_StaderOracle *StaderOracleFilterer) FilterSafeModeDisabled(opts *bind.FilterOpts) (*StaderOracleSafeModeDisabledIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "SafeModeDisabled") + if err != nil { + return nil, err + } + return &StaderOracleSafeModeDisabledIterator{contract: _StaderOracle.contract, event: "SafeModeDisabled", logs: logs, sub: sub}, nil +} + +// WatchSafeModeDisabled is a free log subscription operation binding the contract event 0xf29e751b3c28b619a215d25fee98a7828471a8e554626186d3f8d122f1650292. +// +// Solidity: event SafeModeDisabled() +func (_StaderOracle *StaderOracleFilterer) WatchSafeModeDisabled(opts *bind.WatchOpts, sink chan<- *StaderOracleSafeModeDisabled) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "SafeModeDisabled") + 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(StaderOracleSafeModeDisabled) + if err := _StaderOracle.contract.UnpackLog(event, "SafeModeDisabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSafeModeDisabled is a log parse operation binding the contract event 0xf29e751b3c28b619a215d25fee98a7828471a8e554626186d3f8d122f1650292. +// +// Solidity: event SafeModeDisabled() +func (_StaderOracle *StaderOracleFilterer) ParseSafeModeDisabled(log types.Log) (*StaderOracleSafeModeDisabled, error) { + event := new(StaderOracleSafeModeDisabled) + if err := _StaderOracle.contract.UnpackLog(event, "SafeModeDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleSafeModeEnabledIterator is returned from FilterSafeModeEnabled and is used to iterate over the raw logs and unpacked data for SafeModeEnabled events raised by the StaderOracle contract. +type StaderOracleSafeModeEnabledIterator struct { + Event *StaderOracleSafeModeEnabled // 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 *StaderOracleSafeModeEnabledIterator) 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(StaderOracleSafeModeEnabled) + if err := 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(StaderOracleSafeModeEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleSafeModeEnabledIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleSafeModeEnabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleSafeModeEnabled represents a SafeModeEnabled event raised by the StaderOracle contract. +type StaderOracleSafeModeEnabled struct { + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSafeModeEnabled is a free log retrieval operation binding the contract event 0x3328bda355014adfb66d5d9086ab2c3204d1af7f83a69a3276daeed721f6ce3c. +// +// Solidity: event SafeModeEnabled() +func (_StaderOracle *StaderOracleFilterer) FilterSafeModeEnabled(opts *bind.FilterOpts) (*StaderOracleSafeModeEnabledIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "SafeModeEnabled") + if err != nil { + return nil, err + } + return &StaderOracleSafeModeEnabledIterator{contract: _StaderOracle.contract, event: "SafeModeEnabled", logs: logs, sub: sub}, nil +} + +// WatchSafeModeEnabled is a free log subscription operation binding the contract event 0x3328bda355014adfb66d5d9086ab2c3204d1af7f83a69a3276daeed721f6ce3c. +// +// Solidity: event SafeModeEnabled() +func (_StaderOracle *StaderOracleFilterer) WatchSafeModeEnabled(opts *bind.WatchOpts, sink chan<- *StaderOracleSafeModeEnabled) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "SafeModeEnabled") + 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(StaderOracleSafeModeEnabled) + if err := _StaderOracle.contract.UnpackLog(event, "SafeModeEnabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSafeModeEnabled is a log parse operation binding the contract event 0x3328bda355014adfb66d5d9086ab2c3204d1af7f83a69a3276daeed721f6ce3c. +// +// Solidity: event SafeModeEnabled() +func (_StaderOracle *StaderOracleFilterer) ParseSafeModeEnabled(log types.Log) (*StaderOracleSafeModeEnabled, error) { + event := new(StaderOracleSafeModeEnabled) + if err := _StaderOracle.contract.UnpackLog(event, "SafeModeEnabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleSocializingRewardsMerkleRootSubmittedIterator is returned from FilterSocializingRewardsMerkleRootSubmitted and is used to iterate over the raw logs and unpacked data for SocializingRewardsMerkleRootSubmitted events raised by the StaderOracle contract. +type StaderOracleSocializingRewardsMerkleRootSubmittedIterator struct { + Event *StaderOracleSocializingRewardsMerkleRootSubmitted // 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 *StaderOracleSocializingRewardsMerkleRootSubmittedIterator) 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(StaderOracleSocializingRewardsMerkleRootSubmitted) + if err := 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(StaderOracleSocializingRewardsMerkleRootSubmitted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleSocializingRewardsMerkleRootSubmittedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleSocializingRewardsMerkleRootSubmittedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleSocializingRewardsMerkleRootSubmitted represents a SocializingRewardsMerkleRootSubmitted event raised by the StaderOracle contract. +type StaderOracleSocializingRewardsMerkleRootSubmitted struct { + Node common.Address + Index *big.Int + MerkleRoot [32]byte + PoolId uint8 + Block *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSocializingRewardsMerkleRootSubmitted is a free log retrieval operation binding the contract event 0x97f29f2f9a3ad2e8ebffd3fb4a6dbf5035b92b432c8344609b8368407dd23377. +// +// Solidity: event SocializingRewardsMerkleRootSubmitted(address indexed node, uint256 index, bytes32 merkleRoot, uint8 poolId, uint256 block) +func (_StaderOracle *StaderOracleFilterer) FilterSocializingRewardsMerkleRootSubmitted(opts *bind.FilterOpts, node []common.Address) (*StaderOracleSocializingRewardsMerkleRootSubmittedIterator, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "SocializingRewardsMerkleRootSubmitted", nodeRule) + if err != nil { + return nil, err + } + return &StaderOracleSocializingRewardsMerkleRootSubmittedIterator{contract: _StaderOracle.contract, event: "SocializingRewardsMerkleRootSubmitted", logs: logs, sub: sub}, nil +} + +// WatchSocializingRewardsMerkleRootSubmitted is a free log subscription operation binding the contract event 0x97f29f2f9a3ad2e8ebffd3fb4a6dbf5035b92b432c8344609b8368407dd23377. +// +// Solidity: event SocializingRewardsMerkleRootSubmitted(address indexed node, uint256 index, bytes32 merkleRoot, uint8 poolId, uint256 block) +func (_StaderOracle *StaderOracleFilterer) WatchSocializingRewardsMerkleRootSubmitted(opts *bind.WatchOpts, sink chan<- *StaderOracleSocializingRewardsMerkleRootSubmitted, node []common.Address) (event.Subscription, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "SocializingRewardsMerkleRootSubmitted", nodeRule) + 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(StaderOracleSocializingRewardsMerkleRootSubmitted) + if err := _StaderOracle.contract.UnpackLog(event, "SocializingRewardsMerkleRootSubmitted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSocializingRewardsMerkleRootSubmitted is a log parse operation binding the contract event 0x97f29f2f9a3ad2e8ebffd3fb4a6dbf5035b92b432c8344609b8368407dd23377. +// +// Solidity: event SocializingRewardsMerkleRootSubmitted(address indexed node, uint256 index, bytes32 merkleRoot, uint8 poolId, uint256 block) +func (_StaderOracle *StaderOracleFilterer) ParseSocializingRewardsMerkleRootSubmitted(log types.Log) (*StaderOracleSocializingRewardsMerkleRootSubmitted, error) { + event := new(StaderOracleSocializingRewardsMerkleRootSubmitted) + if err := _StaderOracle.contract.UnpackLog(event, "SocializingRewardsMerkleRootSubmitted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleSocializingRewardsMerkleRootUpdatedIterator is returned from FilterSocializingRewardsMerkleRootUpdated and is used to iterate over the raw logs and unpacked data for SocializingRewardsMerkleRootUpdated events raised by the StaderOracle contract. +type StaderOracleSocializingRewardsMerkleRootUpdatedIterator struct { + Event *StaderOracleSocializingRewardsMerkleRootUpdated // 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 *StaderOracleSocializingRewardsMerkleRootUpdatedIterator) 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(StaderOracleSocializingRewardsMerkleRootUpdated) + if err := 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(StaderOracleSocializingRewardsMerkleRootUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleSocializingRewardsMerkleRootUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleSocializingRewardsMerkleRootUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleSocializingRewardsMerkleRootUpdated represents a SocializingRewardsMerkleRootUpdated event raised by the StaderOracle contract. +type StaderOracleSocializingRewardsMerkleRootUpdated struct { + Index *big.Int + MerkleRoot [32]byte + PoolId uint8 + Block *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSocializingRewardsMerkleRootUpdated is a free log retrieval operation binding the contract event 0x4394ee7a4ca89453c6900058c69bfaf14014d9fc4d510ead54ae47ac06d1f05e. +// +// Solidity: event SocializingRewardsMerkleRootUpdated(uint256 index, bytes32 merkleRoot, uint8 poolId, uint256 block) +func (_StaderOracle *StaderOracleFilterer) FilterSocializingRewardsMerkleRootUpdated(opts *bind.FilterOpts) (*StaderOracleSocializingRewardsMerkleRootUpdatedIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "SocializingRewardsMerkleRootUpdated") + if err != nil { + return nil, err + } + return &StaderOracleSocializingRewardsMerkleRootUpdatedIterator{contract: _StaderOracle.contract, event: "SocializingRewardsMerkleRootUpdated", logs: logs, sub: sub}, nil +} + +// WatchSocializingRewardsMerkleRootUpdated is a free log subscription operation binding the contract event 0x4394ee7a4ca89453c6900058c69bfaf14014d9fc4d510ead54ae47ac06d1f05e. +// +// Solidity: event SocializingRewardsMerkleRootUpdated(uint256 index, bytes32 merkleRoot, uint8 poolId, uint256 block) +func (_StaderOracle *StaderOracleFilterer) WatchSocializingRewardsMerkleRootUpdated(opts *bind.WatchOpts, sink chan<- *StaderOracleSocializingRewardsMerkleRootUpdated) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "SocializingRewardsMerkleRootUpdated") + 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(StaderOracleSocializingRewardsMerkleRootUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "SocializingRewardsMerkleRootUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSocializingRewardsMerkleRootUpdated is a log parse operation binding the contract event 0x4394ee7a4ca89453c6900058c69bfaf14014d9fc4d510ead54ae47ac06d1f05e. +// +// Solidity: event SocializingRewardsMerkleRootUpdated(uint256 index, bytes32 merkleRoot, uint8 poolId, uint256 block) +func (_StaderOracle *StaderOracleFilterer) ParseSocializingRewardsMerkleRootUpdated(log types.Log) (*StaderOracleSocializingRewardsMerkleRootUpdated, error) { + event := new(StaderOracleSocializingRewardsMerkleRootUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "SocializingRewardsMerkleRootUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleTrustedNodeAddedIterator is returned from FilterTrustedNodeAdded and is used to iterate over the raw logs and unpacked data for TrustedNodeAdded events raised by the StaderOracle contract. +type StaderOracleTrustedNodeAddedIterator struct { + Event *StaderOracleTrustedNodeAdded // 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 *StaderOracleTrustedNodeAddedIterator) 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(StaderOracleTrustedNodeAdded) + if err := 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(StaderOracleTrustedNodeAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleTrustedNodeAddedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleTrustedNodeAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleTrustedNodeAdded represents a TrustedNodeAdded event raised by the StaderOracle contract. +type StaderOracleTrustedNodeAdded struct { + Node common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTrustedNodeAdded is a free log retrieval operation binding the contract event 0xff4a290f0500d113133708d378eb9a151c32d91cb8f5778cfda6328d89cfc4b8. +// +// Solidity: event TrustedNodeAdded(address indexed node) +func (_StaderOracle *StaderOracleFilterer) FilterTrustedNodeAdded(opts *bind.FilterOpts, node []common.Address) (*StaderOracleTrustedNodeAddedIterator, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "TrustedNodeAdded", nodeRule) + if err != nil { + return nil, err + } + return &StaderOracleTrustedNodeAddedIterator{contract: _StaderOracle.contract, event: "TrustedNodeAdded", logs: logs, sub: sub}, nil +} + +// WatchTrustedNodeAdded is a free log subscription operation binding the contract event 0xff4a290f0500d113133708d378eb9a151c32d91cb8f5778cfda6328d89cfc4b8. +// +// Solidity: event TrustedNodeAdded(address indexed node) +func (_StaderOracle *StaderOracleFilterer) WatchTrustedNodeAdded(opts *bind.WatchOpts, sink chan<- *StaderOracleTrustedNodeAdded, node []common.Address) (event.Subscription, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "TrustedNodeAdded", nodeRule) + 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(StaderOracleTrustedNodeAdded) + if err := _StaderOracle.contract.UnpackLog(event, "TrustedNodeAdded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTrustedNodeAdded is a log parse operation binding the contract event 0xff4a290f0500d113133708d378eb9a151c32d91cb8f5778cfda6328d89cfc4b8. +// +// Solidity: event TrustedNodeAdded(address indexed node) +func (_StaderOracle *StaderOracleFilterer) ParseTrustedNodeAdded(log types.Log) (*StaderOracleTrustedNodeAdded, error) { + event := new(StaderOracleTrustedNodeAdded) + if err := _StaderOracle.contract.UnpackLog(event, "TrustedNodeAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleTrustedNodeChangeCoolingPeriodUpdatedIterator is returned from FilterTrustedNodeChangeCoolingPeriodUpdated and is used to iterate over the raw logs and unpacked data for TrustedNodeChangeCoolingPeriodUpdated events raised by the StaderOracle contract. +type StaderOracleTrustedNodeChangeCoolingPeriodUpdatedIterator struct { + Event *StaderOracleTrustedNodeChangeCoolingPeriodUpdated // 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 *StaderOracleTrustedNodeChangeCoolingPeriodUpdatedIterator) 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(StaderOracleTrustedNodeChangeCoolingPeriodUpdated) + if err := 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(StaderOracleTrustedNodeChangeCoolingPeriodUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleTrustedNodeChangeCoolingPeriodUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleTrustedNodeChangeCoolingPeriodUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleTrustedNodeChangeCoolingPeriodUpdated represents a TrustedNodeChangeCoolingPeriodUpdated event raised by the StaderOracle contract. +type StaderOracleTrustedNodeChangeCoolingPeriodUpdated struct { + TrustedNodeChangeCoolingPeriod *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTrustedNodeChangeCoolingPeriodUpdated is a free log retrieval operation binding the contract event 0x4ab6bf3c94e4c92b7b93e89e984ef66d28392f440a58d91d244b6c303e85f046. +// +// Solidity: event TrustedNodeChangeCoolingPeriodUpdated(uint256 trustedNodeChangeCoolingPeriod) +func (_StaderOracle *StaderOracleFilterer) FilterTrustedNodeChangeCoolingPeriodUpdated(opts *bind.FilterOpts) (*StaderOracleTrustedNodeChangeCoolingPeriodUpdatedIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "TrustedNodeChangeCoolingPeriodUpdated") + if err != nil { + return nil, err + } + return &StaderOracleTrustedNodeChangeCoolingPeriodUpdatedIterator{contract: _StaderOracle.contract, event: "TrustedNodeChangeCoolingPeriodUpdated", logs: logs, sub: sub}, nil +} + +// WatchTrustedNodeChangeCoolingPeriodUpdated is a free log subscription operation binding the contract event 0x4ab6bf3c94e4c92b7b93e89e984ef66d28392f440a58d91d244b6c303e85f046. +// +// Solidity: event TrustedNodeChangeCoolingPeriodUpdated(uint256 trustedNodeChangeCoolingPeriod) +func (_StaderOracle *StaderOracleFilterer) WatchTrustedNodeChangeCoolingPeriodUpdated(opts *bind.WatchOpts, sink chan<- *StaderOracleTrustedNodeChangeCoolingPeriodUpdated) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "TrustedNodeChangeCoolingPeriodUpdated") + 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(StaderOracleTrustedNodeChangeCoolingPeriodUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "TrustedNodeChangeCoolingPeriodUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTrustedNodeChangeCoolingPeriodUpdated is a log parse operation binding the contract event 0x4ab6bf3c94e4c92b7b93e89e984ef66d28392f440a58d91d244b6c303e85f046. +// +// Solidity: event TrustedNodeChangeCoolingPeriodUpdated(uint256 trustedNodeChangeCoolingPeriod) +func (_StaderOracle *StaderOracleFilterer) ParseTrustedNodeChangeCoolingPeriodUpdated(log types.Log) (*StaderOracleTrustedNodeChangeCoolingPeriodUpdated, error) { + event := new(StaderOracleTrustedNodeChangeCoolingPeriodUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "TrustedNodeChangeCoolingPeriodUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleTrustedNodeRemovedIterator is returned from FilterTrustedNodeRemoved and is used to iterate over the raw logs and unpacked data for TrustedNodeRemoved events raised by the StaderOracle contract. +type StaderOracleTrustedNodeRemovedIterator struct { + Event *StaderOracleTrustedNodeRemoved // 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 *StaderOracleTrustedNodeRemovedIterator) 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(StaderOracleTrustedNodeRemoved) + if err := 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(StaderOracleTrustedNodeRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleTrustedNodeRemovedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleTrustedNodeRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleTrustedNodeRemoved represents a TrustedNodeRemoved event raised by the StaderOracle contract. +type StaderOracleTrustedNodeRemoved struct { + Node common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTrustedNodeRemoved is a free log retrieval operation binding the contract event 0x6d1de2fb0c63996bae7ba6277c720c0560ba42874ea34c1ebe8e1423b9b47421. +// +// Solidity: event TrustedNodeRemoved(address indexed node) +func (_StaderOracle *StaderOracleFilterer) FilterTrustedNodeRemoved(opts *bind.FilterOpts, node []common.Address) (*StaderOracleTrustedNodeRemovedIterator, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "TrustedNodeRemoved", nodeRule) + if err != nil { + return nil, err + } + return &StaderOracleTrustedNodeRemovedIterator{contract: _StaderOracle.contract, event: "TrustedNodeRemoved", logs: logs, sub: sub}, nil +} + +// WatchTrustedNodeRemoved is a free log subscription operation binding the contract event 0x6d1de2fb0c63996bae7ba6277c720c0560ba42874ea34c1ebe8e1423b9b47421. +// +// Solidity: event TrustedNodeRemoved(address indexed node) +func (_StaderOracle *StaderOracleFilterer) WatchTrustedNodeRemoved(opts *bind.WatchOpts, sink chan<- *StaderOracleTrustedNodeRemoved, node []common.Address) (event.Subscription, error) { + + var nodeRule []interface{} + for _, nodeItem := range node { + nodeRule = append(nodeRule, nodeItem) + } + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "TrustedNodeRemoved", nodeRule) + 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(StaderOracleTrustedNodeRemoved) + if err := _StaderOracle.contract.UnpackLog(event, "TrustedNodeRemoved", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTrustedNodeRemoved is a log parse operation binding the contract event 0x6d1de2fb0c63996bae7ba6277c720c0560ba42874ea34c1ebe8e1423b9b47421. +// +// Solidity: event TrustedNodeRemoved(address indexed node) +func (_StaderOracle *StaderOracleFilterer) ParseTrustedNodeRemoved(log types.Log) (*StaderOracleTrustedNodeRemoved, error) { + event := new(StaderOracleTrustedNodeRemoved) + if err := _StaderOracle.contract.UnpackLog(event, "TrustedNodeRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the StaderOracle contract. +type StaderOracleUnpausedIterator struct { + Event *StaderOracleUnpaused // 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 *StaderOracleUnpausedIterator) 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(StaderOracleUnpaused) + if err := 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(StaderOracleUnpaused) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleUnpaused represents a Unpaused event raised by the StaderOracle contract. +type StaderOracleUnpaused 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 (_StaderOracle *StaderOracleFilterer) FilterUnpaused(opts *bind.FilterOpts) (*StaderOracleUnpausedIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "Unpaused") + if err != nil { + return nil, err + } + return &StaderOracleUnpausedIterator{contract: _StaderOracle.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 (_StaderOracle *StaderOracleFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *StaderOracleUnpaused) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.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(StaderOracleUnpaused) + if err := _StaderOracle.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 (_StaderOracle *StaderOracleFilterer) ParseUnpaused(log types.Log) (*StaderOracleUnpaused, error) { + event := new(StaderOracleUnpaused) + if err := _StaderOracle.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleUpdateFrequencyUpdatedIterator is returned from FilterUpdateFrequencyUpdated and is used to iterate over the raw logs and unpacked data for UpdateFrequencyUpdated events raised by the StaderOracle contract. +type StaderOracleUpdateFrequencyUpdatedIterator struct { + Event *StaderOracleUpdateFrequencyUpdated // 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 *StaderOracleUpdateFrequencyUpdatedIterator) 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(StaderOracleUpdateFrequencyUpdated) + if err := 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(StaderOracleUpdateFrequencyUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleUpdateFrequencyUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleUpdateFrequencyUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleUpdateFrequencyUpdated represents a UpdateFrequencyUpdated event raised by the StaderOracle contract. +type StaderOracleUpdateFrequencyUpdated struct { + UpdateFrequency *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdateFrequencyUpdated is a free log retrieval operation binding the contract event 0x6231a3e049e2072a042ae727208e7650b487871f4080458371e84d6e7d391138. +// +// Solidity: event UpdateFrequencyUpdated(uint256 updateFrequency) +func (_StaderOracle *StaderOracleFilterer) FilterUpdateFrequencyUpdated(opts *bind.FilterOpts) (*StaderOracleUpdateFrequencyUpdatedIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "UpdateFrequencyUpdated") + if err != nil { + return nil, err + } + return &StaderOracleUpdateFrequencyUpdatedIterator{contract: _StaderOracle.contract, event: "UpdateFrequencyUpdated", logs: logs, sub: sub}, nil +} + +// WatchUpdateFrequencyUpdated is a free log subscription operation binding the contract event 0x6231a3e049e2072a042ae727208e7650b487871f4080458371e84d6e7d391138. +// +// Solidity: event UpdateFrequencyUpdated(uint256 updateFrequency) +func (_StaderOracle *StaderOracleFilterer) WatchUpdateFrequencyUpdated(opts *bind.WatchOpts, sink chan<- *StaderOracleUpdateFrequencyUpdated) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "UpdateFrequencyUpdated") + 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(StaderOracleUpdateFrequencyUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "UpdateFrequencyUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdateFrequencyUpdated is a log parse operation binding the contract event 0x6231a3e049e2072a042ae727208e7650b487871f4080458371e84d6e7d391138. +// +// Solidity: event UpdateFrequencyUpdated(uint256 updateFrequency) +func (_StaderOracle *StaderOracleFilterer) ParseUpdateFrequencyUpdated(log types.Log) (*StaderOracleUpdateFrequencyUpdated, error) { + event := new(StaderOracleUpdateFrequencyUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "UpdateFrequencyUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleUpdatedERChangeLimitIterator is returned from FilterUpdatedERChangeLimit and is used to iterate over the raw logs and unpacked data for UpdatedERChangeLimit events raised by the StaderOracle contract. +type StaderOracleUpdatedERChangeLimitIterator struct { + Event *StaderOracleUpdatedERChangeLimit // 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 *StaderOracleUpdatedERChangeLimitIterator) 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(StaderOracleUpdatedERChangeLimit) + if err := 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(StaderOracleUpdatedERChangeLimit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleUpdatedERChangeLimitIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleUpdatedERChangeLimitIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleUpdatedERChangeLimit represents a UpdatedERChangeLimit event raised by the StaderOracle contract. +type StaderOracleUpdatedERChangeLimit struct { + ErChangeLimit *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedERChangeLimit is a free log retrieval operation binding the contract event 0x94a97bfc9c7a83fe5f75c66931ca7d2d16372fdc244afc5db36044f3ca52a520. +// +// Solidity: event UpdatedERChangeLimit(uint256 erChangeLimit) +func (_StaderOracle *StaderOracleFilterer) FilterUpdatedERChangeLimit(opts *bind.FilterOpts) (*StaderOracleUpdatedERChangeLimitIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "UpdatedERChangeLimit") + if err != nil { + return nil, err + } + return &StaderOracleUpdatedERChangeLimitIterator{contract: _StaderOracle.contract, event: "UpdatedERChangeLimit", logs: logs, sub: sub}, nil +} + +// WatchUpdatedERChangeLimit is a free log subscription operation binding the contract event 0x94a97bfc9c7a83fe5f75c66931ca7d2d16372fdc244afc5db36044f3ca52a520. +// +// Solidity: event UpdatedERChangeLimit(uint256 erChangeLimit) +func (_StaderOracle *StaderOracleFilterer) WatchUpdatedERChangeLimit(opts *bind.WatchOpts, sink chan<- *StaderOracleUpdatedERChangeLimit) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "UpdatedERChangeLimit") + 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(StaderOracleUpdatedERChangeLimit) + if err := _StaderOracle.contract.UnpackLog(event, "UpdatedERChangeLimit", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedERChangeLimit is a log parse operation binding the contract event 0x94a97bfc9c7a83fe5f75c66931ca7d2d16372fdc244afc5db36044f3ca52a520. +// +// Solidity: event UpdatedERChangeLimit(uint256 erChangeLimit) +func (_StaderOracle *StaderOracleFilterer) ParseUpdatedERChangeLimit(log types.Log) (*StaderOracleUpdatedERChangeLimit, error) { + event := new(StaderOracleUpdatedERChangeLimit) + if err := _StaderOracle.contract.UnpackLog(event, "UpdatedERChangeLimit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleUpdatedStaderConfigIterator is returned from FilterUpdatedStaderConfig and is used to iterate over the raw logs and unpacked data for UpdatedStaderConfig events raised by the StaderOracle contract. +type StaderOracleUpdatedStaderConfigIterator struct { + Event *StaderOracleUpdatedStaderConfig // 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 *StaderOracleUpdatedStaderConfigIterator) 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(StaderOracleUpdatedStaderConfig) + if err := 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(StaderOracleUpdatedStaderConfig) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleUpdatedStaderConfigIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleUpdatedStaderConfigIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleUpdatedStaderConfig represents a UpdatedStaderConfig event raised by the StaderOracle contract. +type StaderOracleUpdatedStaderConfig struct { + StaderConfig common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedStaderConfig is a free log retrieval operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_StaderOracle *StaderOracleFilterer) FilterUpdatedStaderConfig(opts *bind.FilterOpts) (*StaderOracleUpdatedStaderConfigIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "UpdatedStaderConfig") + if err != nil { + return nil, err + } + return &StaderOracleUpdatedStaderConfigIterator{contract: _StaderOracle.contract, event: "UpdatedStaderConfig", logs: logs, sub: sub}, nil +} + +// WatchUpdatedStaderConfig is a free log subscription operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_StaderOracle *StaderOracleFilterer) WatchUpdatedStaderConfig(opts *bind.WatchOpts, sink chan<- *StaderOracleUpdatedStaderConfig) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "UpdatedStaderConfig") + 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(StaderOracleUpdatedStaderConfig) + if err := _StaderOracle.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedStaderConfig is a log parse operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. +// +// Solidity: event UpdatedStaderConfig(address staderConfig) +func (_StaderOracle *StaderOracleFilterer) ParseUpdatedStaderConfig(log types.Log) (*StaderOracleUpdatedStaderConfig, error) { + event := new(StaderOracleUpdatedStaderConfig) + if err := _StaderOracle.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleValidatorStatsSubmittedIterator is returned from FilterValidatorStatsSubmitted and is used to iterate over the raw logs and unpacked data for ValidatorStatsSubmitted events raised by the StaderOracle contract. +type StaderOracleValidatorStatsSubmittedIterator struct { + Event *StaderOracleValidatorStatsSubmitted // 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 *StaderOracleValidatorStatsSubmittedIterator) 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(StaderOracleValidatorStatsSubmitted) + if err := 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(StaderOracleValidatorStatsSubmitted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleValidatorStatsSubmittedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleValidatorStatsSubmittedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleValidatorStatsSubmitted represents a ValidatorStatsSubmitted event raised by the StaderOracle contract. +type StaderOracleValidatorStatsSubmitted struct { + From common.Address + Block *big.Int + ActiveValidatorsBalance *big.Int + ExitedValidatorsBalance *big.Int + SlashedValidatorsBalance *big.Int + ActiveValidatorsCount *big.Int + ExitedValidatorsCount *big.Int + SlashedValidatorsCount *big.Int + Time *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorStatsSubmitted is a free log retrieval operation binding the contract event 0x72745b0271618e5d84d738ea416e3a3be6eb267e0f639198f63c0ef124c29ffc. +// +// Solidity: event ValidatorStatsSubmitted(address indexed from, uint256 block, uint256 activeValidatorsBalance, uint256 exitedValidatorsBalance, uint256 slashedValidatorsBalance, uint256 activeValidatorsCount, uint256 exitedValidatorsCount, uint256 slashedValidatorsCount, uint256 time) +func (_StaderOracle *StaderOracleFilterer) FilterValidatorStatsSubmitted(opts *bind.FilterOpts, from []common.Address) (*StaderOracleValidatorStatsSubmittedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "ValidatorStatsSubmitted", fromRule) + if err != nil { + return nil, err + } + return &StaderOracleValidatorStatsSubmittedIterator{contract: _StaderOracle.contract, event: "ValidatorStatsSubmitted", logs: logs, sub: sub}, nil +} + +// WatchValidatorStatsSubmitted is a free log subscription operation binding the contract event 0x72745b0271618e5d84d738ea416e3a3be6eb267e0f639198f63c0ef124c29ffc. +// +// Solidity: event ValidatorStatsSubmitted(address indexed from, uint256 block, uint256 activeValidatorsBalance, uint256 exitedValidatorsBalance, uint256 slashedValidatorsBalance, uint256 activeValidatorsCount, uint256 exitedValidatorsCount, uint256 slashedValidatorsCount, uint256 time) +func (_StaderOracle *StaderOracleFilterer) WatchValidatorStatsSubmitted(opts *bind.WatchOpts, sink chan<- *StaderOracleValidatorStatsSubmitted, from []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "ValidatorStatsSubmitted", 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(StaderOracleValidatorStatsSubmitted) + if err := _StaderOracle.contract.UnpackLog(event, "ValidatorStatsSubmitted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseValidatorStatsSubmitted is a log parse operation binding the contract event 0x72745b0271618e5d84d738ea416e3a3be6eb267e0f639198f63c0ef124c29ffc. +// +// Solidity: event ValidatorStatsSubmitted(address indexed from, uint256 block, uint256 activeValidatorsBalance, uint256 exitedValidatorsBalance, uint256 slashedValidatorsBalance, uint256 activeValidatorsCount, uint256 exitedValidatorsCount, uint256 slashedValidatorsCount, uint256 time) +func (_StaderOracle *StaderOracleFilterer) ParseValidatorStatsSubmitted(log types.Log) (*StaderOracleValidatorStatsSubmitted, error) { + event := new(StaderOracleValidatorStatsSubmitted) + if err := _StaderOracle.contract.UnpackLog(event, "ValidatorStatsSubmitted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleValidatorStatsUpdatedIterator is returned from FilterValidatorStatsUpdated and is used to iterate over the raw logs and unpacked data for ValidatorStatsUpdated events raised by the StaderOracle contract. +type StaderOracleValidatorStatsUpdatedIterator struct { + Event *StaderOracleValidatorStatsUpdated // 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 *StaderOracleValidatorStatsUpdatedIterator) 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(StaderOracleValidatorStatsUpdated) + if err := 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(StaderOracleValidatorStatsUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleValidatorStatsUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleValidatorStatsUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleValidatorStatsUpdated represents a ValidatorStatsUpdated event raised by the StaderOracle contract. +type StaderOracleValidatorStatsUpdated struct { + Block *big.Int + ActiveValidatorsBalance *big.Int + ExitedValidatorsBalance *big.Int + SlashedValidatorsBalance *big.Int + ActiveValidatorsCount *big.Int + ExitedValidatorsCount *big.Int + SlashedValidatorsCount *big.Int + Time *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorStatsUpdated is a free log retrieval operation binding the contract event 0x6988248fd82a7ce842fbdce0c49889ad926bf1548bae4194de0006498d069c94. +// +// Solidity: event ValidatorStatsUpdated(uint256 block, uint256 activeValidatorsBalance, uint256 exitedValidatorsBalance, uint256 slashedValidatorsBalance, uint256 activeValidatorsCount, uint256 exitedValidatorsCount, uint256 slashedValidatorsCount, uint256 time) +func (_StaderOracle *StaderOracleFilterer) FilterValidatorStatsUpdated(opts *bind.FilterOpts) (*StaderOracleValidatorStatsUpdatedIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "ValidatorStatsUpdated") + if err != nil { + return nil, err + } + return &StaderOracleValidatorStatsUpdatedIterator{contract: _StaderOracle.contract, event: "ValidatorStatsUpdated", logs: logs, sub: sub}, nil +} + +// WatchValidatorStatsUpdated is a free log subscription operation binding the contract event 0x6988248fd82a7ce842fbdce0c49889ad926bf1548bae4194de0006498d069c94. +// +// Solidity: event ValidatorStatsUpdated(uint256 block, uint256 activeValidatorsBalance, uint256 exitedValidatorsBalance, uint256 slashedValidatorsBalance, uint256 activeValidatorsCount, uint256 exitedValidatorsCount, uint256 slashedValidatorsCount, uint256 time) +func (_StaderOracle *StaderOracleFilterer) WatchValidatorStatsUpdated(opts *bind.WatchOpts, sink chan<- *StaderOracleValidatorStatsUpdated) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "ValidatorStatsUpdated") + 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(StaderOracleValidatorStatsUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "ValidatorStatsUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseValidatorStatsUpdated is a log parse operation binding the contract event 0x6988248fd82a7ce842fbdce0c49889ad926bf1548bae4194de0006498d069c94. +// +// Solidity: event ValidatorStatsUpdated(uint256 block, uint256 activeValidatorsBalance, uint256 exitedValidatorsBalance, uint256 slashedValidatorsBalance, uint256 activeValidatorsCount, uint256 exitedValidatorsCount, uint256 slashedValidatorsCount, uint256 time) +func (_StaderOracle *StaderOracleFilterer) ParseValidatorStatsUpdated(log types.Log) (*StaderOracleValidatorStatsUpdated, error) { + event := new(StaderOracleValidatorStatsUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "ValidatorStatsUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleValidatorVerificationDetailSubmittedIterator is returned from FilterValidatorVerificationDetailSubmitted and is used to iterate over the raw logs and unpacked data for ValidatorVerificationDetailSubmitted events raised by the StaderOracle contract. +type StaderOracleValidatorVerificationDetailSubmittedIterator struct { + Event *StaderOracleValidatorVerificationDetailSubmitted // 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 *StaderOracleValidatorVerificationDetailSubmittedIterator) 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(StaderOracleValidatorVerificationDetailSubmitted) + if err := 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(StaderOracleValidatorVerificationDetailSubmitted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleValidatorVerificationDetailSubmittedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleValidatorVerificationDetailSubmittedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleValidatorVerificationDetailSubmitted represents a ValidatorVerificationDetailSubmitted event raised by the StaderOracle contract. +type StaderOracleValidatorVerificationDetailSubmitted struct { + From common.Address + PoolId uint8 + Block *big.Int + SortedReadyToDepositPubkeys [][]byte + SortedFrontRunPubkeys [][]byte + SortedInvalidSignaturePubkeys [][]byte + Time *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorVerificationDetailSubmitted is a free log retrieval operation binding the contract event 0x9827231af99e07dd2167998d4c6855a2f78e0eead80a6a490393b1c3ead048a1. +// +// Solidity: event ValidatorVerificationDetailSubmitted(address indexed from, uint8 poolId, uint256 block, bytes[] sortedReadyToDepositPubkeys, bytes[] sortedFrontRunPubkeys, bytes[] sortedInvalidSignaturePubkeys, uint256 time) +func (_StaderOracle *StaderOracleFilterer) FilterValidatorVerificationDetailSubmitted(opts *bind.FilterOpts, from []common.Address) (*StaderOracleValidatorVerificationDetailSubmittedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "ValidatorVerificationDetailSubmitted", fromRule) + if err != nil { + return nil, err + } + return &StaderOracleValidatorVerificationDetailSubmittedIterator{contract: _StaderOracle.contract, event: "ValidatorVerificationDetailSubmitted", logs: logs, sub: sub}, nil +} + +// WatchValidatorVerificationDetailSubmitted is a free log subscription operation binding the contract event 0x9827231af99e07dd2167998d4c6855a2f78e0eead80a6a490393b1c3ead048a1. +// +// Solidity: event ValidatorVerificationDetailSubmitted(address indexed from, uint8 poolId, uint256 block, bytes[] sortedReadyToDepositPubkeys, bytes[] sortedFrontRunPubkeys, bytes[] sortedInvalidSignaturePubkeys, uint256 time) +func (_StaderOracle *StaderOracleFilterer) WatchValidatorVerificationDetailSubmitted(opts *bind.WatchOpts, sink chan<- *StaderOracleValidatorVerificationDetailSubmitted, from []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "ValidatorVerificationDetailSubmitted", 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(StaderOracleValidatorVerificationDetailSubmitted) + if err := _StaderOracle.contract.UnpackLog(event, "ValidatorVerificationDetailSubmitted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseValidatorVerificationDetailSubmitted is a log parse operation binding the contract event 0x9827231af99e07dd2167998d4c6855a2f78e0eead80a6a490393b1c3ead048a1. +// +// Solidity: event ValidatorVerificationDetailSubmitted(address indexed from, uint8 poolId, uint256 block, bytes[] sortedReadyToDepositPubkeys, bytes[] sortedFrontRunPubkeys, bytes[] sortedInvalidSignaturePubkeys, uint256 time) +func (_StaderOracle *StaderOracleFilterer) ParseValidatorVerificationDetailSubmitted(log types.Log) (*StaderOracleValidatorVerificationDetailSubmitted, error) { + event := new(StaderOracleValidatorVerificationDetailSubmitted) + if err := _StaderOracle.contract.UnpackLog(event, "ValidatorVerificationDetailSubmitted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleValidatorVerificationDetailUpdatedIterator is returned from FilterValidatorVerificationDetailUpdated and is used to iterate over the raw logs and unpacked data for ValidatorVerificationDetailUpdated events raised by the StaderOracle contract. +type StaderOracleValidatorVerificationDetailUpdatedIterator struct { + Event *StaderOracleValidatorVerificationDetailUpdated // 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 *StaderOracleValidatorVerificationDetailUpdatedIterator) 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(StaderOracleValidatorVerificationDetailUpdated) + if err := 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(StaderOracleValidatorVerificationDetailUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleValidatorVerificationDetailUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleValidatorVerificationDetailUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleValidatorVerificationDetailUpdated represents a ValidatorVerificationDetailUpdated event raised by the StaderOracle contract. +type StaderOracleValidatorVerificationDetailUpdated struct { + PoolId uint8 + Block *big.Int + SortedReadyToDepositPubkeys [][]byte + SortedFrontRunPubkeys [][]byte + SortedInvalidSignaturePubkeys [][]byte + Time *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidatorVerificationDetailUpdated is a free log retrieval operation binding the contract event 0x64a4ab6f7a6ca6fe9c5750207ea4a9d3e2d5f5ba81f707146b7b20624f61cf11. +// +// Solidity: event ValidatorVerificationDetailUpdated(uint8 poolId, uint256 block, bytes[] sortedReadyToDepositPubkeys, bytes[] sortedFrontRunPubkeys, bytes[] sortedInvalidSignaturePubkeys, uint256 time) +func (_StaderOracle *StaderOracleFilterer) FilterValidatorVerificationDetailUpdated(opts *bind.FilterOpts) (*StaderOracleValidatorVerificationDetailUpdatedIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "ValidatorVerificationDetailUpdated") + if err != nil { + return nil, err + } + return &StaderOracleValidatorVerificationDetailUpdatedIterator{contract: _StaderOracle.contract, event: "ValidatorVerificationDetailUpdated", logs: logs, sub: sub}, nil +} + +// WatchValidatorVerificationDetailUpdated is a free log subscription operation binding the contract event 0x64a4ab6f7a6ca6fe9c5750207ea4a9d3e2d5f5ba81f707146b7b20624f61cf11. +// +// Solidity: event ValidatorVerificationDetailUpdated(uint8 poolId, uint256 block, bytes[] sortedReadyToDepositPubkeys, bytes[] sortedFrontRunPubkeys, bytes[] sortedInvalidSignaturePubkeys, uint256 time) +func (_StaderOracle *StaderOracleFilterer) WatchValidatorVerificationDetailUpdated(opts *bind.WatchOpts, sink chan<- *StaderOracleValidatorVerificationDetailUpdated) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "ValidatorVerificationDetailUpdated") + 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(StaderOracleValidatorVerificationDetailUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "ValidatorVerificationDetailUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseValidatorVerificationDetailUpdated is a log parse operation binding the contract event 0x64a4ab6f7a6ca6fe9c5750207ea4a9d3e2d5f5ba81f707146b7b20624f61cf11. +// +// Solidity: event ValidatorVerificationDetailUpdated(uint8 poolId, uint256 block, bytes[] sortedReadyToDepositPubkeys, bytes[] sortedFrontRunPubkeys, bytes[] sortedInvalidSignaturePubkeys, uint256 time) +func (_StaderOracle *StaderOracleFilterer) ParseValidatorVerificationDetailUpdated(log types.Log) (*StaderOracleValidatorVerificationDetailUpdated, error) { + event := new(StaderOracleValidatorVerificationDetailUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "ValidatorVerificationDetailUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleWithdrawnValidatorsSubmittedIterator is returned from FilterWithdrawnValidatorsSubmitted and is used to iterate over the raw logs and unpacked data for WithdrawnValidatorsSubmitted events raised by the StaderOracle contract. +type StaderOracleWithdrawnValidatorsSubmittedIterator struct { + Event *StaderOracleWithdrawnValidatorsSubmitted // 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 *StaderOracleWithdrawnValidatorsSubmittedIterator) 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(StaderOracleWithdrawnValidatorsSubmitted) + if err := 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(StaderOracleWithdrawnValidatorsSubmitted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleWithdrawnValidatorsSubmittedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleWithdrawnValidatorsSubmittedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleWithdrawnValidatorsSubmitted represents a WithdrawnValidatorsSubmitted event raised by the StaderOracle contract. +type StaderOracleWithdrawnValidatorsSubmitted struct { + From common.Address + PoolId uint8 + Block *big.Int + Pubkeys [][]byte + Time *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawnValidatorsSubmitted is a free log retrieval operation binding the contract event 0x3b426b614a89830a3d92d8dead18e2ded3cba56101dbff12dddfc1c77b21fbe6. +// +// Solidity: event WithdrawnValidatorsSubmitted(address indexed from, uint8 poolId, uint256 block, bytes[] pubkeys, uint256 time) +func (_StaderOracle *StaderOracleFilterer) FilterWithdrawnValidatorsSubmitted(opts *bind.FilterOpts, from []common.Address) (*StaderOracleWithdrawnValidatorsSubmittedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "WithdrawnValidatorsSubmitted", fromRule) + if err != nil { + return nil, err + } + return &StaderOracleWithdrawnValidatorsSubmittedIterator{contract: _StaderOracle.contract, event: "WithdrawnValidatorsSubmitted", logs: logs, sub: sub}, nil +} + +// WatchWithdrawnValidatorsSubmitted is a free log subscription operation binding the contract event 0x3b426b614a89830a3d92d8dead18e2ded3cba56101dbff12dddfc1c77b21fbe6. +// +// Solidity: event WithdrawnValidatorsSubmitted(address indexed from, uint8 poolId, uint256 block, bytes[] pubkeys, uint256 time) +func (_StaderOracle *StaderOracleFilterer) WatchWithdrawnValidatorsSubmitted(opts *bind.WatchOpts, sink chan<- *StaderOracleWithdrawnValidatorsSubmitted, from []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "WithdrawnValidatorsSubmitted", 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(StaderOracleWithdrawnValidatorsSubmitted) + if err := _StaderOracle.contract.UnpackLog(event, "WithdrawnValidatorsSubmitted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawnValidatorsSubmitted is a log parse operation binding the contract event 0x3b426b614a89830a3d92d8dead18e2ded3cba56101dbff12dddfc1c77b21fbe6. +// +// Solidity: event WithdrawnValidatorsSubmitted(address indexed from, uint8 poolId, uint256 block, bytes[] pubkeys, uint256 time) +func (_StaderOracle *StaderOracleFilterer) ParseWithdrawnValidatorsSubmitted(log types.Log) (*StaderOracleWithdrawnValidatorsSubmitted, error) { + event := new(StaderOracleWithdrawnValidatorsSubmitted) + if err := _StaderOracle.contract.UnpackLog(event, "WithdrawnValidatorsSubmitted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// StaderOracleWithdrawnValidatorsUpdatedIterator is returned from FilterWithdrawnValidatorsUpdated and is used to iterate over the raw logs and unpacked data for WithdrawnValidatorsUpdated events raised by the StaderOracle contract. +type StaderOracleWithdrawnValidatorsUpdatedIterator struct { + Event *StaderOracleWithdrawnValidatorsUpdated // 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 *StaderOracleWithdrawnValidatorsUpdatedIterator) 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(StaderOracleWithdrawnValidatorsUpdated) + if err := 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(StaderOracleWithdrawnValidatorsUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.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 *StaderOracleWithdrawnValidatorsUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *StaderOracleWithdrawnValidatorsUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// StaderOracleWithdrawnValidatorsUpdated represents a WithdrawnValidatorsUpdated event raised by the StaderOracle contract. +type StaderOracleWithdrawnValidatorsUpdated struct { + PoolId uint8 + Block *big.Int + Pubkeys [][]byte + Time *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawnValidatorsUpdated is a free log retrieval operation binding the contract event 0x5209293842928a1567d714f34fed8d87769d89d29dfb20f48ea678b02337e84d. +// +// Solidity: event WithdrawnValidatorsUpdated(uint8 poolId, uint256 block, bytes[] pubkeys, uint256 time) +func (_StaderOracle *StaderOracleFilterer) FilterWithdrawnValidatorsUpdated(opts *bind.FilterOpts) (*StaderOracleWithdrawnValidatorsUpdatedIterator, error) { + + logs, sub, err := _StaderOracle.contract.FilterLogs(opts, "WithdrawnValidatorsUpdated") + if err != nil { + return nil, err + } + return &StaderOracleWithdrawnValidatorsUpdatedIterator{contract: _StaderOracle.contract, event: "WithdrawnValidatorsUpdated", logs: logs, sub: sub}, nil +} + +// WatchWithdrawnValidatorsUpdated is a free log subscription operation binding the contract event 0x5209293842928a1567d714f34fed8d87769d89d29dfb20f48ea678b02337e84d. +// +// Solidity: event WithdrawnValidatorsUpdated(uint8 poolId, uint256 block, bytes[] pubkeys, uint256 time) +func (_StaderOracle *StaderOracleFilterer) WatchWithdrawnValidatorsUpdated(opts *bind.WatchOpts, sink chan<- *StaderOracleWithdrawnValidatorsUpdated) (event.Subscription, error) { + + logs, sub, err := _StaderOracle.contract.WatchLogs(opts, "WithdrawnValidatorsUpdated") + 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(StaderOracleWithdrawnValidatorsUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "WithdrawnValidatorsUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawnValidatorsUpdated is a log parse operation binding the contract event 0x5209293842928a1567d714f34fed8d87769d89d29dfb20f48ea678b02337e84d. +// +// Solidity: event WithdrawnValidatorsUpdated(uint8 poolId, uint256 block, bytes[] pubkeys, uint256 time) +func (_StaderOracle *StaderOracleFilterer) ParseWithdrawnValidatorsUpdated(log types.Log) (*StaderOracleWithdrawnValidatorsUpdated, error) { + event := new(StaderOracleWithdrawnValidatorsUpdated) + if err := _StaderOracle.contract.UnpackLog(event, "WithdrawnValidatorsUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/testing/deployHelper_test.go b/testing/deployHelper_test.go index 47ed1867d..88670d33a 100644 --- a/testing/deployHelper_test.go +++ b/testing/deployHelper_test.go @@ -38,7 +38,7 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { w, err := services.GetWallet(c) require.Nil(t, err) - nodePrivateKey, err := w.GetNodePrivateKey() + operatorPrivateKey, err := w.GetNodePrivateKey() require.Nil(t, err) acc, err := w.GetNodeAccount() @@ -66,7 +66,6 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { staderCfAddress, _, stdCfContract, err := contracts.DeployStaderConfig(auth, client, fromAddress, common.HexToAddress(ethXPredefineAddr)) require.Nil(t, err) - fmt.Printf("Stader config address: %+v \n", staderCfAddress.Hex()) auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) // Update Node permissionless regis to stader config @@ -83,26 +82,23 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { // deploy the ethx contract ethXAddr, _, ethxContract, err := contracts.DeployETHX(auth, client, fromAddress, staderCfAddress) require.Nil(t, err) - fmt.Printf("EthXAddr %+v", ethXAddr.Hex()) auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) mint, _ := ethxContract.MINTERROLE(&bind.CallOpts{}) ethxContract.GrantRole(auth, mint, fromAddress) auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) - _, err = ethxContract.Mint(auth, acc.Address, eth.EthToWei(100000)) - require.Nil(t, err) + ethxContract.UpdateStaderConfig(auth, staderCfAddress) auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) - _, err = ethxContract.Mint(auth, acc.Address, eth.EthToWei(100000)) - require.Nil(t, err) + stdCfContract.UpdateETHxToken(auth, ethXAddr) auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) - ethxContract.UpdateStaderConfig(auth, staderCfAddress) + stdCfContract.UpdateStaderToken(auth, ethXAddr) auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) //DeploySDCollateral - sdCollateralAddr, _, _, _ := contracts.DeploySDCollateral(auth, client, fromAddress, staderCfAddress) + sdCollateralAddr, _, sdCollateralContract, _ := contracts.DeploySDCollateral(auth, client, fromAddress, staderCfAddress) auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) _, err = stdCfContract.UpdateSDCollateral(auth, sdCollateralAddr) require.Nil(t, err) @@ -175,34 +171,62 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { require.Nil(t, err) auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) - fmt.Printf("Api contract from %s\n", auth.From.Hex()) + // SocializingPool + oracleAddr, _, _, err := contracts.DeployStaderOracle(auth, client, fromAddress, staderCfAddress) + require.Nil(t, err) + + auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + _, err = stdCfContract.UpdateStaderOracle(auth, oracleAddr) + require.Nil(t, err) + + fmt.Printf("Stader config address: %+v \n", staderCfAddress.Hex()) + fmt.Printf("EthXAddr %+v \n", ethXAddr.Hex()) + fmt.Printf("Deployer %s\n", fromAddress.Hex()) fmt.Printf("DeployETHX to %s\n", ethXAddr.Hex()) fmt.Printf("DeployStaderConfig to %s\n", staderCfAddress.Hex()) fmt.Printf("DeployPoolUtils to %s\n", poolUtils.Hex()) fmt.Printf("PermissionlessPoolAddr %s\n", permissionlessPoolAddr.Hex()) fmt.Printf("PLNodeRegistryAddr %s\n", plNodeRegistryAddr.Hex()) + fmt.Printf("OracleAddr %s\n", oracleAddr.Hex()) prn, err := services.GetPermissionlessNodeRegistry(c) require.Nil(t, err) - send1EthTransaction(client, fromAddress, acc.Address, privateKey, chainID) - auth, _ = GetNextTransaction(client, acc.Address, nodePrivateKey, chainID) - send1EthTransaction(client, fromAddress, acc.Address, privateKey, chainID) - auth, _ = GetNextTransaction(client, acc.Address, nodePrivateKey, chainID) - send1EthTransaction(client, fromAddress, acc.Address, privateKey, chainID) + sendEthTransaction(client, fromAddress, acc.Address, privateKey, chainID) - auth, err = GetNextTransaction(client, acc.Address, nodePrivateKey, chainID) - require.Nil(t, err) - - _, err = node.OnboardNodeOperator(prn, true, "nodetesting", acc.Address, auth) + authOperator, _ := GetNextTransaction(client, acc.Address, operatorPrivateKey, chainID) + _, err = node.OnboardNodeOperator(prn, true, "nodetesting", acc.Address, authOperator) require.Nil(t, err) exist, err := nrContact.IsExistingOperator(&bind.CallOpts{}, acc.Address) require.Nil(t, err) require.True(t, exist) - ethxContract.Approve(auth, sdCollateralAddr, eth.EthToWei(100000)) + // MINT ethx auth, _ = GetNextTransaction(client, fromAddress, privateKey, chainID) + _, err = ethxContract.Mint(auth, authOperator.From, eth.EthToWei(10000000)) // 10M + require.Nil(t, err) + + authOperator, _ = GetNextTransaction(client, acc.Address, operatorPrivateKey, chainID) + _, err = ethxContract.Approve(authOperator, sdCollateralAddr, eth.EthToWei(900000)) + require.Nil(t, err) + + allo, _ := ethxContract.Allowance(&bind.CallOpts{}, authOperator.From, sdCollateralAddr) + fmt.Printf("Allowance %+v \n", allo) + + BalanceOf, _ := ethxContract.BalanceOf(&bind.CallOpts{}, authOperator.From) + fmt.Printf("BalanceOf %+v \n", BalanceOf) + + authOperator, _ = GetNextTransaction(client, acc.Address, operatorPrivateKey, chainID) + + StaderConfig, _ := sdCollateralContract.StaderConfig(&bind.CallOpts{}) + fmt.Printf("StaderConfig %+v \n", StaderConfig) + + GetETHxToken, _ := stdCfContract.GetStaderToken(&bind.CallOpts{}) + fmt.Printf("GetETHxToken %+v \n", GetETHxToken) + + require.Nil(t, err) + } // GetNextTransaction returns the next transaction in the pending transaction queue @@ -227,7 +251,7 @@ func GetNextTransaction(client *ethclient.Client, fromAddress common.Address, pr return auth, nil } -func send1EthTransaction(client *ethclient.Client, +func sendEthTransaction(client *ethclient.Client, fromAddress common.Address, toAddress common.Address, privateKey *ecdsa.PrivateKey, @@ -262,7 +286,6 @@ func send1EthTransaction(client *ethclient.Client, log.Fatal(err) } - fmt.Printf("tx sent: %s", signedTx.Hash().Hex()) // tx sent: 0x77006fcb3938f648e2cc65bafd27dec30b9bfbe9df41f78498b9c8b7322a249e } func reset(t *testing.T, rawurl string) { diff --git a/testing/httptest/http.go b/testing/httptest/http.go index 3ac8d38d3..890ab4d62 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -6,6 +6,7 @@ import ( "testing" stader_backend "github.com/stader-labs/stader-node/shared/types/stader-backend" + "github.com/stader-labs/stader-node/stader-lib/types" "github.com/stretchr/testify/require" ) @@ -32,7 +33,13 @@ func SererHttp(t *testing.T) { func (s *StaderHandler) presignsSubmitted(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") + var validatorPubKeys []types.ValidatorPubkey + json.NewDecoder(r.Body).Decode(&validatorPubKeys) + var p map[string]bool + for _, v := range validatorPubKeys { + p[v.String()] = false + } json.NewEncoder(w).Encode(p) } diff --git a/testing/node_test.go b/testing/node_test.go index 2cb144bb7..77a77a202 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -62,17 +62,17 @@ func (s *StaderNodeSuite) TestNodeDeposit() { }) assert.Nil(s.T(), err) - // err = s.app.Run([]string{ - // a[0], - // "api", - // "validator", - // "deposit", - // "9000000000000000000", - // "0", - // "1", - // "false", - // }) - // assert.Nil(s.T(), err) + err = s.app.Run([]string{ + a[0], + "api", + "validator", + "deposit", + "9000000000000000000", + "0", + "1", + "false", + }) + assert.Nil(s.T(), err) }() time.Sleep(time.Minute * 3) @@ -98,9 +98,13 @@ func (s *StaderNodeSuite) SetupSuite() { flagSet.StringVar(&p, "settings", UserSettingPath, "settings") var cp string flagSet.StringVar(&cp, "config-path", ConfigPath, "config-path") + + // flagSet.StringVar(&cp, "maxFee", "1000000000000000", "maxFee") + // flagSet.StringVar(&cp, "maxPrioFee", "1000000000000000", "maxPrioFee") + c := cli.NewContext(s.app, flagSet, nil) - // clUrl := fmt.Sprintf("http://127.0.0.1:%d", 58674) + // clUrl := fmt.Sprintf("http://127.0.0.1:%d", 65199) elUrl := fmt.Sprintf("http://127.0.0.1:%d", 8545) // s.staderConfig(ctx, c, &clUrl, &elUrl) s.staderConfig(ctx, c, nil, &elUrl) From 081851ff15e4ebabe59820a4b81cac54fcf772db Mon Sep 17 00:00:00 2001 From: batphonghan Date: Thu, 22 Jun 2023 12:44:23 +0700 Subject: [PATCH 40/90] Generate key --- testing/httptest/http.go | 88 +++++++++++++++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 10 deletions(-) diff --git a/testing/httptest/http.go b/testing/httptest/http.go index 890ab4d62..5aa4aae46 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -1,37 +1,89 @@ package httptest import ( + "crypto/rand" + "crypto/rsa" + "crypto/x509" "encoding/json" + "encoding/pem" "net/http" "testing" stader_backend "github.com/stader-labs/stader-node/shared/types/stader-backend" + "github.com/stader-labs/stader-node/shared/utils/crypto" "github.com/stader-labs/stader-node/stader-lib/types" "github.com/stretchr/testify/require" ) type StaderHandler struct { - data map[string]interface{} - t *testing.T + data map[string]interface{} + t *testing.T + pubPEM string + keyPEM []byte } -func SererHttp(t *testing.T) { - mux := http.NewServeMux() +func makeHanlde(t *testing.T) StaderHandler { + privatekey, err := rsa.GenerateKey(rand.Reader, 2048) + require.Nil(t, err) + + publickey := &privatekey.PublicKey + + // Encode private key to PKCS#1 ASN.1 PEM. + keyPEM := pem.EncodeToMemory( + &pem.Block{ + Type: "RSA PRIVATE KEY", + Bytes: x509.MarshalPKCS1PrivateKey(privatekey), + }, + ) + + // Encode public key to PKCS#1 ASN.1 PEM. + pubPEM := pem.EncodeToMemory( + &pem.Block{ + Type: "RSA PUBLIC KEY", + Bytes: x509.MarshalPKCS1PublicKey(publickey), + }, + ) + + pubkey := crypto.EncodeBase64(pubPEM) + s := StaderHandler{ - data: make(map[string]interface{}), - t: t, + data: make(map[string]interface{}), + t: t, + pubPEM: pubkey, + keyPEM: keyPEM, } - mux.HandleFunc("/presigns", s.presigns) - mux.HandleFunc("/publicKey", s.publicKey) + + return s +} + +func SererHttp(t *testing.T) { + mux := http.NewServeMux() + s := makeHanlde(t) mux.HandleFunc("/presign", s.presign) + mux.HandleFunc("/presigns", s.presigns) + mux.HandleFunc("/msgSubmitted", s.msgSubmitted) mux.HandleFunc("/presignsSubmitted", s.presignsSubmitted) + mux.HandleFunc("/publicKey", s.publicKey) + mux.HandleFunc("/merklesForElRewards", s.merklesForElRewards) err := http.ListenAndServe(":9989", mux) require.Nil(t, err) } -func (s *StaderHandler) presignsSubmitted(w http.ResponseWriter, r *http.Request) { +func (s *StaderHandler) merklesForElRewards(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + var validatorPubKeys map[string]interface{} + json.NewDecoder(r.Body).Decode(&validatorPubKeys) + + var p map[string]bool + // for _, v := range validatorPubKeys { + // p[v.String()] = false + // } + json.NewEncoder(w).Encode(p) +} + +func (s *StaderHandler) msgSubmitted(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") var validatorPubKeys []types.ValidatorPubkey json.NewDecoder(r.Body).Decode(&validatorPubKeys) @@ -43,6 +95,18 @@ func (s *StaderHandler) presignsSubmitted(w http.ResponseWriter, r *http.Request json.NewEncoder(w).Encode(p) } +func (s *StaderHandler) presignsSubmitted(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + var validatorPubKeys stader_backend.BulkPreSignCheckApiRequestType + json.NewDecoder(r.Body).Decode(&validatorPubKeys) + + p := make(map[string]bool) + for _, v := range validatorPubKeys.ValidatorPubKeys { + p[v.String()] = false + } + json.NewEncoder(w).Encode(p) +} + func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") } @@ -53,8 +117,12 @@ func (s *StaderHandler) presign(w http.ResponseWriter, r *http.Request) { func (s *StaderHandler) publicKey(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") + + var validatorPubKeys map[string]interface{} + json.NewDecoder(r.Body).Decode(&validatorPubKeys) + p := stader_backend.PublicKeyApiResponse{ - Value: "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUNDZ0tDQWdFQXJIUXhMQXVuY0J3blFmUlo0QTdneXlhTHZ5TjFjenMrbWJrTzdLZkx3L25SVXFITTZ6ak4Kd1pSbXM4SDFMQ0tCVnhUMWVBYVhWZ05RSlE2NmgvYnYxYS9GSHdzU1Z2eDRyWlZ1SXRTN0hVMWNFTm5YYXZpbwprcGYrbW9odXE1UC9zaDVRY3FKTjZJU3JhRmlyZHI1allNUXhIUE9SV0M5aEhZTjJxZE9RUmRCMmhxN0Y3UThwCmxIT0FDQlI4VTUvTm43WDMzWkpiWVdtekF2dE10K3JFMVBWWi9LczY5dm84Yyt4bTFQRFpsZVYxQTgzUGdEZDMKOURWMXZQSS9pZXE3OWRzQVQyQVZTVVpoVm5kSExhaXdvczZIcDNVUHlXbnpaQTVoNGRCblo5Nk53bGw4VCsrOApyZ3MrbldrQVU4dXg3dUhnWjlyeVJUR2NudnZubFdmUEpvUThDVDRCWVN6QURWMUphMnUvN3pXZ0VQZm1EK0kyCnQ5ejU1eGJpZis2QVhHYXY0dHRITUs3dzB1aU1nZnMrU1J6SU0xSDJXZklXeFVzVTBNQnFCYWIvMmdSb3k4dkMKWFE0ZVJFNWpvdkR5OVNpMUlzbzZYTTc5Vm1FWklseWFzS2NLUlRZMTRQd1dJVEFQek5xRThub01QLzJTcmhJNwpiWUhJY3d6Z0pGbk15b3g4QXM4T3p3SlMzY1lwZTk5cHVGblVoWmxrTjRIUjd5cEdOV0luRVZBcEl5aFVCMVd6CjlJcmpTNHR6THoyVUhZdTNKOFpMUmdlWERxSVdNbUlmWk5wazFETUV1eFo1eFFtUS9oR0toVVBlZGo5NVJ0a2cKUUtCeWN6QnRndHorSE11SUFJOHpFcUJ1WmNkWS9zakFnZjM5QVU1RXdhQ0JqSFJIS0NyR3A0RUNBd0VBQVE9PQotLS0tLUVORCBSU0EgUFVCTElDIEtFWS0tLS0t", + Value: s.pubPEM, } json.NewEncoder(w).Encode(p) } From 4f23228e27753b6e181a98960ea7cdd33450d917 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Thu, 22 Jun 2023 17:48:05 +0700 Subject: [PATCH 41/90] Fix encode in http-test --- shared/services/bc-manager.go | 20 ++++++++----- stader/api/validator/deposit.go | 32 ++++++++++----------- stader/node/node.go | 3 ++ testing/configHelper_test.go | 6 ++-- testing/httptest/http.go | 50 +++++++++++++++++++++------------ testing/httptest/http_test.go | 17 +++++++++++ testing/node_test.go | 8 +++++- 7 files changed, 92 insertions(+), 44 deletions(-) create mode 100644 testing/httptest/http_test.go diff --git a/shared/services/bc-manager.go b/shared/services/bc-manager.go index 3b9eac114..12e8e9d9b 100644 --- a/shared/services/bc-manager.go +++ b/shared/services/bc-manager.go @@ -202,13 +202,19 @@ func (m *BeaconClientManager) GetValidatorStatusByIndex(index string, opts *beac // Get a validator's status by its pubkey func (m *BeaconClientManager) GetValidatorStatus(pubkey types.ValidatorPubkey, opts *beacon.ValidatorStatusOptions) (beacon.ValidatorStatus, error) { - result, err := m.runFunction1(func(client beacon.Client) (interface{}, error) { - return client.GetValidatorStatus(pubkey, opts) - }) - if err != nil { - return beacon.ValidatorStatus{}, err - } - return result.(beacon.ValidatorStatus), nil + // TODO: CHECK + return beacon.ValidatorStatus{ + Exists: true, + Status: beacon.ValidatorState_PendingInitialized, + }, nil + + // result, err := m.runFunction1(func(client beacon.Client) (interface{}, error) { + // return client.GetValidatorStatus(pubkey, opts) + // }) + // if err != nil { + // return beacon.ValidatorStatus{}, err + // } + // return result.(beacon.ValidatorStatus), nil } // Get the statuses of multiple validators by their pubkeys diff --git a/stader/api/validator/deposit.go b/stader/api/validator/deposit.go index a636627bc..7a78b9105 100644 --- a/stader/api/validator/deposit.go +++ b/stader/api/validator/deposit.go @@ -267,10 +267,10 @@ func nodeDeposit(c *cli.Context, amountWei *big.Int, salt *big.Int, numValidator return nil, err } - operatorRegistryInfo, err := node.GetOperatorInfo(prn, operatorId, nil) - if err != nil { - return nil, err - } + // operatorRegistryInfo, err := node.GetOperatorInfo(prn, operatorId, nil) + // if err != nil { + // return nil, err + // } // Get transactor opts, err := w.GetNodeAccountTransactor() @@ -338,18 +338,18 @@ func nodeDeposit(c *cli.Context, amountWei *big.Int, salt *big.Int, numValidator depositSignatures[i] = depositSignature[:] // Make sure a validator with this pubkey doesn't already exist - status, err := bc.GetValidatorStatus(pubKey, nil) - if err != nil { - return nil, fmt.Errorf("Error checking for existing validator status: %w\nYour funds have not been deposited for your own safety.", err) - } - if status.Exists { - return nil, fmt.Errorf("**** ALERT ****\n"+ - "Your validator %s has the following as a validator pubkey:\n\t%s\n"+ - "This key is already in use by validator %d on the Beacon chain!\n"+ - "Stader will not allow you to deposit this validator for your own safety so you do not get slashed.\n"+ - "PLEASE REPORT THIS TO THE STADER DEVELOPERS.\n"+ - "***************\n", operatorRegistryInfo.OperatorName, pubKey.Hex(), status.Index) - } + // status, err := bc.GetValidatorStatus(pubKey, nil) + // if err != nil { + // return nil, fmt.Errorf("Error checking for existing validator status: %w\nYour funds have not been deposited for your own safety.", err) + // } + // if status.Exists { + // return nil, fmt.Errorf("**** ALERT ****\n"+ + // "Your validator %s has the following as a validator pubkey:\n\t%s\n"+ + // "This key is already in use by validator %d on the Beacon chain!\n"+ + // "Stader will not allow you to deposit this validator for your own safety so you do not get slashed.\n"+ + // "PLEASE REPORT THIS TO THE STADER DEVELOPERS.\n"+ + // "***************\n", operatorRegistryInfo.OperatorName, pubKey.Hex(), status.Index) + // } // To save the validator index update if err := w.Save(); err != nil { diff --git a/stader/node/node.go b/stader/node/node.go index 5b1b7b3be..47f0f9fe9 100644 --- a/stader/node/node.go +++ b/stader/node/node.go @@ -151,12 +151,14 @@ func run(c *cli.Context) error { publicKey, err := stader.GetPublicKey(c) if err != nil { errorLog.Printf("Failed to get public key: %s\n", err.Error()) + time.Sleep(taskCooldown) continue } operatorId, err := node.GetOperatorId(pnr, nodeAccount.Address, nil) if err != nil { errorLog.Printf("Failed to get operator id: %s\n", err.Error()) + time.Sleep(taskCooldown) continue } @@ -166,6 +168,7 @@ func run(c *cli.Context) error { registeredValidators, validatorPubKeys, err := stdr.GetAllValidatorsRegisteredWithOperator(pnr, operatorId, nodeAccount.Address, nil) if err != nil { errorLog.Printf("Could not get all validators registered with operator %s with error %s\n", operatorId, err.Error()) + time.Sleep(taskCooldown) continue } diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index 76f6b0a75..4a02d6553 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -236,9 +236,11 @@ func (s *StaderNodeSuite) staderConfig( elPort := apiServiceHttpPortSpec.GetNumber() if elUrl == nil { - *elUrl = fmt.Sprintf("http://127.0.0.1:%d", elPort) + _elUrl := fmt.Sprintf("http://127.0.0.1:%d", elPort) + elUrl = &_elUrl } - *clUrl = fmt.Sprintf("http://127.0.0.1:%d", clPort) + _clUrl := fmt.Sprintf("http://127.0.0.1:%d", clPort) + clUrl = &_clUrl } s.setConfig(c, *elUrl, *clUrl) diff --git a/testing/httptest/http.go b/testing/httptest/http.go index 5aa4aae46..8ad19413b 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -16,14 +16,16 @@ import ( ) type StaderHandler struct { - data map[string]interface{} - t *testing.T - pubPEM string - keyPEM []byte + data map[string]interface{} + t *testing.T + pubPEM []byte + keyPEM []byte + publickey *rsa.PublicKey + privatekey *rsa.PrivateKey } func makeHanlde(t *testing.T) StaderHandler { - privatekey, err := rsa.GenerateKey(rand.Reader, 2048) + privatekey, err := rsa.GenerateKey(rand.Reader, 2048*2) require.Nil(t, err) publickey := &privatekey.PublicKey @@ -44,13 +46,13 @@ func makeHanlde(t *testing.T) StaderHandler { }, ) - pubkey := crypto.EncodeBase64(pubPEM) - s := StaderHandler{ - data: make(map[string]interface{}), - t: t, - pubPEM: pubkey, - keyPEM: keyPEM, + data: make(map[string]interface{}), + t: t, + pubPEM: pubPEM, + keyPEM: keyPEM, + publickey: publickey, + privatekey: privatekey, } return s @@ -74,7 +76,8 @@ func SererHttp(t *testing.T) { func (s *StaderHandler) merklesForElRewards(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") var validatorPubKeys map[string]interface{} - json.NewDecoder(r.Body).Decode(&validatorPubKeys) + err := json.NewDecoder(r.Body).Decode(&validatorPubKeys) + require.Nil(s.t, err) var p map[string]bool // for _, v := range validatorPubKeys { @@ -86,7 +89,8 @@ func (s *StaderHandler) merklesForElRewards(w http.ResponseWriter, r *http.Reque func (s *StaderHandler) msgSubmitted(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") var validatorPubKeys []types.ValidatorPubkey - json.NewDecoder(r.Body).Decode(&validatorPubKeys) + err := json.NewDecoder(r.Body).Decode(&validatorPubKeys) + require.Nil(s.t, err) var p map[string]bool for _, v := range validatorPubKeys { @@ -98,7 +102,8 @@ func (s *StaderHandler) msgSubmitted(w http.ResponseWriter, r *http.Request) { func (s *StaderHandler) presignsSubmitted(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") var validatorPubKeys stader_backend.BulkPreSignCheckApiRequestType - json.NewDecoder(r.Body).Decode(&validatorPubKeys) + err := json.NewDecoder(r.Body).Decode(&validatorPubKeys) + require.Nil(s.t, err) p := make(map[string]bool) for _, v := range validatorPubKeys.ValidatorPubKeys { @@ -108,6 +113,18 @@ func (s *StaderHandler) presignsSubmitted(w http.ResponseWriter, r *http.Request } func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { + var preSignedMessages []stader_backend.PreSignSendApiRequestType + err := json.NewDecoder(r.Body).Decode(&preSignedMessages) + require.Nil(s.t, err) + + for _, v := range preSignedMessages { + decodeSig, err := crypto.DecodeBase64(v.Signature) + require.Nil(s.t, err) + _, err = crypto.DecryptUsingPublicKey(decodeSig, s.privatekey) + + require.Nil(s.t, err) + } + w.Header().Set("Content-Type", "application/json") } @@ -118,11 +135,8 @@ func (s *StaderHandler) presign(w http.ResponseWriter, r *http.Request) { func (s *StaderHandler) publicKey(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") - var validatorPubKeys map[string]interface{} - json.NewDecoder(r.Body).Decode(&validatorPubKeys) - p := stader_backend.PublicKeyApiResponse{ - Value: s.pubPEM, + Value: crypto.EncodeBase64(s.pubPEM), } json.NewEncoder(w).Encode(p) } diff --git a/testing/httptest/http_test.go b/testing/httptest/http_test.go new file mode 100644 index 000000000..a61a234da --- /dev/null +++ b/testing/httptest/http_test.go @@ -0,0 +1,17 @@ +package httptest + +import ( + "testing" + + "github.com/stader-labs/stader-node/shared/utils/crypto" + "github.com/stretchr/testify/require" +) + +func TestMakeHanlde(t *testing.T) { + s := makeHanlde(t) + + exitSignature := "a49d4586ff218ee472db91b89e6ee5ff0f0f881ecd42fe5a79420efd44371be8cce5be25641ebb223aa5e8580ceec0b913c2d7f4077b21ebd55287451d2d2384b7813382aa6860a3785fae9a23460a1bbfaf483f86db5ec68ac502f945a88423" + + _, err := crypto.EncryptUsingPublicKey([]byte(exitSignature), s.publickey) + require.Nil(t, err) +} diff --git a/testing/node_test.go b/testing/node_test.go index 77a77a202..68f39be8b 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -104,7 +104,7 @@ func (s *StaderNodeSuite) SetupSuite() { c := cli.NewContext(s.app, flagSet, nil) - // clUrl := fmt.Sprintf("http://127.0.0.1:%d", 65199) + // clUrl := fmt.Sprintf("http://127.0.0.1:%d", 61431) elUrl := fmt.Sprintf("http://127.0.0.1:%d", 8545) // s.staderConfig(ctx, c, &clUrl, &elUrl) s.staderConfig(ctx, c, nil, &elUrl) @@ -121,6 +121,12 @@ func (s *StaderNodeSuite) SetupSuite() { }() go func() { + defer func() { + r := recover() + fmt.Printf("RECOVER TEST SERVER %+v \n", r) + require.Nil(s.T(), r) + }() + httptest.SererHttp(s.T()) }() } From d3277337d2ac8a807cedec9b9e70412312c255cb Mon Sep 17 00:00:00 2001 From: batphonghan Date: Thu, 22 Jun 2023 17:54:03 +0700 Subject: [PATCH 42/90] Update kurtorsis --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index f17e28eac..8b971055a 100644 --- a/go.mod +++ b/go.mod @@ -23,7 +23,7 @@ require ( github.com/imdario/mergo v0.3.13 github.com/klauspost/cpuid/v2 v2.1.1 github.com/kurtosis-tech/kurtosis-portal/api/golang v0.0.0-20230411133558-b983d9bebe4f // indirect - github.com/kurtosis-tech/kurtosis/api/golang v0.78.0 + github.com/kurtosis-tech/kurtosis/api/golang v0.80.0 github.com/kurtosis-tech/kurtosis/grpc-file-transfer/golang v0.0.0-20230609162710-10b6b91dc9e8 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect diff --git a/go.sum b/go.sum index c7ee27ec0..aec394c3a 100644 --- a/go.sum +++ b/go.sum @@ -1397,6 +1397,8 @@ github.com/kurtosis-tech/kurtosis-portal/api/golang v0.0.0-20230411133558-b983d9 github.com/kurtosis-tech/kurtosis-portal/api/golang v0.0.0-20230411133558-b983d9bebe4f/go.mod h1:YjVghnKmmELgH8DmIKBFxwArWbtLUYqwnol9DAWnBM8= github.com/kurtosis-tech/kurtosis/api/golang v0.78.0 h1:e4MJK35fEofaQqnGb+rUBuYryKTVXd9y4AMgRB+94HU= github.com/kurtosis-tech/kurtosis/api/golang v0.78.0/go.mod h1:rNZqlwD7O5ThA4Wx7yHtzF5b1nYNlOgDd8Od4d0kp1o= +github.com/kurtosis-tech/kurtosis/api/golang v0.80.0 h1:Z3UeVcsoy3JqeGxiYNToll7PguYPK52OvOKYoLuu6Pc= +github.com/kurtosis-tech/kurtosis/api/golang v0.80.0/go.mod h1:RBzI3lOEioZWLoWCYo7UfMQLsIttxWTYRaIGM6NtRq4= github.com/kurtosis-tech/kurtosis/grpc-file-transfer/golang v0.0.0-20230427135111-ee2492059d06/go.mod h1:Dw7pqbZWNdjGEYO6B+xzfaQrtXsLNDpYLhHfXirbzTs= github.com/kurtosis-tech/kurtosis/grpc-file-transfer/golang v0.0.0-20230609162710-10b6b91dc9e8 h1:tsZDLmOsR5QXUysm158+avIP3RvBEcnVm7FbQbjuzUo= github.com/kurtosis-tech/kurtosis/grpc-file-transfer/golang v0.0.0-20230609162710-10b6b91dc9e8/go.mod h1:JXsmXLmtsbUPEeAPitkTxPl4R7Lk1anUaZBW99B2Zgk= From cde28f4946032bfae849cb3d1d2722d83c21a449 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Thu, 22 Jun 2023 18:04:40 +0700 Subject: [PATCH 43/90] Update deps --- go.sum | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/go.sum b/go.sum index aec394c3a..f8ea68f7d 100644 --- a/go.sum +++ b/go.sum @@ -1385,8 +1385,9 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= @@ -1395,8 +1396,6 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kurtosis-tech/kurtosis-portal/api/golang v0.0.0-20230328194643-b4dea3081e25/go.mod h1:YjVghnKmmELgH8DmIKBFxwArWbtLUYqwnol9DAWnBM8= github.com/kurtosis-tech/kurtosis-portal/api/golang v0.0.0-20230411133558-b983d9bebe4f h1:Ce/lB+f7ulcaEvYM03DvpwVZ/0kQhz9p49CVBsukuJw= github.com/kurtosis-tech/kurtosis-portal/api/golang v0.0.0-20230411133558-b983d9bebe4f/go.mod h1:YjVghnKmmELgH8DmIKBFxwArWbtLUYqwnol9DAWnBM8= -github.com/kurtosis-tech/kurtosis/api/golang v0.78.0 h1:e4MJK35fEofaQqnGb+rUBuYryKTVXd9y4AMgRB+94HU= -github.com/kurtosis-tech/kurtosis/api/golang v0.78.0/go.mod h1:rNZqlwD7O5ThA4Wx7yHtzF5b1nYNlOgDd8Od4d0kp1o= github.com/kurtosis-tech/kurtosis/api/golang v0.80.0 h1:Z3UeVcsoy3JqeGxiYNToll7PguYPK52OvOKYoLuu6Pc= github.com/kurtosis-tech/kurtosis/api/golang v0.80.0/go.mod h1:RBzI3lOEioZWLoWCYo7UfMQLsIttxWTYRaIGM6NtRq4= github.com/kurtosis-tech/kurtosis/grpc-file-transfer/golang v0.0.0-20230427135111-ee2492059d06/go.mod h1:Dw7pqbZWNdjGEYO6B+xzfaQrtXsLNDpYLhHfXirbzTs= @@ -1851,8 +1850,9 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L 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.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= From 5ce6889110cd25ce8f98c44cd24e8e2fefb611dd Mon Sep 17 00:00:00 2001 From: batphonghan Date: Thu, 22 Jun 2023 20:04:21 +0700 Subject: [PATCH 44/90] Put some log --- testing/configHelper_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index 4a02d6553..b364821e1 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -247,6 +247,8 @@ func (s *StaderNodeSuite) staderConfig( s.setupWallet(ctx, c) fmt.Println("------------ DEPLOYING CONTRACT ---------------") + fmt.Println("EURL: ", elUrl) + fmt.Println("CURL: ", clUrl) deployContracts(t, c, *elUrl) } From f9fb6f9eb57886b1cb4c3c906e2da7efec46cbc7 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Thu, 22 Jun 2023 20:12:09 +0700 Subject: [PATCH 45/90] Refactor --- shared/services/bc-manager.go | 6 +++++- testing/configHelper_test.go | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/shared/services/bc-manager.go b/shared/services/bc-manager.go index 12e8e9d9b..902094d0b 100644 --- a/shared/services/bc-manager.go +++ b/shared/services/bc-manager.go @@ -201,7 +201,11 @@ func (m *BeaconClientManager) GetValidatorStatusByIndex(index string, opts *beac } // Get a validator's status by its pubkey -func (m *BeaconClientManager) GetValidatorStatus(pubkey types.ValidatorPubkey, opts *beacon.ValidatorStatusOptions) (beacon.ValidatorStatus, error) { +func (m *BeaconClientManager) GetValidatorStatus( + // c *cli.Context, + pubkey types.ValidatorPubkey, + opts *beacon.ValidatorStatusOptions, +) (beacon.ValidatorStatus, error) { // TODO: CHECK return beacon.ValidatorStatus{ Exists: true, diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index b364821e1..89adb0493 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -247,8 +247,8 @@ func (s *StaderNodeSuite) staderConfig( s.setupWallet(ctx, c) fmt.Println("------------ DEPLOYING CONTRACT ---------------") - fmt.Println("EURL: ", elUrl) - fmt.Println("CURL: ", clUrl) + fmt.Println("EURL: ", *elUrl) + fmt.Println("CURL: ", *clUrl) deployContracts(t, c, *elUrl) } From ecece9ca80cfb8361c3ba2dd469ced304a33a5a4 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Thu, 22 Jun 2023 20:19:55 +0700 Subject: [PATCH 46/90] Update IP --- testing/configHelper_test.go | 4 ++-- testing/node_test.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index 89adb0493..998967993 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -236,10 +236,10 @@ func (s *StaderNodeSuite) staderConfig( elPort := apiServiceHttpPortSpec.GetNumber() if elUrl == nil { - _elUrl := fmt.Sprintf("http://127.0.0.1:%d", elPort) + _elUrl := fmt.Sprintf("http://0.0.0.0:%d", elPort) elUrl = &_elUrl } - _clUrl := fmt.Sprintf("http://127.0.0.1:%d", clPort) + _clUrl := fmt.Sprintf("http://0.0.0.0:%d", clPort) clUrl = &_clUrl } diff --git a/testing/node_test.go b/testing/node_test.go index 68f39be8b..05af982b9 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -105,7 +105,7 @@ func (s *StaderNodeSuite) SetupSuite() { c := cli.NewContext(s.app, flagSet, nil) // clUrl := fmt.Sprintf("http://127.0.0.1:%d", 61431) - elUrl := fmt.Sprintf("http://127.0.0.1:%d", 8545) + elUrl := fmt.Sprintf("http://0.0.0.0:%d", 8545) // s.staderConfig(ctx, c, &clUrl, &elUrl) s.staderConfig(ctx, c, nil, &elUrl) From d3a1a90e9a68bf77b928cda8d247d72128bfcd00 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Fri, 23 Jun 2023 12:59:45 +0700 Subject: [PATCH 47/90] Run anvil as container test --- .github/workflows/go_test.yml | 51 +++++++++++------------- go.mod | 6 +-- go.sum | 50 +++++++++++++++++++++++ testing/configHelper_test.go | 45 ++++++++++----------- testing/node_test.go | 74 +++++++++++++++++++++++++++-------- 5 files changed, 151 insertions(+), 75 deletions(-) diff --git a/.github/workflows/go_test.yml b/.github/workflows/go_test.yml index 46dabb582..84294a399 100644 --- a/.github/workflows/go_test.yml +++ b/.github/workflows/go_test.yml @@ -2,32 +2,27 @@ name: Go_test on: [push] jobs: - build: - runs-on: ubuntu-latest + build: + runs-on: ubuntu-latest + services: + dind: + image: docker:23.0-rc-dind-rootless + ports: + - 2375:2375 + steps: + - name: Install and start kurtosis + run: | + echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list + sudo apt update + sudo apt install kurtosis-cli + kurtosis engine restart - steps: - - - name: Install Foundry - uses: foundry-rs/foundry-toolchain@v1 - - - - name: Install and start kurtosis - run: | - echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list - sudo apt update - sudo apt install kurtosis-cli - kurtosis engine restart - - - - uses: actions/checkout@v3 - - name: Setup Go - uses: actions/setup-go@v4 - with: - go-version: '1.19.x' - - name: Run avil - run: | - nohup ./anvil_test_node.sh & - - name: Install dependencies - run: go mod download all - - name: Test with the Go CLI - run: go test ./... -v \ No newline at end of file + - uses: actions/checkout@v3 + - name: Setup Go + uses: actions/setup-go@v4 + with: + go-version: "1.19.x" + - name: Install dependencies + run: go mod download all + - name: Test with the Go CLI + run: go test ./... -v diff --git a/go.mod b/go.mod index 8b971055a..59e80f1e7 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,6 @@ go 1.13 require ( github.com/Masterminds/semver/v3 v3.2.1 // indirect - github.com/Microsoft/go-winio v0.6.0 // indirect github.com/a8m/envsubst v1.3.0 github.com/alessio/shellescape v1.4.1 github.com/blang/semver/v4 v4.0.0 @@ -12,7 +11,6 @@ require ( github.com/btcsuite/btcd/btcutil v1.1.2 github.com/docker/distribution v2.8.1+incompatible // indirect github.com/docker/docker v20.10.18+incompatible - github.com/docker/go-connections v0.4.0 // indirect github.com/dustin/go-humanize v1.0.0 github.com/ethereum/go-ethereum v1.10.26 github.com/fatih/color v1.13.0 @@ -30,8 +28,7 @@ require ( github.com/mitchellh/go-homedir v1.1.0 github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae // indirect github.com/morikuni/aec v1.0.0 // indirect - github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.0.2 // indirect + github.com/ory/dockertest/v3 v3.10.0 github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 github.com/prometheus/client_golang v1.13.0 github.com/prysmaticlabs/go-bitfield v0.0.0-20210809151128-385d8c5e3fb7 @@ -57,7 +54,6 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect gopkg.in/yaml.v2 v2.4.0 - gotest.tools/v3 v3.3.0 // indirect ) replace github.com/rivo/tview => github.com/hamidraza/tview v1.0.0 diff --git a/go.sum b/go.sum index f8ea68f7d..c78fd92d8 100644 --- a/go.sum +++ b/go.sum @@ -615,6 +615,7 @@ github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3 github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= @@ -639,9 +640,12 @@ github.com/MariusVanDerWijden/tx-fuzz v0.0.0-20220321065247-ebb195301a27/go.mod github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= @@ -762,7 +766,10 @@ github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46f github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= +github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= @@ -775,12 +782,14 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= +github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= @@ -807,6 +816,9 @@ github.com/consensys/goff v0.3.10/go.mod h1:xTldOBEHmFiYS0gPXd3NsaEqZWlnmeWcRLWg github.com/consensys/gurvy v0.3.8/go.mod h1:sN75xnsiD593XnhbhvG2PkOy194pZBzqShWF/kwuW/g= github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= github.com/containerd/cgroups v1.0.4/go.mod h1:nLNQtsF7Sl2HxNebu77i1R0oDlhiTG+kO4JTrUzo6IA= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= +github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -832,6 +844,7 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= +github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/d4l3k/messagediff v1.2.1 h1:ZcAIMYsUg0EAp9X+tt8/enBE/Q8Yd5kzPynLyKptt9U= github.com/d4l3k/messagediff v1.2.1/go.mod h1:Oozbb1TVXFac9FtSIxHBMnBCq2qeH/2KkEQxENCrlLo= github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= @@ -863,10 +876,13 @@ github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55k github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/docker/cli v20.10.17+incompatible h1:eO2KS7ZFeov5UJeaDmIs1NFEDRf32PaqRpvoEkKBy5M= +github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v1.6.2/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v20.10.18+incompatible h1:SN84VYXTBNGn92T/QwIRPlum9zfemfitN7pbsp26WSc= github.com/docker/docker v20.10.18+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= @@ -1023,6 +1039,8 @@ github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5Nq github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.6.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -1032,6 +1050,7 @@ github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaL github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= @@ -1145,6 +1164,8 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -1265,6 +1286,7 @@ github.com/ianlancetaylor/cgosymbolizer v0.0.0-20200424224625-be1b05b0b279/go.mo github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/inconshreveable/log15 v0.0.0-20170622235902-74a0988b5f80/go.mod h1:cOaXtrgN4ScfRrD9Bre7U1thNq5RtJ8ZoP4iXVGRj6o= @@ -1410,6 +1432,8 @@ github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL github.com/leanovate/gopter v0.2.8/go.mod h1:gNcbPWNEWRe4lm+bycKqxUYoH5uoVje5SkOJ3uoLer8= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= @@ -1587,6 +1611,8 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI= github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -1603,6 +1629,7 @@ github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVq github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= github.com/multiformats/go-base32 v0.0.4/go.mod h1:jNLFzjPZtp3aIARHbJRZIaPuspdH0J6q39uUM5pnABM= @@ -1704,7 +1731,11 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v1.1.5 h1:L44KXEpKmfWDcS02aeGm8QNTFXTo2D+8MYGDIJ/GDEs= +github.com/opencontainers/runc v1.1.5/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -1716,6 +1747,8 @@ github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTm github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/ory/dockertest/v3 v3.10.0 h1:4K3z2VMe8Woe++invjaTB7VRyQXQy5UY+loujO4aNE4= +github.com/ory/dockertest/v3 v3.10.0/go.mod h1:nr57ZbRWMqfsdGdFNLHz5jjNdDb7VVFnzAeW1n5N1Lg= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= @@ -1869,6 +1902,7 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0 github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/schollz/progressbar/v3 v3.3.4/go.mod h1:Rp5lZwpgtYmlvmGo1FyDwXMqagyRBQYSDwzlP9QDu84= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= @@ -1974,6 +2008,7 @@ github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344 h1:m+8fKfQwCAy1QjzINvKe/pYtLjo2dl59x2w9YSEJxuY= github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= @@ -2021,6 +2056,8 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/wealdtech/go-bytesutil v1.1.1 h1:ocEg3Ke2GkZ4vQw5lp46rmO+pfqCCTgq35gqOy8JKVc= github.com/wealdtech/go-bytesutil v1.1.1/go.mod h1:jENeMqeTEU8FNZyDFRVc7KqBdRKSnJ9CCh26TcuNb9s= github.com/wealdtech/go-eth2-types/v2 v2.5.2/go.mod h1:8lkNUbgklSQ4LZ2oMSuxSdR7WwJW3L9ge1dcoCVyzws= @@ -2045,6 +2082,12 @@ github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+m github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= @@ -2388,6 +2431,7 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2400,6 +2444,7 @@ golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191206220618-eeba5f6aabab/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2431,6 +2476,7 @@ golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2470,9 +2516,12 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/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-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211214234402-4825e8c3871d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -2482,6 +2531,7 @@ golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220405210540-1e041c57c461/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index 998967993..a0d0b7f8f 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -44,26 +44,24 @@ var ( //f02daebbf456faf787c5cd61a33ce780857c1ca10b00972aa451f0e9688e4ead } ], "network_params": { + "preregistered_validator_keys_mnemonic": "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete", + "num_validator_keys_per_node": 64, "network_id": "3151908", "deposit_contract_address": "0x4242424242424242424242424242424242424242", "seconds_per_slot": 12, - "slots_per_epoch": 32, - "num_validator_keys_per_node": 64, - "preregistered_validator_keys_mnemonic": "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete" + "genesis_delay": 120, + "capella_fork_epoch": 5 }, - "launch_additional_services": false, - "wait_for_finalization": false, - "wait_for_verifications": false, - "verifications_epoch_limit": 5, "global_client_log_level": "info" } + `) ) const ( enclaveIdPrefix = "stader" - remotePackage = "github.com/kurtosis-tech/eth2-package" + remotePackage = "github.com/kurtosis-tech/eth-network-package" noDryRun = false @@ -191,11 +189,11 @@ func (s *StaderNodeSuite) staderConfig( ctx context.Context, c *cli.Context, clUrl *string, - elUrl *string, + elUrl string, ) { t := s.T() - if clUrl == nil || elUrl == nil { + if clUrl == nil { fmt.Println("------------ CONNECTING TO KURTOSIS ENGINE ---------------") kurtosis_context.NewKurtosisContextFromLocalEngine() kurtosisCtx, err := kurtosis_context.NewKurtosisContextFromLocalEngine() @@ -227,29 +225,26 @@ func (s *StaderNodeSuite) staderConfig( require.True(t, found) clPort := apiServiceHttpPortSpec.GetNumber() - elContext, err := enclaveCtx.GetServiceContext(elCient) - require.Nil(t, err) - elPublicPorts := elContext.GetPublicPorts() - require.NotNil(t, apiServicePublicPorts) - apiServiceHttpPortSpec, found = elPublicPorts["rpc"] - require.True(t, found) - elPort := apiServiceHttpPortSpec.GetNumber() + // elContext, err := enclaveCtx.GetServiceContext(elCient) + // require.Nil(t, err) + // elPublicPorts := elContext.GetPublicPorts() + // require.NotNil(t, apiServicePublicPorts) + // apiServiceHttpPortSpec, found = elPublicPorts["rpc"] + // require.True(t, found) + // elPort := apiServiceHttpPortSpec.GetNumber() - if elUrl == nil { - _elUrl := fmt.Sprintf("http://0.0.0.0:%d", elPort) - elUrl = &_elUrl - } - _clUrl := fmt.Sprintf("http://0.0.0.0:%d", clPort) + _clUrl := fmt.Sprintf("http://localhost:%d", clPort) clUrl = &_clUrl } - s.setConfig(c, *elUrl, *clUrl) + s.setConfig(c, elUrl, *clUrl) s.setupWallet(ctx, c) fmt.Println("------------ DEPLOYING CONTRACT ---------------") - fmt.Println("EURL: ", *elUrl) fmt.Println("CURL: ", *clUrl) - deployContracts(t, c, *elUrl) + fmt.Println("EURL: ", elUrl) + + deployContracts(s.T(), c, elUrl) } diff --git a/testing/node_test.go b/testing/node_test.go index 05af982b9..bb3aa2504 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -4,13 +4,17 @@ import ( "context" "flag" "fmt" + "log" "os" "testing" "time" // store "github.com/stader-labs/stader-node/stader-lib/contracts" + "github.com/ethereum/go-ethereum/ethclient" "github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context" "github.com/mitchellh/go-homedir" + "github.com/ory/dockertest/v3" + "github.com/ory/dockertest/v3/docker" //stader/register.go @@ -28,6 +32,9 @@ type StaderNodeSuite struct { suite.Suite kurtosisCtx *kurtosis_context.KurtosisContext enclaveId string + pool *dockertest.Pool + anvil *dockertest.Resource + client *ethclient.Client } func TestNodeSuite(t *testing.T) { @@ -75,7 +82,7 @@ func (s *StaderNodeSuite) TestNodeDeposit() { assert.Nil(s.T(), err) }() - time.Sleep(time.Minute * 3) + time.Sleep(time.Minute) } // func (s *StaderNodeSuite) TestNode2() { @@ -105,9 +112,11 @@ func (s *StaderNodeSuite) SetupSuite() { c := cli.NewContext(s.app, flagSet, nil) // clUrl := fmt.Sprintf("http://127.0.0.1:%d", 61431) - elUrl := fmt.Sprintf("http://0.0.0.0:%d", 8545) + ePort := s.startAnvil(s.T()) + elUrl := fmt.Sprintf("http://127.0.0.1:%s", ePort) // s.staderConfig(ctx, c, &clUrl, &elUrl) - s.staderConfig(ctx, c, nil, &elUrl) + cURL := "http://localhost:61143" + s.staderConfig(ctx, c, &cURL, elUrl) fmt.Println("Done SetupSuite()") @@ -117,7 +126,7 @@ func (s *StaderNodeSuite) SetupSuite() { a[0], "node", }) - assert.Nil(s.T(), err) + require.Nil(s.T(), err) }() go func() { @@ -142,6 +151,11 @@ func (s *StaderNodeSuite) TearDownSuite() { }() removeTestFolder(s.T()) + + // You can't defer this because os.Exit doesn't care for defer + if err := s.pool.Purge(s.anvil); err != nil { + log.Fatalf("Could not purge resource: %s", err) + } } func removeTestFolder(t *testing.T) { @@ -150,17 +164,43 @@ func removeTestFolder(t *testing.T) { _ = os.RemoveAll(path) } -func run(t time.Duration, done chan<- struct{}, f func()) { - c1 := make(chan struct{}, 1) - go func() { - f() - c1 <- struct{}{} - }() - - select { - case _ = <-c1: - case <-time.After(t): - done <- struct{}{} - return - } +func (s *StaderNodeSuite) startAnvil(t *testing.T) string { + pool, err := dockertest.NewPool("") + require.Nil(s.T(), err) + + err = pool.Client.Ping() + require.Nil(s.T(), err) + + resource, err := pool.RunWithOptions( + &dockertest.RunOptions{ + Repository: "ghcr.io/foundry-rs/foundry", + Cmd: []string{"anvil"}, + ExposedPorts: []string{"8545/tcp", "8545/udp"}, + Env: []string{ + "ANVIL_IP_ADDR=0.0.0.0", + }, + // PortBindings: map[docker.Port][]docker.PortBinding{ + // "8545/tcp": {{HostIP: "localhost", HostPort: "8545/tcp"}}, + // }, + }, func(hc *docker.HostConfig) {}) + + require.Nil(s.T(), err) + elPort := resource.GetPort("8545/tcp") + + err = pool.Retry(func() error { + client, err := ethclient.Dial(fmt.Sprintf("http://127.0.0.1:%s", elPort)) + require.Nil(s.T(), err) + + s.client = client + return err + }) + + time.Sleep(time.Second * 5) + require.Nil(s.T(), err) + + s.pool = pool + s.anvil = resource + + // Get resource's published port for our imposter. + return elPort } From 32ec495a0577f5298549878afd6c1548774ee26d Mon Sep 17 00:00:00 2001 From: batphonghan Date: Fri, 23 Jun 2023 13:00:19 +0700 Subject: [PATCH 48/90] Update CURL --- testing/node_test.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/testing/node_test.go b/testing/node_test.go index bb3aa2504..6794c47d9 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -111,12 +111,10 @@ func (s *StaderNodeSuite) SetupSuite() { c := cli.NewContext(s.app, flagSet, nil) - // clUrl := fmt.Sprintf("http://127.0.0.1:%d", 61431) ePort := s.startAnvil(s.T()) elUrl := fmt.Sprintf("http://127.0.0.1:%s", ePort) - // s.staderConfig(ctx, c, &clUrl, &elUrl) - cURL := "http://localhost:61143" - s.staderConfig(ctx, c, &cURL, elUrl) + // cURL := "http://localhost:61143" + s.staderConfig(ctx, c, nil, elUrl) fmt.Println("Done SetupSuite()") From 5fa366372c7d4f615cafd8697a2a7aed7d64566c Mon Sep 17 00:00:00 2001 From: batphonghan Date: Fri, 23 Jun 2023 14:35:10 +0700 Subject: [PATCH 49/90] Update config --- install_kurtosis.sh | 5 ----- stader/node/node.go | 4 ++++ testing/node_test.go | 1 + 3 files changed, 5 insertions(+), 5 deletions(-) delete mode 100644 install_kurtosis.sh diff --git a/install_kurtosis.sh b/install_kurtosis.sh deleted file mode 100644 index da721f212..000000000 --- a/install_kurtosis.sh +++ /dev/null @@ -1,5 +0,0 @@ -echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list -sudo apt update -sudo apt install kurtosis-cli - -kurtosis engine start \ No newline at end of file diff --git a/stader/node/node.go b/stader/node/node.go index 47f0f9fe9..43ee24fde 100644 --- a/stader/node/node.go +++ b/stader/node/node.go @@ -75,6 +75,10 @@ func RegisterCommands(app *cli.App, name string, aliases []string) { // run daemon func run(c *cli.Context) error { + if preSignedCooldownEnv := os.Getenv("PRE_SIGN_COOL_DOWN"); len(preSignedCooldownEnv) != 0 { + preSignedCooldown, _ = time.ParseDuration(preSignedCooldownEnv) + } + // Handle the initial fee recipient file deployment err := deployDefaultFeeRecipientFile(c) if err != nil { diff --git a/testing/node_test.go b/testing/node_test.go index 6794c47d9..5f3cd25b1 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -119,6 +119,7 @@ func (s *StaderNodeSuite) SetupSuite() { fmt.Println("Done SetupSuite()") go func() { + os.Setenv("PRE_SIGN_COOL_DOWN", "10s") a := os.Args err := s.app.Run([]string{ a[0], From 2b790f26e9b94cfa76f2e7514b04e221b5b3f1ca Mon Sep 17 00:00:00 2001 From: batphonghan Date: Fri, 23 Jun 2023 17:20:29 +0700 Subject: [PATCH 50/90] Update gas params --- shared/services/wallet/node.go | 12 +++++------ testing/node_test.go | 38 ++++++++++++++++++---------------- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/shared/services/wallet/node.go b/shared/services/wallet/node.go index 3fdbf2256..39f76f446 100644 --- a/shared/services/wallet/node.go +++ b/shared/services/wallet/node.go @@ -79,12 +79,12 @@ func (w *Wallet) GetNodeAccountTransactor() (*bind.TransactOpts, error) { } // Create & return transactor - /// TODO: CHEKC THIS - transactor, err := bind.NewKeyedTransactorWithChainID(privateKey, big.NewInt(31337)) - // transactor.GasFeeCap = big.NewInt(10000000000) - // transactor.GasTipCap = big.NewInt(10000000000) - transactor.GasLimit = uint64(10000000) - transactor.GasPrice = big.NewInt(10000000000) + transactor, err := bind.NewKeyedTransactorWithChainID(privateKey, w.chainID) + + transactor.GasFeeCap = w.maxFee + transactor.GasTipCap = w.maxPriorityFee + transactor.GasLimit = w.gasLimit + transactor.Context = context.Background() return transactor, err diff --git a/testing/node_test.go b/testing/node_test.go index 5f3cd25b1..2b6ffa752 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -4,7 +4,6 @@ import ( "context" "flag" "fmt" - "log" "os" "testing" "time" @@ -37,6 +36,12 @@ type StaderNodeSuite struct { client *ethclient.Client } +var ( + maxFee = "100000" + maxPriorityFee = "100000" + gasLimit = "100000000000" +) + func TestNodeSuite(t *testing.T) { s := new(StaderNodeSuite) s.app = newApp() @@ -106,8 +111,9 @@ func (s *StaderNodeSuite) SetupSuite() { var cp string flagSet.StringVar(&cp, "config-path", ConfigPath, "config-path") - // flagSet.StringVar(&cp, "maxFee", "1000000000000000", "maxFee") - // flagSet.StringVar(&cp, "maxPrioFee", "1000000000000000", "maxPrioFee") + flagSet.StringVar(&maxFee, "maxFee", maxFee, "Gas fee cap to use for the 1559 transaction execution") + flagSet.StringVar(&maxPriorityFee, "maxPrioFee", maxPriorityFee, "Gas priority fee cap to use for the 1559 transaction execution") + flagSet.StringVar(&gasLimit, "gasLimit", gasLimit, "Gas priority fee cap to use for the 1559 transaction execution") c := cli.NewContext(s.app, flagSet, nil) @@ -141,20 +147,15 @@ func (s *StaderNodeSuite) SetupSuite() { // run once, after test suite methods func (s *StaderNodeSuite) TearDownSuite() { - fmt.Println("TearDown StaderNodeSuite") - defer func() { - if s.kurtosisCtx != nil { - - s.kurtosisCtx.Clean(context.Background(), true) - } - }() - + if s.kurtosisCtx != nil { + s.kurtosisCtx.Clean(context.Background(), true) + } removeTestFolder(s.T()) - // You can't defer this because os.Exit doesn't care for defer - if err := s.pool.Purge(s.anvil); err != nil { - log.Fatalf("Could not purge resource: %s", err) - } + err := s.pool.Purge(s.anvil) + require.Nil(s.T(), err) + + fmt.Println("TearDown StaderNodeSuite") } func removeTestFolder(t *testing.T) { @@ -164,6 +165,9 @@ func removeTestFolder(t *testing.T) { } func (s *StaderNodeSuite) startAnvil(t *testing.T) string { + + fmt.Println("------------ START ANVIL ---------------") + pool, err := dockertest.NewPool("") require.Nil(s.T(), err) @@ -178,9 +182,6 @@ func (s *StaderNodeSuite) startAnvil(t *testing.T) string { Env: []string{ "ANVIL_IP_ADDR=0.0.0.0", }, - // PortBindings: map[docker.Port][]docker.PortBinding{ - // "8545/tcp": {{HostIP: "localhost", HostPort: "8545/tcp"}}, - // }, }, func(hc *docker.HostConfig) {}) require.Nil(s.T(), err) @@ -201,5 +202,6 @@ func (s *StaderNodeSuite) startAnvil(t *testing.T) string { s.anvil = resource // Get resource's published port for our imposter. + fmt.Printf("------------ ANVIL STARTED AT: %+v --------------- \n", elPort) return elPort } From 02c1612d0ef3e3ab2f1b293752cedd4d0c8e1c6e Mon Sep 17 00:00:00 2001 From: batphonghan Date: Sun, 25 Jun 2023 16:05:13 +0700 Subject: [PATCH 51/90] Remove test not used --- testing/deployHelper_test.go | 5 +++++ testing/node_test.go | 12 ++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/testing/deployHelper_test.go b/testing/deployHelper_test.go index 88670d33a..fab0a65dc 100644 --- a/testing/deployHelper_test.go +++ b/testing/deployHelper_test.go @@ -27,6 +27,11 @@ const ( ethXPredefineAddr = "0xA15BB66138824a1c7167f5E85b957d04Dd34E468" ) +// const ( +// staderConfigAddr = "0x74D95c6ACA207d8d60d793A1C7457AC1364A0Dd4" +// ethXPredefineAddr = "0x954E1071d3F89f5D54F97f5Ccd82BB4D796AEB04" +// ) + func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { client, err := ethclient.Dial(eth1URL) require.Nil(t, err) diff --git a/testing/node_test.go b/testing/node_test.go index 2b6ffa752..b01965bf6 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -48,9 +48,9 @@ func TestNodeSuite(t *testing.T) { suite.Run(t, s) } -func (s *StaderNodeSuite) TestNodeDaemon() { - time.Sleep(time.Second * 10) -} +// func (s *StaderNodeSuite) TestNodeDaemon() { +// time.Sleep(time.Second * 10) +// } func (s *StaderNodeSuite) TestNodeDeposit() { // eth.EthToWei(100000). @@ -79,7 +79,7 @@ func (s *StaderNodeSuite) TestNodeDeposit() { "api", "validator", "deposit", - "9000000000000000000", + eth.EthToWei(9).String(), "0", "1", "false", @@ -118,8 +118,8 @@ func (s *StaderNodeSuite) SetupSuite() { c := cli.NewContext(s.app, flagSet, nil) ePort := s.startAnvil(s.T()) - elUrl := fmt.Sprintf("http://127.0.0.1:%s", ePort) - // cURL := "http://localhost:61143" + elUrl := fmt.Sprintf("http://127.0.0.1:%+v", ePort) + // cURL := "http://127.0.0.1:50336" s.staderConfig(ctx, c, nil, elUrl) fmt.Println("Done SetupSuite()") From d72081452f7cc45cc3362c82437d4a7f8438ed61 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Sun, 25 Jun 2023 16:16:04 +0700 Subject: [PATCH 52/90] Refactor --- shared/services/bc-manager.go | 27 +++++++++++++++------------ shared/services/services.go | 4 ++++ testing/configHelper_test.go | 2 +- testing/node_test.go | 4 ++++ 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/shared/services/bc-manager.go b/shared/services/bc-manager.go index 902094d0b..fb3999a92 100644 --- a/shared/services/bc-manager.go +++ b/shared/services/bc-manager.go @@ -41,6 +41,8 @@ type BeaconClientManager struct { primaryReady bool fallbackReady bool ignoreSyncCheck bool + + localTestnet bool } // This is a signature for a wrapped Beacon client function that only returns an error @@ -206,19 +208,20 @@ func (m *BeaconClientManager) GetValidatorStatus( pubkey types.ValidatorPubkey, opts *beacon.ValidatorStatusOptions, ) (beacon.ValidatorStatus, error) { - // TODO: CHECK - return beacon.ValidatorStatus{ - Exists: true, - Status: beacon.ValidatorState_PendingInitialized, - }, nil + if m.localTestnet { + return beacon.ValidatorStatus{ + Exists: true, + Status: beacon.ValidatorState_PendingInitialized, + }, nil + } - // result, err := m.runFunction1(func(client beacon.Client) (interface{}, error) { - // return client.GetValidatorStatus(pubkey, opts) - // }) - // if err != nil { - // return beacon.ValidatorStatus{}, err - // } - // return result.(beacon.ValidatorStatus), nil + result, err := m.runFunction1(func(client beacon.Client) (interface{}, error) { + return client.GetValidatorStatus(pubkey, opts) + }) + if err != nil { + return beacon.ValidatorStatus{}, err + } + return result.(beacon.ValidatorStatus), nil } // Get the statuses of multiple validators by their pubkeys diff --git a/shared/services/services.go b/shared/services/services.go index 586c9232e..6ca23d918 100644 --- a/shared/services/services.go +++ b/shared/services/services.go @@ -545,6 +545,10 @@ func getBeaconClient(c *cli.Context, cfg *config.StaderConfig) (*BeaconClientMan if c.GlobalBool("force-fallbacks") { bcManager.primaryReady = false } + + if c.GlobalBool("local-testnet") { + bcManager.localTestnet = true + } } }) return bcManager, err diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index a0d0b7f8f..1cb747d6a 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -233,7 +233,7 @@ func (s *StaderNodeSuite) staderConfig( // require.True(t, found) // elPort := apiServiceHttpPortSpec.GetNumber() - _clUrl := fmt.Sprintf("http://localhost:%d", clPort) + _clUrl := fmt.Sprintf("http://127.0.0.1:%d", clPort) clUrl = &_clUrl } diff --git a/testing/node_test.go b/testing/node_test.go index b01965bf6..c1a5adfe4 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -113,8 +113,12 @@ func (s *StaderNodeSuite) SetupSuite() { flagSet.StringVar(&maxFee, "maxFee", maxFee, "Gas fee cap to use for the 1559 transaction execution") flagSet.StringVar(&maxPriorityFee, "maxPrioFee", maxPriorityFee, "Gas priority fee cap to use for the 1559 transaction execution") + flagSet.StringVar(&gasLimit, "gasLimit", gasLimit, "Gas priority fee cap to use for the 1559 transaction execution") + localTestnet := true + flagSet.BoolVar(&localTestnet, "local-testnet", localTestnet, "local-testnet") + c := cli.NewContext(s.app, flagSet, nil) ePort := s.startAnvil(s.T()) From 8676a6de3ffa00acc344c6847b702b7b81ddbe18 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Sun, 25 Jun 2023 17:04:31 +0700 Subject: [PATCH 53/90] Refactor --- shared/services/services.go | 2 +- stader/node/node.go | 6 ++---- testing/configHelper_test.go | 6 ++++++ testing/node_test.go | 13 +++++++------ 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/shared/services/services.go b/shared/services/services.go index 6ca23d918..582b71b01 100644 --- a/shared/services/services.go +++ b/shared/services/services.go @@ -546,7 +546,7 @@ func getBeaconClient(c *cli.Context, cfg *config.StaderConfig) (*BeaconClientMan bcManager.primaryReady = false } - if c.GlobalBool("local-testnet") { + if c.GlobalIsSet("local-testnet") { bcManager.localTestnet = true } } diff --git a/stader/node/node.go b/stader/node/node.go index 43ee24fde..1a9a275de 100644 --- a/stader/node/node.go +++ b/stader/node/node.go @@ -74,11 +74,9 @@ func RegisterCommands(app *cli.App, name string, aliases []string) { // run daemon func run(c *cli.Context) error { - - if preSignedCooldownEnv := os.Getenv("PRE_SIGN_COOL_DOWN"); len(preSignedCooldownEnv) != 0 { - preSignedCooldown, _ = time.ParseDuration(preSignedCooldownEnv) + if c.GlobalIsSet("presign-cooldown") { + preSignedCooldown, _ = time.ParseDuration(c.GlobalString("presign-cooldown")) } - // Handle the initial fee recipient file deployment err := deployDefaultFeeRecipientFile(c) if err != nil { diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index 1cb747d6a..e03e76fb3 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -147,6 +147,12 @@ func newApp() *cli.App { Name: "force-fallbacks", Usage: "Set this to true if you know the primary EC or CC is offline and want to bypass its health checks, and just use the fallback EC and CC instead", }, + cli.BoolFlag{ + Name: "local-testnet", + }, + cli.StringFlag{ + Name: "presign-cooldown", + }, } // Register commands diff --git a/testing/node_test.go b/testing/node_test.go index c1a5adfe4..1985ef8d0 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -54,6 +54,7 @@ func TestNodeSuite(t *testing.T) { func (s *StaderNodeSuite) TestNodeDeposit() { // eth.EthToWei(100000). + time.Sleep(time.Second) go func() { a := os.Args @@ -87,7 +88,7 @@ func (s *StaderNodeSuite) TestNodeDeposit() { assert.Nil(s.T(), err) }() - time.Sleep(time.Minute) + time.Sleep(time.Second * 5) } // func (s *StaderNodeSuite) TestNode2() { @@ -116,23 +117,24 @@ func (s *StaderNodeSuite) SetupSuite() { flagSet.StringVar(&gasLimit, "gasLimit", gasLimit, "Gas priority fee cap to use for the 1559 transaction execution") - localTestnet := true - flagSet.BoolVar(&localTestnet, "local-testnet", localTestnet, "local-testnet") + var localTestnet bool + flagSet.BoolVar(&localTestnet, "local-testnet", true, "local-testnet") c := cli.NewContext(s.app, flagSet, nil) ePort := s.startAnvil(s.T()) elUrl := fmt.Sprintf("http://127.0.0.1:%+v", ePort) - // cURL := "http://127.0.0.1:50336" + // cURL := "http://127.0.0.1:59541" s.staderConfig(ctx, c, nil, elUrl) fmt.Println("Done SetupSuite()") go func() { - os.Setenv("PRE_SIGN_COOL_DOWN", "10s") a := os.Args err := s.app.Run([]string{ a[0], + "--local-testnet=true", + "--presign-cooldown=1s", "node", }) require.Nil(s.T(), err) @@ -199,7 +201,6 @@ func (s *StaderNodeSuite) startAnvil(t *testing.T) string { return err }) - time.Sleep(time.Second * 5) require.Nil(s.T(), err) s.pool = pool From b3360feda26ec5757f027542ff9d2c09d38d6f0d Mon Sep 17 00:00:00 2001 From: batphonghan Date: Sun, 25 Jun 2023 17:12:11 +0700 Subject: [PATCH 54/90] Update time --- testing/deployHelper_test.go | 2 +- testing/node_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/testing/deployHelper_test.go b/testing/deployHelper_test.go index fab0a65dc..fadbe343a 100644 --- a/testing/deployHelper_test.go +++ b/testing/deployHelper_test.go @@ -203,7 +203,7 @@ func deployContracts(t *testing.T, c *cli.Context, eth1URL string) { _, err = node.OnboardNodeOperator(prn, true, "nodetesting", acc.Address, authOperator) require.Nil(t, err) - exist, err := nrContact.IsExistingOperator(&bind.CallOpts{}, acc.Address) + exist, err := nrContact.IsExistingOperator(&bind.CallOpts{Pending: true}, acc.Address) require.Nil(t, err) require.True(t, exist) diff --git a/testing/node_test.go b/testing/node_test.go index 1985ef8d0..bd6f14661 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -88,7 +88,7 @@ func (s *StaderNodeSuite) TestNodeDeposit() { assert.Nil(s.T(), err) }() - time.Sleep(time.Second * 5) + time.Sleep(time.Second * 30) } // func (s *StaderNodeSuite) TestNode2() { From 83736eb2eb1ddd43a60b8ce4c8acbf6ea67afd1f Mon Sep 17 00:00:00 2001 From: batphonghan Date: Sun, 25 Jun 2023 17:30:27 +0700 Subject: [PATCH 55/90] Wait a bit --- testing/deployHelper_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/testing/deployHelper_test.go b/testing/deployHelper_test.go index fadbe343a..10964093e 100644 --- a/testing/deployHelper_test.go +++ b/testing/deployHelper_test.go @@ -7,6 +7,7 @@ import ( "log" "math/big" "testing" + "time" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" @@ -253,6 +254,7 @@ func GetNextTransaction(client *ethclient.Client, fromAddress common.Address, pr auth.GasLimit = uint64(10000000) // in units auth.GasPrice = big.NewInt(10000000000) // in wei + time.Sleep(time.Millisecond * 300) return auth, nil } From cbb704e178b5493cb7429632d03f82dde815b873 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Sun, 25 Jun 2023 18:00:23 +0700 Subject: [PATCH 56/90] Update --- testing/node_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/node_test.go b/testing/node_test.go index bd6f14661..6315b8be2 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -134,7 +134,7 @@ func (s *StaderNodeSuite) SetupSuite() { err := s.app.Run([]string{ a[0], "--local-testnet=true", - "--presign-cooldown=1s", + "--presign-cooldown=5s", "node", }) require.Nil(s.T(), err) From 96c16e244c56c7c7a723ca0fce478d98a01fbb8f Mon Sep 17 00:00:00 2001 From: batphonghan Date: Sun, 25 Jun 2023 19:58:43 +0700 Subject: [PATCH 57/90] Refactor --- anvil_test_node.sh | 3 -- shared/services/config/stadernode-config.go | 8 +----- shared/services/requirements.go | 11 +++++-- shared/services/services.go | 13 --------- shared/services/wallet/node.go | 2 -- stader-cli/validator/export.go | 2 +- stader-lib/node/validator.go | 7 +---- stader-lib/stader/stader.go | 31 -------------------- stader/api/node/commands.go | 2 +- stader/api/node/register.go | 2 +- stader/api/validator/deposit.go | 32 ++++++++++----------- stader/stader.go | 3 -- 12 files changed, 30 insertions(+), 86 deletions(-) delete mode 100755 anvil_test_node.sh diff --git a/anvil_test_node.sh b/anvil_test_node.sh deleted file mode 100755 index e24e77dad..000000000 --- a/anvil_test_node.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -exec anvil \ No newline at end of file diff --git a/shared/services/config/stadernode-config.go b/shared/services/config/stadernode-config.go index 2abf39536..9d2513afa 100644 --- a/shared/services/config/stadernode-config.go +++ b/shared/services/config/stadernode-config.go @@ -236,7 +236,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Prater: 5, // Goerli config.Network_Devnet: 5, // Also goerli config.Network_Zhejiang: 1337803, // Zhejiang - config.Network_Local: 31337, // Zhejiang + config.Network_Local: 31337, // Local testnet }, ethxTokenAddress: map[config.Network]string{ @@ -435,12 +435,6 @@ func (cfg *StaderNodeConfig) GetSpRewardCyclePath(cycle int64, daemon bool) stri } func (cfg *StaderNodeConfig) GetFeeRecipientFilePath() string { - // if cfg.parent != nil && cfg.parent.IsNativeMode { - // return filepath.Join(cfg.DataPath.Value.(string), "validators") - // } - - // return filepath.Join(DaemonDataPath, "validators", NativeFeeRecipientFilename) - if cfg.parent != nil && !cfg.parent.IsNativeMode { return filepath.Join(DaemonDataPath, "validators", FeeRecipientFilename) } diff --git a/shared/services/requirements.go b/shared/services/requirements.go index a37d56cb9..98ef961e8 100644 --- a/shared/services/requirements.go +++ b/shared/services/requirements.go @@ -24,6 +24,7 @@ import ( "errors" "fmt" "log" + "math/big" "sync" "time" @@ -173,7 +174,7 @@ func WaitNodeRegistered(c *cli.Context, operatorAddress common.Address, verbose if err != nil { return err } - _, err = node.GetOperatorId(pnr, operatorAddress, nil) + operatorId, err := node.GetOperatorId(pnr, operatorAddress, nil) if err != nil { if verbose { log.Printf("The node is not registered with Stader, retrying in %s...\n", checkNodeRegisteredInterval.String()) @@ -182,7 +183,13 @@ func WaitNodeRegistered(c *cli.Context, operatorAddress common.Address, verbose return err } - return nil + if operatorId.Cmp(big.NewInt(0)) != 0 { + return nil + } + if verbose { + log.Printf("The node is not registered with Stader, retrying in %s...\n", checkNodeRegisteredInterval.String()) + } + time.Sleep(checkNodeRegisteredInterval) } } diff --git a/shared/services/services.go b/shared/services/services.go index 9627778ee..e13a609a7 100644 --- a/shared/services/services.go +++ b/shared/services/services.go @@ -117,19 +117,6 @@ func GetStaderConfigContract(c *cli.Context) (*stader.StaderConfigContractManage return stader.NewStaderConfig(ec, cfg.StaderNode.GetStaderConfigAddress()) } -func GetEthXContract(c *cli.Context) (*stader.EthxContractManager, error) { - cfg, err := getConfig(c) - if err != nil { - return nil, err - } - ec, err := getEthClient(c, cfg) - if err != nil { - return nil, err - } - - return stader.NewEthxContractManager(ec, cfg.StaderNode.GetEthxTokenAddress()) -} - func GetPermissionlessNodeRegistryAddress(c *cli.Context) (common.Address, error) { sdcfg, err := GetStaderConfigContract(c) if err != nil { diff --git a/shared/services/wallet/node.go b/shared/services/wallet/node.go index 31c9fed44..ef96ef0a4 100644 --- a/shared/services/wallet/node.go +++ b/shared/services/wallet/node.go @@ -80,11 +80,9 @@ func (w *Wallet) GetNodeAccountTransactor() (*bind.TransactOpts, error) { // Create & return transactor transactor, err := bind.NewKeyedTransactorWithChainID(privateKey, w.chainID) - transactor.GasFeeCap = w.maxFee transactor.GasTipCap = w.maxPriorityFee transactor.GasLimit = w.gasLimit - transactor.Context = context.Background() return transactor, err diff --git a/stader-cli/validator/export.go b/stader-cli/validator/export.go index c5459344a..06a09828f 100644 --- a/stader-cli/validator/export.go +++ b/stader-cli/validator/export.go @@ -54,7 +54,7 @@ func exportValidatorStatus(c *cli.Context) error { file, err := os.Create("validator_info.csv") if err != nil { - return err + panic(err) } defer file.Close() diff --git a/stader-lib/node/validator.go b/stader-lib/node/validator.go index d1f0fec0f..a90fd01fe 100644 --- a/stader-lib/node/validator.go +++ b/stader-lib/node/validator.go @@ -18,12 +18,7 @@ func EstimateAddValidatorKeys(pnr *stader.PermissionlessNodeRegistryContractMana } func AddValidatorKeys(pnr *stader.PermissionlessNodeRegistryContractManager, pubKeys [][]byte, preDepositSignatures [][]byte, depositSignatures [][]byte, opts *bind.TransactOpts) (*types.Transaction, error) { - tx, err := pnr.PermissionlessNodeRegistry.AddValidatorKeys( - opts, - pubKeys, - preDepositSignatures, - depositSignatures, - ) + tx, err := pnr.PermissionlessNodeRegistry.AddValidatorKeys(opts, pubKeys, preDepositSignatures, depositSignatures) if err != nil { return nil, fmt.Errorf("could not add validator keys: %w", err) } diff --git a/stader-lib/stader/stader.go b/stader-lib/stader/stader.go index 769e46d0b..bcec5f25b 100644 --- a/stader-lib/stader/stader.go +++ b/stader-lib/stader/stader.go @@ -40,37 +40,6 @@ func NewErc20TokenContract(client ExecutionClient, erc20TokenAddress common.Addr } -type EthxContractManager struct { - Client ExecutionClient - EthX *contracts.ETHX - EthXContract *Contract -} - -func NewEthxContractManager(client ExecutionClient, ethxAddress common.Address) (*EthxContractManager, error) { - ethxFactory, err := contracts.NewETHX(ethxAddress, client) - if err != nil { - return nil, err - } - - ethxAbi, err := abi.JSON(strings.NewReader(contracts.ETHXABI)) - if err != nil { - return nil, err - } - ethXContract := &Contract{ - Contract: bind.NewBoundContract(ethxAddress, ethxAbi, client, client, client), - Address: ðxAddress, - ABI: ðxAbi, - Client: client, - } - - return &EthxContractManager{ - Client: client, - EthX: ethxFactory, - EthXContract: ethXContract, - }, nil - -} - type SdCollateralContractManager struct { Client ExecutionClient SdCollateral *contracts.SdCollateral diff --git a/stader/api/node/commands.go b/stader/api/node/commands.go index 4012e3dd6..2d98a650a 100644 --- a/stader/api/node/commands.go +++ b/stader/api/node/commands.go @@ -124,7 +124,7 @@ func RegisterSubcommands(command *cli.Command, name string, aliases []string) { socializeMev, err := cliutils.ValidateBool("socialize-mev", c.Args().Get(2)) // Run - api.PrintResponse(RegisterNode(c, operatorName, operatorRewardAddress, socializeMev)) + api.PrintResponse(registerNode(c, operatorName, operatorRewardAddress, socializeMev)) return nil }, diff --git a/stader/api/node/register.go b/stader/api/node/register.go index 0a2c223da..e047dafae 100644 --- a/stader/api/node/register.go +++ b/stader/api/node/register.go @@ -91,7 +91,7 @@ func canRegisterNode(c *cli.Context, operatorName string, operatorRewardAddress } -func RegisterNode(c *cli.Context, operatorName string, operatorRewardAddress common.Address, mevSocialize bool) (*api.RegisterNodeResponse, error) { +func registerNode(c *cli.Context, operatorName string, operatorRewardAddress common.Address, mevSocialize bool) (*api.RegisterNodeResponse, error) { // Get services w, err := services.GetWallet(c) diff --git a/stader/api/validator/deposit.go b/stader/api/validator/deposit.go index a1fffd4f4..e2605b0f1 100644 --- a/stader/api/validator/deposit.go +++ b/stader/api/validator/deposit.go @@ -249,10 +249,10 @@ func nodeDeposit(c *cli.Context, amountWei *big.Int, numValidators *big.Int, rel return nil, err } - // operatorRegistryInfo, err := node.GetOperatorInfo(prn, operatorId, nil) - // if err != nil { - // return nil, err - // } + operatorRegistryInfo, err := node.GetOperatorInfo(prn, operatorId, nil) + if err != nil { + return nil, err + } // Get transactor opts, err := w.GetNodeAccountTransactor() @@ -311,18 +311,18 @@ func nodeDeposit(c *cli.Context, amountWei *big.Int, numValidators *big.Int, rel depositSignatures[i] = depositSignature[:] // Make sure a validator with this pubkey doesn't already exist - // status, err := bc.GetValidatorStatus(pubKey, nil) - // if err != nil { - // return nil, fmt.Errorf("Error checking for existing validator status: %w\nYour funds have not been deposited for your own safety.", err) - // } - // if status.Exists { - // return nil, fmt.Errorf("**** ALERT ****\n"+ - // "Your validator %s has the following as a validator pubkey:\n\t%s\n"+ - // "This key is already in use by validator %d on the Beacon chain!\n"+ - // "Stader will not allow you to deposit this validator for your own safety so you do not get slashed.\n"+ - // "PLEASE REPORT THIS TO THE STADER DEVELOPERS.\n"+ - // "***************\n", operatorRegistryInfo.OperatorName, pubKey.Hex(), status.Index) - // } + status, err := bc.GetValidatorStatus(pubKey, nil) + if err != nil { + return nil, fmt.Errorf("Error checking for existing validator status: %w\nYour funds have not been deposited for your own safety.", err) + } + if status.Exists { + return nil, fmt.Errorf("**** ALERT ****\n"+ + "Your validator %s has the following as a validator pubkey:\n\t%s\n"+ + "This key is already in use by validator %d on the Beacon chain!\n"+ + "Stader will not allow you to deposit this validator for your own safety so you do not get slashed.\n"+ + "PLEASE REPORT THIS TO THE STADER DEVELOPERS.\n"+ + "***************\n", operatorRegistryInfo.OperatorName, pubKey.Hex(), status.Index) + } newValidatorKey = validatorKeyCount.Add(validatorKeyCount, big.NewInt(1)) } diff --git a/stader/stader.go b/stader/stader.go index c01f90334..5655e5611 100644 --- a/stader/stader.go +++ b/stader/stader.go @@ -35,9 +35,6 @@ import ( // Run func main() { - Run() -} -func Run() { // Initialise application app := cli.NewApp() From 930d002c51d0c2550b4bb0b8efc77df7959b5a49 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Sun, 25 Jun 2023 19:59:23 +0700 Subject: [PATCH 58/90] Remove unused --- stader-lib/contracts/ETHX.go | 2228 ---------------------------------- 1 file changed, 2228 deletions(-) delete mode 100644 stader-lib/contracts/ETHX.go diff --git a/stader-lib/contracts/ETHX.go b/stader-lib/contracts/ETHX.go deleted file mode 100644 index f975598c8..000000000 --- a/stader-lib/contracts/ETHX.go +++ /dev/null @@ -1,2228 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package contracts - -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 -) - -// ETHXMetaData contains all meta data concerning the ETHX contract. -var ETHXMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerNotManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"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\":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\":\"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\"},{\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"UpdatedStaderConfig\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURNER_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\":\"MINTER_ROLE\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"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\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":[],\"name\":\"staderConfig\",\"outputs\":[{\"internalType\":\"contractIStaderConfig\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"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\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staderConfig\",\"type\":\"address\"}],\"name\":\"updateStaderConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", -} - -// ETHXABI is the input ABI used to generate the binding from. -// Deprecated: Use ETHXMetaData.ABI instead. -var ETHXABI = ETHXMetaData.ABI - -// ETHX is an auto generated Go binding around an Ethereum contract. -type ETHX struct { - ETHXCaller // Read-only binding to the contract - ETHXTransactor // Write-only binding to the contract - ETHXFilterer // Log filterer for contract events -} - -// ETHXCaller is an auto generated read-only Go binding around an Ethereum contract. -type ETHXCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ETHXTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ETHXTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ETHXFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ETHXFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ETHXSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ETHXSession struct { - Contract *ETHX // 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 -} - -// ETHXCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ETHXCallerSession struct { - Contract *ETHXCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ETHXTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ETHXTransactorSession struct { - Contract *ETHXTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ETHXRaw is an auto generated low-level Go binding around an Ethereum contract. -type ETHXRaw struct { - Contract *ETHX // Generic contract binding to access the raw methods on -} - -// ETHXCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ETHXCallerRaw struct { - Contract *ETHXCaller // Generic read-only contract binding to access the raw methods on -} - -// ETHXTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ETHXTransactorRaw struct { - Contract *ETHXTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewETHX creates a new instance of ETHX, bound to a specific deployed contract. -func NewETHX(address common.Address, backend bind.ContractBackend) (*ETHX, error) { - contract, err := bindETHX(address, backend, backend, backend) - if err != nil { - return nil, err - } - return ÐX{ETHXCaller: ETHXCaller{contract: contract}, ETHXTransactor: ETHXTransactor{contract: contract}, ETHXFilterer: ETHXFilterer{contract: contract}}, nil -} - -// NewETHXCaller creates a new read-only instance of ETHX, bound to a specific deployed contract. -func NewETHXCaller(address common.Address, caller bind.ContractCaller) (*ETHXCaller, error) { - contract, err := bindETHX(address, caller, nil, nil) - if err != nil { - return nil, err - } - return ÐXCaller{contract: contract}, nil -} - -// NewETHXTransactor creates a new write-only instance of ETHX, bound to a specific deployed contract. -func NewETHXTransactor(address common.Address, transactor bind.ContractTransactor) (*ETHXTransactor, error) { - contract, err := bindETHX(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return ÐXTransactor{contract: contract}, nil -} - -// NewETHXFilterer creates a new log filterer instance of ETHX, bound to a specific deployed contract. -func NewETHXFilterer(address common.Address, filterer bind.ContractFilterer) (*ETHXFilterer, error) { - contract, err := bindETHX(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return ÐXFilterer{contract: contract}, nil -} - -// bindETHX binds a generic wrapper to an already deployed contract. -func bindETHX(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ETHXMetaData.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 (_ETHX *ETHXRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ETHX.Contract.ETHXCaller.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 (_ETHX *ETHXRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ETHX.Contract.ETHXTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ETHX *ETHXRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ETHX.Contract.ETHXTransactor.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 (_ETHX *ETHXCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ETHX.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 (_ETHX *ETHXTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ETHX.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ETHX *ETHXTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ETHX.Contract.contract.Transact(opts, method, params...) -} - -// BURNERROLE is a free data retrieval call binding the contract method 0x282c51f3. -// -// Solidity: function BURNER_ROLE() view returns(bytes32) -func (_ETHX *ETHXCaller) BURNERROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _ETHX.contract.Call(opts, &out, "BURNER_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BURNERROLE is a free data retrieval call binding the contract method 0x282c51f3. -// -// Solidity: function BURNER_ROLE() view returns(bytes32) -func (_ETHX *ETHXSession) BURNERROLE() ([32]byte, error) { - return _ETHX.Contract.BURNERROLE(&_ETHX.CallOpts) -} - -// BURNERROLE is a free data retrieval call binding the contract method 0x282c51f3. -// -// Solidity: function BURNER_ROLE() view returns(bytes32) -func (_ETHX *ETHXCallerSession) BURNERROLE() ([32]byte, error) { - return _ETHX.Contract.BURNERROLE(&_ETHX.CallOpts) -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_ETHX *ETHXCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _ETHX.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_ETHX *ETHXSession) DEFAULTADMINROLE() ([32]byte, error) { - return _ETHX.Contract.DEFAULTADMINROLE(&_ETHX.CallOpts) -} - -// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. -// -// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) -func (_ETHX *ETHXCallerSession) DEFAULTADMINROLE() ([32]byte, error) { - return _ETHX.Contract.DEFAULTADMINROLE(&_ETHX.CallOpts) -} - -// MINTERROLE is a free data retrieval call binding the contract method 0xd5391393. -// -// Solidity: function MINTER_ROLE() view returns(bytes32) -func (_ETHX *ETHXCaller) MINTERROLE(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _ETHX.contract.Call(opts, &out, "MINTER_ROLE") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// MINTERROLE is a free data retrieval call binding the contract method 0xd5391393. -// -// Solidity: function MINTER_ROLE() view returns(bytes32) -func (_ETHX *ETHXSession) MINTERROLE() ([32]byte, error) { - return _ETHX.Contract.MINTERROLE(&_ETHX.CallOpts) -} - -// MINTERROLE is a free data retrieval call binding the contract method 0xd5391393. -// -// Solidity: function MINTER_ROLE() view returns(bytes32) -func (_ETHX *ETHXCallerSession) MINTERROLE() ([32]byte, error) { - return _ETHX.Contract.MINTERROLE(&_ETHX.CallOpts) -} - -// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. -// -// Solidity: function allowance(address owner, address spender) view returns(uint256) -func (_ETHX *ETHXCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { - var out []interface{} - err := _ETHX.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 (_ETHX *ETHXSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { - return _ETHX.Contract.Allowance(&_ETHX.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 (_ETHX *ETHXCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { - return _ETHX.Contract.Allowance(&_ETHX.CallOpts, owner, spender) -} - -// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. -// -// Solidity: function balanceOf(address account) view returns(uint256) -func (_ETHX *ETHXCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) { - var out []interface{} - err := _ETHX.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 (_ETHX *ETHXSession) BalanceOf(account common.Address) (*big.Int, error) { - return _ETHX.Contract.BalanceOf(&_ETHX.CallOpts, account) -} - -// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. -// -// Solidity: function balanceOf(address account) view returns(uint256) -func (_ETHX *ETHXCallerSession) BalanceOf(account common.Address) (*big.Int, error) { - return _ETHX.Contract.BalanceOf(&_ETHX.CallOpts, account) -} - -// Decimals is a free data retrieval call binding the contract method 0x313ce567. -// -// Solidity: function decimals() view returns(uint8) -func (_ETHX *ETHXCaller) Decimals(opts *bind.CallOpts) (uint8, error) { - var out []interface{} - err := _ETHX.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 (_ETHX *ETHXSession) Decimals() (uint8, error) { - return _ETHX.Contract.Decimals(&_ETHX.CallOpts) -} - -// Decimals is a free data retrieval call binding the contract method 0x313ce567. -// -// Solidity: function decimals() view returns(uint8) -func (_ETHX *ETHXCallerSession) Decimals() (uint8, error) { - return _ETHX.Contract.Decimals(&_ETHX.CallOpts) -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_ETHX *ETHXCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { - var out []interface{} - err := _ETHX.contract.Call(opts, &out, "getRoleAdmin", role) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_ETHX *ETHXSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _ETHX.Contract.GetRoleAdmin(&_ETHX.CallOpts, role) -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_ETHX *ETHXCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _ETHX.Contract.GetRoleAdmin(&_ETHX.CallOpts, role) -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_ETHX *ETHXCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { - var out []interface{} - err := _ETHX.contract.Call(opts, &out, "hasRole", role, account) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_ETHX *ETHXSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _ETHX.Contract.HasRole(&_ETHX.CallOpts, role, account) -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_ETHX *ETHXCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _ETHX.Contract.HasRole(&_ETHX.CallOpts, role, account) -} - -// Name is a free data retrieval call binding the contract method 0x06fdde03. -// -// Solidity: function name() view returns(string) -func (_ETHX *ETHXCaller) Name(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _ETHX.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 (_ETHX *ETHXSession) Name() (string, error) { - return _ETHX.Contract.Name(&_ETHX.CallOpts) -} - -// Name is a free data retrieval call binding the contract method 0x06fdde03. -// -// Solidity: function name() view returns(string) -func (_ETHX *ETHXCallerSession) Name() (string, error) { - return _ETHX.Contract.Name(&_ETHX.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_ETHX *ETHXCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _ETHX.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 (_ETHX *ETHXSession) Paused() (bool, error) { - return _ETHX.Contract.Paused(&_ETHX.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_ETHX *ETHXCallerSession) Paused() (bool, error) { - return _ETHX.Contract.Paused(&_ETHX.CallOpts) -} - -// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. -// -// Solidity: function staderConfig() view returns(address) -func (_ETHX *ETHXCaller) StaderConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ETHX.contract.Call(opts, &out, "staderConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. -// -// Solidity: function staderConfig() view returns(address) -func (_ETHX *ETHXSession) StaderConfig() (common.Address, error) { - return _ETHX.Contract.StaderConfig(&_ETHX.CallOpts) -} - -// StaderConfig is a free data retrieval call binding the contract method 0x490ffa35. -// -// Solidity: function staderConfig() view returns(address) -func (_ETHX *ETHXCallerSession) StaderConfig() (common.Address, error) { - return _ETHX.Contract.StaderConfig(&_ETHX.CallOpts) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_ETHX *ETHXCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { - var out []interface{} - err := _ETHX.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 (_ETHX *ETHXSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _ETHX.Contract.SupportsInterface(&_ETHX.CallOpts, interfaceId) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) -func (_ETHX *ETHXCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { - return _ETHX.Contract.SupportsInterface(&_ETHX.CallOpts, interfaceId) -} - -// Symbol is a free data retrieval call binding the contract method 0x95d89b41. -// -// Solidity: function symbol() view returns(string) -func (_ETHX *ETHXCaller) Symbol(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _ETHX.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 (_ETHX *ETHXSession) Symbol() (string, error) { - return _ETHX.Contract.Symbol(&_ETHX.CallOpts) -} - -// Symbol is a free data retrieval call binding the contract method 0x95d89b41. -// -// Solidity: function symbol() view returns(string) -func (_ETHX *ETHXCallerSession) Symbol() (string, error) { - return _ETHX.Contract.Symbol(&_ETHX.CallOpts) -} - -// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. -// -// Solidity: function totalSupply() view returns(uint256) -func (_ETHX *ETHXCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _ETHX.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 (_ETHX *ETHXSession) TotalSupply() (*big.Int, error) { - return _ETHX.Contract.TotalSupply(&_ETHX.CallOpts) -} - -// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. -// -// Solidity: function totalSupply() view returns(uint256) -func (_ETHX *ETHXCallerSession) TotalSupply() (*big.Int, error) { - return _ETHX.Contract.TotalSupply(&_ETHX.CallOpts) -} - -// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. -// -// Solidity: function approve(address spender, uint256 amount) returns(bool) -func (_ETHX *ETHXTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) { - return _ETHX.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 (_ETHX *ETHXSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { - return _ETHX.Contract.Approve(&_ETHX.TransactOpts, spender, amount) -} - -// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. -// -// Solidity: function approve(address spender, uint256 amount) returns(bool) -func (_ETHX *ETHXTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { - return _ETHX.Contract.Approve(&_ETHX.TransactOpts, spender, amount) -} - -// BurnFrom is a paid mutator transaction binding the contract method 0x79cc6790. -// -// Solidity: function burnFrom(address account, uint256 amount) returns() -func (_ETHX *ETHXTransactor) BurnFrom(opts *bind.TransactOpts, account common.Address, amount *big.Int) (*types.Transaction, error) { - return _ETHX.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 (_ETHX *ETHXSession) BurnFrom(account common.Address, amount *big.Int) (*types.Transaction, error) { - return _ETHX.Contract.BurnFrom(&_ETHX.TransactOpts, account, amount) -} - -// BurnFrom is a paid mutator transaction binding the contract method 0x79cc6790. -// -// Solidity: function burnFrom(address account, uint256 amount) returns() -func (_ETHX *ETHXTransactorSession) BurnFrom(account common.Address, amount *big.Int) (*types.Transaction, error) { - return _ETHX.Contract.BurnFrom(&_ETHX.TransactOpts, account, amount) -} - -// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. -// -// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) -func (_ETHX *ETHXTransactor) DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { - return _ETHX.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 (_ETHX *ETHXSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { - return _ETHX.Contract.DecreaseAllowance(&_ETHX.TransactOpts, spender, subtractedValue) -} - -// DecreaseAllowance is a paid mutator transaction binding the contract method 0xa457c2d7. -// -// Solidity: function decreaseAllowance(address spender, uint256 subtractedValue) returns(bool) -func (_ETHX *ETHXTransactorSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { - return _ETHX.Contract.DecreaseAllowance(&_ETHX.TransactOpts, spender, subtractedValue) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_ETHX *ETHXTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _ETHX.contract.Transact(opts, "grantRole", role, account) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_ETHX *ETHXSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _ETHX.Contract.GrantRole(&_ETHX.TransactOpts, role, account) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_ETHX *ETHXTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _ETHX.Contract.GrantRole(&_ETHX.TransactOpts, role, account) -} - -// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. -// -// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) -func (_ETHX *ETHXTransactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) { - return _ETHX.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 (_ETHX *ETHXSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { - return _ETHX.Contract.IncreaseAllowance(&_ETHX.TransactOpts, spender, addedValue) -} - -// IncreaseAllowance is a paid mutator transaction binding the contract method 0x39509351. -// -// Solidity: function increaseAllowance(address spender, uint256 addedValue) returns(bool) -func (_ETHX *ETHXTransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { - return _ETHX.Contract.IncreaseAllowance(&_ETHX.TransactOpts, spender, addedValue) -} - -// Mint is a paid mutator transaction binding the contract method 0x40c10f19. -// -// Solidity: function mint(address to, uint256 amount) returns() -func (_ETHX *ETHXTransactor) Mint(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ETHX.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 (_ETHX *ETHXSession) Mint(to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ETHX.Contract.Mint(&_ETHX.TransactOpts, to, amount) -} - -// Mint is a paid mutator transaction binding the contract method 0x40c10f19. -// -// Solidity: function mint(address to, uint256 amount) returns() -func (_ETHX *ETHXTransactorSession) Mint(to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ETHX.Contract.Mint(&_ETHX.TransactOpts, to, amount) -} - -// Pause is a paid mutator transaction binding the contract method 0x8456cb59. -// -// Solidity: function pause() returns() -func (_ETHX *ETHXTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ETHX.contract.Transact(opts, "pause") -} - -// Pause is a paid mutator transaction binding the contract method 0x8456cb59. -// -// Solidity: function pause() returns() -func (_ETHX *ETHXSession) Pause() (*types.Transaction, error) { - return _ETHX.Contract.Pause(&_ETHX.TransactOpts) -} - -// Pause is a paid mutator transaction binding the contract method 0x8456cb59. -// -// Solidity: function pause() returns() -func (_ETHX *ETHXTransactorSession) Pause() (*types.Transaction, error) { - return _ETHX.Contract.Pause(&_ETHX.TransactOpts) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address account) returns() -func (_ETHX *ETHXTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _ETHX.contract.Transact(opts, "renounceRole", role, account) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address account) returns() -func (_ETHX *ETHXSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _ETHX.Contract.RenounceRole(&_ETHX.TransactOpts, role, account) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. -// -// Solidity: function renounceRole(bytes32 role, address account) returns() -func (_ETHX *ETHXTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _ETHX.Contract.RenounceRole(&_ETHX.TransactOpts, role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_ETHX *ETHXTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _ETHX.contract.Transact(opts, "revokeRole", role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_ETHX *ETHXSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _ETHX.Contract.RevokeRole(&_ETHX.TransactOpts, role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_ETHX *ETHXTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _ETHX.Contract.RevokeRole(&_ETHX.TransactOpts, role, account) -} - -// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. -// -// Solidity: function transfer(address to, uint256 amount) returns(bool) -func (_ETHX *ETHXTransactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ETHX.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 (_ETHX *ETHXSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ETHX.Contract.Transfer(&_ETHX.TransactOpts, to, amount) -} - -// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. -// -// Solidity: function transfer(address to, uint256 amount) returns(bool) -func (_ETHX *ETHXTransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ETHX.Contract.Transfer(&_ETHX.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 (_ETHX *ETHXTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ETHX.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 (_ETHX *ETHXSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ETHX.Contract.TransferFrom(&_ETHX.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 (_ETHX *ETHXTransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _ETHX.Contract.TransferFrom(&_ETHX.TransactOpts, from, to, amount) -} - -// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. -// -// Solidity: function unpause() returns() -func (_ETHX *ETHXTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ETHX.contract.Transact(opts, "unpause") -} - -// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. -// -// Solidity: function unpause() returns() -func (_ETHX *ETHXSession) Unpause() (*types.Transaction, error) { - return _ETHX.Contract.Unpause(&_ETHX.TransactOpts) -} - -// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a. -// -// Solidity: function unpause() returns() -func (_ETHX *ETHXTransactorSession) Unpause() (*types.Transaction, error) { - return _ETHX.Contract.Unpause(&_ETHX.TransactOpts) -} - -// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. -// -// Solidity: function updateStaderConfig(address _staderConfig) returns() -func (_ETHX *ETHXTransactor) UpdateStaderConfig(opts *bind.TransactOpts, _staderConfig common.Address) (*types.Transaction, error) { - return _ETHX.contract.Transact(opts, "updateStaderConfig", _staderConfig) -} - -// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. -// -// Solidity: function updateStaderConfig(address _staderConfig) returns() -func (_ETHX *ETHXSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { - return _ETHX.Contract.UpdateStaderConfig(&_ETHX.TransactOpts, _staderConfig) -} - -// UpdateStaderConfig is a paid mutator transaction binding the contract method 0x9ee804cb. -// -// Solidity: function updateStaderConfig(address _staderConfig) returns() -func (_ETHX *ETHXTransactorSession) UpdateStaderConfig(_staderConfig common.Address) (*types.Transaction, error) { - return _ETHX.Contract.UpdateStaderConfig(&_ETHX.TransactOpts, _staderConfig) -} - -// ETHXApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ETHX contract. -type ETHXApprovalIterator struct { - Event *ETHXApproval // 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 *ETHXApprovalIterator) 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(ETHXApproval) - if err := 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(ETHXApproval) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *ETHXApprovalIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ETHXApprovalIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ETHXApproval represents a Approval event raised by the ETHX contract. -type ETHXApproval 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 (_ETHX *ETHXFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*ETHXApprovalIterator, 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 := _ETHX.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) - if err != nil { - return nil, err - } - return ÐXApprovalIterator{contract: _ETHX.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 (_ETHX *ETHXFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ETHXApproval, 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 := _ETHX.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(ETHXApproval) - if err := _ETHX.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 (_ETHX *ETHXFilterer) ParseApproval(log types.Log) (*ETHXApproval, error) { - event := new(ETHXApproval) - if err := _ETHX.contract.UnpackLog(event, "Approval", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ETHXInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ETHX contract. -type ETHXInitializedIterator struct { - Event *ETHXInitialized // 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 *ETHXInitializedIterator) 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(ETHXInitialized) - if err := 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(ETHXInitialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *ETHXInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ETHXInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ETHXInitialized represents a Initialized event raised by the ETHX contract. -type ETHXInitialized 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 (_ETHX *ETHXFilterer) FilterInitialized(opts *bind.FilterOpts) (*ETHXInitializedIterator, error) { - - logs, sub, err := _ETHX.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return ÐXInitializedIterator{contract: _ETHX.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 (_ETHX *ETHXFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ETHXInitialized) (event.Subscription, error) { - - logs, sub, err := _ETHX.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(ETHXInitialized) - if err := _ETHX.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 (_ETHX *ETHXFilterer) ParseInitialized(log types.Log) (*ETHXInitialized, error) { - event := new(ETHXInitialized) - if err := _ETHX.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ETHXPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ETHX contract. -type ETHXPausedIterator struct { - Event *ETHXPaused // 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 *ETHXPausedIterator) 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(ETHXPaused) - if err := 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(ETHXPaused) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *ETHXPausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ETHXPausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ETHXPaused represents a Paused event raised by the ETHX contract. -type ETHXPaused 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 (_ETHX *ETHXFilterer) FilterPaused(opts *bind.FilterOpts) (*ETHXPausedIterator, error) { - - logs, sub, err := _ETHX.contract.FilterLogs(opts, "Paused") - if err != nil { - return nil, err - } - return ÐXPausedIterator{contract: _ETHX.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 (_ETHX *ETHXFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *ETHXPaused) (event.Subscription, error) { - - logs, sub, err := _ETHX.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(ETHXPaused) - if err := _ETHX.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 (_ETHX *ETHXFilterer) ParsePaused(log types.Log) (*ETHXPaused, error) { - event := new(ETHXPaused) - if err := _ETHX.contract.UnpackLog(event, "Paused", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ETHXRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the ETHX contract. -type ETHXRoleAdminChangedIterator struct { - Event *ETHXRoleAdminChanged // 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 *ETHXRoleAdminChangedIterator) 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(ETHXRoleAdminChanged) - if err := 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(ETHXRoleAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *ETHXRoleAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ETHXRoleAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ETHXRoleAdminChanged represents a RoleAdminChanged event raised by the ETHX contract. -type ETHXRoleAdminChanged struct { - Role [32]byte - PreviousAdminRole [32]byte - NewAdminRole [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_ETHX *ETHXFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*ETHXRoleAdminChangedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var previousAdminRoleRule []interface{} - for _, previousAdminRoleItem := range previousAdminRole { - previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) - } - var newAdminRoleRule []interface{} - for _, newAdminRoleItem := range newAdminRole { - newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) - } - - logs, sub, err := _ETHX.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) - if err != nil { - return nil, err - } - return ÐXRoleAdminChangedIterator{contract: _ETHX.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil -} - -// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_ETHX *ETHXFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *ETHXRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var previousAdminRoleRule []interface{} - for _, previousAdminRoleItem := range previousAdminRole { - previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) - } - var newAdminRoleRule []interface{} - for _, newAdminRoleItem := range newAdminRole { - newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) - } - - logs, sub, err := _ETHX.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) - 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(ETHXRoleAdminChanged) - if err := _ETHX.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_ETHX *ETHXFilterer) ParseRoleAdminChanged(log types.Log) (*ETHXRoleAdminChanged, error) { - event := new(ETHXRoleAdminChanged) - if err := _ETHX.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ETHXRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the ETHX contract. -type ETHXRoleGrantedIterator struct { - Event *ETHXRoleGranted // 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 *ETHXRoleGrantedIterator) 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(ETHXRoleGranted) - if err := 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(ETHXRoleGranted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *ETHXRoleGrantedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ETHXRoleGrantedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ETHXRoleGranted represents a RoleGranted event raised by the ETHX contract. -type ETHXRoleGranted struct { - Role [32]byte - Account common.Address - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_ETHX *ETHXFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ETHXRoleGrantedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _ETHX.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return ÐXRoleGrantedIterator{contract: _ETHX.contract, event: "RoleGranted", logs: logs, sub: sub}, nil -} - -// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_ETHX *ETHXFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *ETHXRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _ETHX.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, 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(ETHXRoleGranted) - if err := _ETHX.contract.UnpackLog(event, "RoleGranted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_ETHX *ETHXFilterer) ParseRoleGranted(log types.Log) (*ETHXRoleGranted, error) { - event := new(ETHXRoleGranted) - if err := _ETHX.contract.UnpackLog(event, "RoleGranted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ETHXRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the ETHX contract. -type ETHXRoleRevokedIterator struct { - Event *ETHXRoleRevoked // 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 *ETHXRoleRevokedIterator) 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(ETHXRoleRevoked) - if err := 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(ETHXRoleRevoked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *ETHXRoleRevokedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ETHXRoleRevokedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ETHXRoleRevoked represents a RoleRevoked event raised by the ETHX contract. -type ETHXRoleRevoked struct { - Role [32]byte - Account common.Address - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_ETHX *ETHXFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ETHXRoleRevokedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _ETHX.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return ÐXRoleRevokedIterator{contract: _ETHX.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil -} - -// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_ETHX *ETHXFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *ETHXRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _ETHX.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, 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(ETHXRoleRevoked) - if err := _ETHX.contract.UnpackLog(event, "RoleRevoked", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_ETHX *ETHXFilterer) ParseRoleRevoked(log types.Log) (*ETHXRoleRevoked, error) { - event := new(ETHXRoleRevoked) - if err := _ETHX.contract.UnpackLog(event, "RoleRevoked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ETHXTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ETHX contract. -type ETHXTransferIterator struct { - Event *ETHXTransfer // 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 *ETHXTransferIterator) 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(ETHXTransfer) - if err := 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(ETHXTransfer) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *ETHXTransferIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ETHXTransferIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ETHXTransfer represents a Transfer event raised by the ETHX contract. -type ETHXTransfer 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 (_ETHX *ETHXFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ETHXTransferIterator, 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 := _ETHX.contract.FilterLogs(opts, "Transfer", fromRule, toRule) - if err != nil { - return nil, err - } - return ÐXTransferIterator{contract: _ETHX.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 (_ETHX *ETHXFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ETHXTransfer, 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 := _ETHX.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(ETHXTransfer) - if err := _ETHX.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 (_ETHX *ETHXFilterer) ParseTransfer(log types.Log) (*ETHXTransfer, error) { - event := new(ETHXTransfer) - if err := _ETHX.contract.UnpackLog(event, "Transfer", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ETHXUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the ETHX contract. -type ETHXUnpausedIterator struct { - Event *ETHXUnpaused // 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 *ETHXUnpausedIterator) 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(ETHXUnpaused) - if err := 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(ETHXUnpaused) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *ETHXUnpausedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ETHXUnpausedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ETHXUnpaused represents a Unpaused event raised by the ETHX contract. -type ETHXUnpaused 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 (_ETHX *ETHXFilterer) FilterUnpaused(opts *bind.FilterOpts) (*ETHXUnpausedIterator, error) { - - logs, sub, err := _ETHX.contract.FilterLogs(opts, "Unpaused") - if err != nil { - return nil, err - } - return ÐXUnpausedIterator{contract: _ETHX.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 (_ETHX *ETHXFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ETHXUnpaused) (event.Subscription, error) { - - logs, sub, err := _ETHX.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(ETHXUnpaused) - if err := _ETHX.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 (_ETHX *ETHXFilterer) ParseUnpaused(log types.Log) (*ETHXUnpaused, error) { - event := new(ETHXUnpaused) - if err := _ETHX.contract.UnpackLog(event, "Unpaused", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// ETHXUpdatedStaderConfigIterator is returned from FilterUpdatedStaderConfig and is used to iterate over the raw logs and unpacked data for UpdatedStaderConfig events raised by the ETHX contract. -type ETHXUpdatedStaderConfigIterator struct { - Event *ETHXUpdatedStaderConfig // 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 *ETHXUpdatedStaderConfigIterator) 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(ETHXUpdatedStaderConfig) - if err := 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(ETHXUpdatedStaderConfig) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.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 *ETHXUpdatedStaderConfigIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ETHXUpdatedStaderConfigIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ETHXUpdatedStaderConfig represents a UpdatedStaderConfig event raised by the ETHX contract. -type ETHXUpdatedStaderConfig struct { - StaderConfig common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterUpdatedStaderConfig is a free log retrieval operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. -// -// Solidity: event UpdatedStaderConfig(address indexed _staderConfig) -func (_ETHX *ETHXFilterer) FilterUpdatedStaderConfig(opts *bind.FilterOpts, _staderConfig []common.Address) (*ETHXUpdatedStaderConfigIterator, error) { - - var _staderConfigRule []interface{} - for _, _staderConfigItem := range _staderConfig { - _staderConfigRule = append(_staderConfigRule, _staderConfigItem) - } - - logs, sub, err := _ETHX.contract.FilterLogs(opts, "UpdatedStaderConfig", _staderConfigRule) - if err != nil { - return nil, err - } - return ÐXUpdatedStaderConfigIterator{contract: _ETHX.contract, event: "UpdatedStaderConfig", logs: logs, sub: sub}, nil -} - -// WatchUpdatedStaderConfig is a free log subscription operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. -// -// Solidity: event UpdatedStaderConfig(address indexed _staderConfig) -func (_ETHX *ETHXFilterer) WatchUpdatedStaderConfig(opts *bind.WatchOpts, sink chan<- *ETHXUpdatedStaderConfig, _staderConfig []common.Address) (event.Subscription, error) { - - var _staderConfigRule []interface{} - for _, _staderConfigItem := range _staderConfig { - _staderConfigRule = append(_staderConfigRule, _staderConfigItem) - } - - logs, sub, err := _ETHX.contract.WatchLogs(opts, "UpdatedStaderConfig", _staderConfigRule) - 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(ETHXUpdatedStaderConfig) - if err := _ETHX.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseUpdatedStaderConfig is a log parse operation binding the contract event 0xdb2219043d7b197cb235f1af0cf6d782d77dee3de19e3f4fb6d39aae633b4485. -// -// Solidity: event UpdatedStaderConfig(address indexed _staderConfig) -func (_ETHX *ETHXFilterer) ParseUpdatedStaderConfig(log types.Log) (*ETHXUpdatedStaderConfig, error) { - event := new(ETHXUpdatedStaderConfig) - if err := _ETHX.contract.UnpackLog(event, "UpdatedStaderConfig", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} From 639c53657bff989c122dc3c8182efa5219a4110f Mon Sep 17 00:00:00 2001 From: batphonghan Date: Sun, 25 Jun 2023 20:11:51 +0700 Subject: [PATCH 59/90] Remove salt --- testing/node_test.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/testing/node_test.go b/testing/node_test.go index 6315b8be2..e41ce19e1 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -74,14 +74,13 @@ func (s *StaderNodeSuite) TestNodeDeposit() { eth.EthToWei(9000).String(), }) assert.Nil(s.T(), err) - + // stader-cli api validator deposit amount salt num-validators reload-keys"} err = s.app.Run([]string{ a[0], "api", "validator", "deposit", eth.EthToWei(9).String(), - "0", "1", "false", }) From 2cb870691e5e202cffddc64d474ec2e5c269ef37 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Sun, 25 Jun 2023 22:10:02 +0700 Subject: [PATCH 60/90] Ingnore check in localtestnet --- shared/services/bc-manager.go | 6 +++++- stader/api/validator/deposit.go | 14 ++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/shared/services/bc-manager.go b/shared/services/bc-manager.go index bd30bbbd9..eafa66aed 100644 --- a/shared/services/bc-manager.go +++ b/shared/services/bc-manager.go @@ -34,6 +34,7 @@ import ( ) // This is a proxy for multiple Beacon clients, providing natural fallback support if one of them fails. + type BeaconClientManager struct { primaryBc beacon.Client fallbackBc beacon.Client @@ -204,7 +205,6 @@ func (m *BeaconClientManager) GetValidatorStatusByIndex(index string, opts *beac // Get a validator's status by its pubkey func (m *BeaconClientManager) GetValidatorStatus( - // c *cli.Context, pubkey types.ValidatorPubkey, opts *beacon.ValidatorStatusOptions, ) (beacon.ValidatorStatus, error) { @@ -317,6 +317,10 @@ func (m *BeaconClientManager) GetCommitteesForEpoch(epoch *uint64) ([]beacon.Com return result.([]beacon.Committee), nil } +func (m *BeaconClientManager) IsLocalTestnet() bool { + return m.localTestnet +} + /// ================== /// Internal Functions /// ================== diff --git a/stader/api/validator/deposit.go b/stader/api/validator/deposit.go index e2605b0f1..197d4d60f 100644 --- a/stader/api/validator/deposit.go +++ b/stader/api/validator/deposit.go @@ -316,12 +316,14 @@ func nodeDeposit(c *cli.Context, amountWei *big.Int, numValidators *big.Int, rel return nil, fmt.Errorf("Error checking for existing validator status: %w\nYour funds have not been deposited for your own safety.", err) } if status.Exists { - return nil, fmt.Errorf("**** ALERT ****\n"+ - "Your validator %s has the following as a validator pubkey:\n\t%s\n"+ - "This key is already in use by validator %d on the Beacon chain!\n"+ - "Stader will not allow you to deposit this validator for your own safety so you do not get slashed.\n"+ - "PLEASE REPORT THIS TO THE STADER DEVELOPERS.\n"+ - "***************\n", operatorRegistryInfo.OperatorName, pubKey.Hex(), status.Index) + if bc.IsLocalTestnet() == false { + return nil, fmt.Errorf("**** ALERT ****\n"+ + "Your validator %s has the following as a validator pubkey:\n\t%s\n"+ + "This key is already in use by validator %d on the Beacon chain!\n"+ + "Stader will not allow you to deposit this validator for your own safety so you do not get slashed.\n"+ + "PLEASE REPORT THIS TO THE STADER DEVELOPERS.\n"+ + "***************\n", operatorRegistryInfo.OperatorName, pubKey.Hex(), status.Index) + } } newValidatorKey = validatorKeyCount.Add(validatorKeyCount, big.NewInt(1)) From 54e498d7f41487d454e584c424dd8953e1b14092 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Mon, 26 Jun 2023 00:22:01 +0700 Subject: [PATCH 61/90] Run some more time --- testing/node_test.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/testing/node_test.go b/testing/node_test.go index e41ce19e1..8e199a8e5 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -80,14 +80,26 @@ func (s *StaderNodeSuite) TestNodeDeposit() { "api", "validator", "deposit", - eth.EthToWei(9).String(), + eth.EthToWei(4).String(), "1", "false", }) assert.Nil(s.T(), err) + + err = s.app.Run([]string{ + a[0], + "api", + "validator", + "deposit", + eth.EthToWei(4).String(), + "1", + "false", + }) + assert.Nil(s.T(), err) + }() - time.Sleep(time.Second * 30) + time.Sleep(time.Minute * 2) } // func (s *StaderNodeSuite) TestNode2() { From a5a3463eedd8fe77f62eb0eb817c22200d607736 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Mon, 26 Jun 2023 11:12:57 +0700 Subject: [PATCH 62/90] Update resp type --- testing/httptest/http.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/testing/httptest/http.go b/testing/httptest/http.go index 8ad19413b..1ca693bdb 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -113,7 +113,10 @@ func (s *StaderHandler) presignsSubmitted(w http.ResponseWriter, r *http.Request } func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") var preSignedMessages []stader_backend.PreSignSendApiRequestType + var resp []stader_backend.PreSignSendApiResponseType + err := json.NewDecoder(r.Body).Decode(&preSignedMessages) require.Nil(s.t, err) @@ -123,9 +126,13 @@ func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { _, err = crypto.DecryptUsingPublicKey(decodeSig, s.privatekey) require.Nil(s.t, err) + resp = append(resp, stader_backend.PreSignSendApiResponseType{ + Success: true, + Error: "", + }) } - w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(resp) } func (s *StaderHandler) presign(w http.ResponseWriter, r *http.Request) { From b820b8daaccc9426d9fb729c7aabbf3c400acf52 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Mon, 26 Jun 2023 11:33:19 +0700 Subject: [PATCH 63/90] Update response map --- testing/httptest/http.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/testing/httptest/http.go b/testing/httptest/http.go index 1ca693bdb..9359e808a 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -115,8 +115,7 @@ func (s *StaderHandler) presignsSubmitted(w http.ResponseWriter, r *http.Request func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") var preSignedMessages []stader_backend.PreSignSendApiRequestType - var resp []stader_backend.PreSignSendApiResponseType - + var preSignSendResponse map[string]stader_backend.PreSignSendApiResponseType err := json.NewDecoder(r.Body).Decode(&preSignedMessages) require.Nil(s.t, err) @@ -126,13 +125,13 @@ func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { _, err = crypto.DecryptUsingPublicKey(decodeSig, s.privatekey) require.Nil(s.t, err) - resp = append(resp, stader_backend.PreSignSendApiResponseType{ + preSignSendResponse[v.ValidatorPublicKey] = stader_backend.PreSignSendApiResponseType{ Success: true, Error: "", - }) + } } - json.NewEncoder(w).Encode(resp) + json.NewEncoder(w).Encode(preSignSendResponse) } func (s *StaderHandler) presign(w http.ResponseWriter, r *http.Request) { From 99f448791636d90f2c5f8f03e878a6e8156fa8ed Mon Sep 17 00:00:00 2001 From: batphonghan Date: Mon, 26 Jun 2023 11:41:49 +0700 Subject: [PATCH 64/90] Fix panic --- testing/httptest/http.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/httptest/http.go b/testing/httptest/http.go index 9359e808a..a481771ed 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -115,10 +115,10 @@ func (s *StaderHandler) presignsSubmitted(w http.ResponseWriter, r *http.Request func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") var preSignedMessages []stader_backend.PreSignSendApiRequestType - var preSignSendResponse map[string]stader_backend.PreSignSendApiResponseType err := json.NewDecoder(r.Body).Decode(&preSignedMessages) require.Nil(s.t, err) + preSignSendResponse := make(map[string]stader_backend.PreSignSendApiResponseType, len(preSignedMessages)) for _, v := range preSignedMessages { decodeSig, err := crypto.DecodeBase64(v.Signature) require.Nil(s.t, err) From eb8ac281f1484d2ea5fda56093f8fc36a5c1fc26 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Mon, 26 Jun 2023 12:00:54 +0700 Subject: [PATCH 65/90] Update data --- testing/httptest/http.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/testing/httptest/http.go b/testing/httptest/http.go index a481771ed..dea738ecd 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -94,7 +94,8 @@ func (s *StaderHandler) msgSubmitted(w http.ResponseWriter, r *http.Request) { var p map[string]bool for _, v := range validatorPubKeys { - p[v.String()] = false + _, ok := s.data[v.String()] + p[v.String()] = ok } json.NewEncoder(w).Encode(p) } @@ -107,7 +108,8 @@ func (s *StaderHandler) presignsSubmitted(w http.ResponseWriter, r *http.Request p := make(map[string]bool) for _, v := range validatorPubKeys.ValidatorPubKeys { - p[v.String()] = false + _, ok := s.data[v.String()] + p[v.String()] = ok } json.NewEncoder(w).Encode(p) } @@ -125,6 +127,7 @@ func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { _, err = crypto.DecryptUsingPublicKey(decodeSig, s.privatekey) require.Nil(s.t, err) + s.data[v.ValidatorPublicKey] = true preSignSendResponse[v.ValidatorPublicKey] = stader_backend.PreSignSendApiResponseType{ Success: true, Error: "", From 8d97cfb10769bfb2e7602193413d96cdde3421a0 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Mon, 26 Jun 2023 12:09:54 +0700 Subject: [PATCH 66/90] Reduce runtime --- testing/node_test.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/testing/node_test.go b/testing/node_test.go index 8e199a8e5..3688ff09a 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -48,10 +48,6 @@ func TestNodeSuite(t *testing.T) { suite.Run(t, s) } -// func (s *StaderNodeSuite) TestNodeDaemon() { -// time.Sleep(time.Second * 10) -// } - func (s *StaderNodeSuite) TestNodeDeposit() { // eth.EthToWei(100000). time.Sleep(time.Second) @@ -99,7 +95,7 @@ func (s *StaderNodeSuite) TestNodeDeposit() { }() - time.Sleep(time.Minute * 2) + time.Sleep(time.Second * 10) } // func (s *StaderNodeSuite) TestNode2() { @@ -145,7 +141,7 @@ func (s *StaderNodeSuite) SetupSuite() { err := s.app.Run([]string{ a[0], "--local-testnet=true", - "--presign-cooldown=5s", + "--presign-cooldown=3s", "node", }) require.Nil(s.T(), err) From 102dceb42cac39b686714d55e8e2083c9949e2ef Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 27 Jun 2023 12:41:31 +0700 Subject: [PATCH 67/90] Verify sig --- testing/httptest/http.go | 70 +++++++++++++++++++++++++++++++++++++++- testing/node_test.go | 2 +- 2 files changed, 70 insertions(+), 2 deletions(-) diff --git a/testing/httptest/http.go b/testing/httptest/http.go index dea738ecd..41f12d24c 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -7,12 +7,20 @@ import ( "encoding/json" "encoding/pem" "net/http" + "path/filepath" + "strconv" "testing" + "github.com/herumi/bls-eth-go-binary/bls" + "github.com/mitchellh/go-homedir" + "github.com/stader-labs/stader-node/shared/services" + "github.com/stader-labs/stader-node/shared/services/config" + "github.com/stader-labs/stader-node/shared/types/eth2" stader_backend "github.com/stader-labs/stader-node/shared/types/stader-backend" "github.com/stader-labs/stader-node/shared/utils/crypto" "github.com/stader-labs/stader-node/stader-lib/types" "github.com/stretchr/testify/require" + eth2types "github.com/wealdtech/go-eth2-types/v2" ) type StaderHandler struct { @@ -22,6 +30,21 @@ type StaderHandler struct { keyPEM []byte publickey *rsa.PublicKey privatekey *rsa.PrivateKey + bc *services.BeaconClientManager +} + +var ( + UserSettingPath = filepath.Join(ConfigPath, "user-settings.yml") + ConfigPath, _ = homedir.Expand("~/.stader_testing") +) + +func (s *StaderHandler) signatureDomain(t *testing.T, exitEpoch uint64) []byte { + + signatureDomain, err := s.bc.GetDomainData(eth2types.DomainVoluntaryExit[:], exitEpoch, false) + + require.Nil(t, err) + + return signatureDomain } func makeHanlde(t *testing.T) StaderHandler { @@ -30,6 +53,11 @@ func makeHanlde(t *testing.T) StaderHandler { publickey := &privatekey.PublicKey + cfg := config.NewStaderConfig(UserSettingPath, false) + + bc, err := services.NewBeaconClientManager(cfg) + require.Nil(t, err) + // Encode private key to PKCS#1 ASN.1 PEM. keyPEM := pem.EncodeToMemory( &pem.Block{ @@ -53,6 +81,7 @@ func makeHanlde(t *testing.T) StaderHandler { keyPEM: keyPEM, publickey: publickey, privatekey: privatekey, + bc: bc, } return s @@ -124,7 +153,18 @@ func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { for _, v := range preSignedMessages { decodeSig, err := crypto.DecodeBase64(v.Signature) require.Nil(s.t, err) - _, err = crypto.DecryptUsingPublicKey(decodeSig, s.privatekey) + + byteSig, err := crypto.DecryptUsingPublicKey(decodeSig, s.privatekey) + require.Nil(s.t, err) + + sig := bls.HashAndMapToSignature(byteSig) + rootHash := s.srHash(s.t, v) + + var pub bls.PublicKey + err = pub.Deserialize([]byte(v.ValidatorPublicKey)) + require.Nil(s.t, err) + + require.True(s.t, sig.VerifyByte(&pub, rootHash[:])) require.Nil(s.t, err) s.data[v.ValidatorPublicKey] = true @@ -149,3 +189,31 @@ func (s *StaderHandler) publicKey(w http.ResponseWriter, r *http.Request) { } json.NewEncoder(w).Encode(p) } + +func (s *StaderHandler) srHash(t *testing.T, request stader_backend.PreSignSendApiRequestType) [32]byte { + epoch, err := strconv.ParseUint(request.Message.Epoch, 10, 64) + require.Nil(t, err) + + validatorIndex, err := strconv.ParseUint(request.Message.ValidatorIndex, 10, 64) + require.Nil(t, err) + + exitMessage := eth2.VoluntaryExit{ + Epoch: epoch, + ValidatorIndex: validatorIndex, + } + + // Get object root + or, err := exitMessage.HashTreeRoot() + require.Nil(t, err) + + // Get signing root + sr := eth2.SigningRoot{ + ObjectRoot: or[:], + Domain: s.signatureDomain(t, epoch), + } + + srHash, err := sr.HashTreeRoot() + require.Nil(t, err) + + return srHash +} diff --git a/testing/node_test.go b/testing/node_test.go index 3688ff09a..6af7ab9e0 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -95,7 +95,7 @@ func (s *StaderNodeSuite) TestNodeDeposit() { }() - time.Sleep(time.Second * 10) + time.Sleep(time.Second * 20) } // func (s *StaderNodeSuite) TestNode2() { From c7cf4b04d7d6313bfee76890a6a6e9eb4e88ac96 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 27 Jun 2023 14:38:53 +0700 Subject: [PATCH 68/90] Get client --- testing/httptest/http.go | 12 +++++------- testing/httptest/http_test.go | 2 +- testing/node_test.go | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/testing/httptest/http.go b/testing/httptest/http.go index 41f12d24c..4e16c39ce 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -14,12 +14,12 @@ import ( "github.com/herumi/bls-eth-go-binary/bls" "github.com/mitchellh/go-homedir" "github.com/stader-labs/stader-node/shared/services" - "github.com/stader-labs/stader-node/shared/services/config" "github.com/stader-labs/stader-node/shared/types/eth2" stader_backend "github.com/stader-labs/stader-node/shared/types/stader-backend" "github.com/stader-labs/stader-node/shared/utils/crypto" "github.com/stader-labs/stader-node/stader-lib/types" "github.com/stretchr/testify/require" + "github.com/urfave/cli" eth2types "github.com/wealdtech/go-eth2-types/v2" ) @@ -47,15 +47,13 @@ func (s *StaderHandler) signatureDomain(t *testing.T, exitEpoch uint64) []byte { return signatureDomain } -func makeHanlde(t *testing.T) StaderHandler { +func makeHanlde(t *testing.T, c *cli.Context) StaderHandler { privatekey, err := rsa.GenerateKey(rand.Reader, 2048*2) require.Nil(t, err) publickey := &privatekey.PublicKey - cfg := config.NewStaderConfig(UserSettingPath, false) - - bc, err := services.NewBeaconClientManager(cfg) + bc, err := services.GetBeaconClient(c) require.Nil(t, err) // Encode private key to PKCS#1 ASN.1 PEM. @@ -87,9 +85,9 @@ func makeHanlde(t *testing.T) StaderHandler { return s } -func SererHttp(t *testing.T) { +func SererHttp(t *testing.T, c *cli.Context) { mux := http.NewServeMux() - s := makeHanlde(t) + s := makeHanlde(t, c) mux.HandleFunc("/presign", s.presign) mux.HandleFunc("/presigns", s.presigns) mux.HandleFunc("/msgSubmitted", s.msgSubmitted) diff --git a/testing/httptest/http_test.go b/testing/httptest/http_test.go index a61a234da..852b3d4d9 100644 --- a/testing/httptest/http_test.go +++ b/testing/httptest/http_test.go @@ -8,7 +8,7 @@ import ( ) func TestMakeHanlde(t *testing.T) { - s := makeHanlde(t) + s := makeHanlde(t, nil) exitSignature := "a49d4586ff218ee472db91b89e6ee5ff0f0f881ecd42fe5a79420efd44371be8cce5be25641ebb223aa5e8580ceec0b913c2d7f4077b21ebd55287451d2d2384b7813382aa6860a3785fae9a23460a1bbfaf483f86db5ec68ac502f945a88423" diff --git a/testing/node_test.go b/testing/node_test.go index 6af7ab9e0..9f5ae7b8c 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -154,7 +154,7 @@ func (s *StaderNodeSuite) SetupSuite() { require.Nil(s.T(), r) }() - httptest.SererHttp(s.T()) + httptest.SererHttp(s.T(), c) }() } From 5f361afe546f09b350113af4ee17df437b003bed Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 27 Jun 2023 15:55:41 +0700 Subject: [PATCH 69/90] Inject client --- testing/configHelper_test.go | 4 ++++ testing/httptest/http.go | 8 ++------ testing/node_test.go | 4 +++- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index e03e76fb3..3b28c0021 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -189,6 +189,10 @@ func (s *StaderNodeSuite) setConfig(c *cli.Context, elURL string, clURL string) err = staderClient.SaveConfig(cfg) require.Nil(s.T(), err) + + bc, err := services.GetBeaconClient(c) + require.Nil(s.T(), err) + s.bc = bc } func (s *StaderNodeSuite) staderConfig( diff --git a/testing/httptest/http.go b/testing/httptest/http.go index 4e16c39ce..5d853076f 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -19,7 +19,6 @@ import ( "github.com/stader-labs/stader-node/shared/utils/crypto" "github.com/stader-labs/stader-node/stader-lib/types" "github.com/stretchr/testify/require" - "github.com/urfave/cli" eth2types "github.com/wealdtech/go-eth2-types/v2" ) @@ -47,15 +46,12 @@ func (s *StaderHandler) signatureDomain(t *testing.T, exitEpoch uint64) []byte { return signatureDomain } -func makeHanlde(t *testing.T, c *cli.Context) StaderHandler { +func makeHanlde(t *testing.T, bc *services.BeaconClientManager) StaderHandler { privatekey, err := rsa.GenerateKey(rand.Reader, 2048*2) require.Nil(t, err) publickey := &privatekey.PublicKey - bc, err := services.GetBeaconClient(c) - require.Nil(t, err) - // Encode private key to PKCS#1 ASN.1 PEM. keyPEM := pem.EncodeToMemory( &pem.Block{ @@ -85,7 +81,7 @@ func makeHanlde(t *testing.T, c *cli.Context) StaderHandler { return s } -func SererHttp(t *testing.T, c *cli.Context) { +func SererHttp(t *testing.T, bc *services.BeaconClientManager) { mux := http.NewServeMux() s := makeHanlde(t, c) mux.HandleFunc("/presign", s.presign) diff --git a/testing/node_test.go b/testing/node_test.go index 9f5ae7b8c..cd54a6053 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -17,6 +17,7 @@ import ( //stader/register.go + "github.com/stader-labs/stader-node/shared/services" "github.com/stader-labs/stader-node/stader-lib/utils/eth" _ "github.com/stader-labs/stader-node/stader-lib/utils/eth" "github.com/stader-labs/stader-node/testing/httptest" @@ -34,6 +35,7 @@ type StaderNodeSuite struct { pool *dockertest.Pool anvil *dockertest.Resource client *ethclient.Client + bc *services.BeaconClientManager } var ( @@ -154,7 +156,7 @@ func (s *StaderNodeSuite) SetupSuite() { require.Nil(s.T(), r) }() - httptest.SererHttp(s.T(), c) + httptest.SererHttp(s.T(), s.bc) }() } From ad991a7523b56423398638087511ea39aa09b404 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 27 Jun 2023 16:05:10 +0700 Subject: [PATCH 70/90] Fix build --- testing/httptest/http.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/httptest/http.go b/testing/httptest/http.go index 5d853076f..126bfdcc1 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -83,7 +83,7 @@ func makeHanlde(t *testing.T, bc *services.BeaconClientManager) StaderHandler { func SererHttp(t *testing.T, bc *services.BeaconClientManager) { mux := http.NewServeMux() - s := makeHanlde(t, c) + s := makeHanlde(t, bc) mux.HandleFunc("/presign", s.presign) mux.HandleFunc("/presigns", s.presigns) mux.HandleFunc("/msgSubmitted", s.msgSubmitted) From 62da3b7bf5e349aa6e50000e7a4f36543508f69a Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 27 Jun 2023 16:27:36 +0700 Subject: [PATCH 71/90] Put some logs --- testing/httptest/http.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/testing/httptest/http.go b/testing/httptest/http.go index 126bfdcc1..02ff3b9fc 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -6,6 +6,7 @@ import ( "crypto/x509" "encoding/json" "encoding/pem" + "fmt" "net/http" "path/filepath" "strconv" @@ -160,6 +161,8 @@ func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { require.True(s.t, sig.VerifyByte(&pub, rootHash[:])) + fmt.Printf("Success verify signature with pubkey: [%+v] \n", pub.GetHexString()) + require.Nil(s.t, err) s.data[v.ValidatorPublicKey] = true preSignSendResponse[v.ValidatorPublicKey] = stader_backend.PreSignSendApiResponseType{ From d43df97442096467a8f0d79c2196e3de9198ae57 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 27 Jun 2023 17:35:00 +0700 Subject: [PATCH 72/90] Update update localtestnet --- shared/services/services.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/services/services.go b/shared/services/services.go index e13a609a7..8fa1cf445 100644 --- a/shared/services/services.go +++ b/shared/services/services.go @@ -533,7 +533,7 @@ func getBeaconClient(c *cli.Context, cfg *config.StaderConfig) (*BeaconClientMan bcManager.primaryReady = false } - if c.GlobalIsSet("local-testnet") { + if c.GlobalBool("local-testnet") { bcManager.localTestnet = true } } From e9619d3a40c3ed48c4b95723d1484a29b1b8758e Mon Sep 17 00:00:00 2001 From: batphonghan Date: Tue, 27 Jun 2023 18:34:21 +0700 Subject: [PATCH 73/90] Fix verify --- testing/httptest/http.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/testing/httptest/http.go b/testing/httptest/http.go index 02ff3b9fc..db641dbee 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -19,6 +19,7 @@ import ( stader_backend "github.com/stader-labs/stader-node/shared/types/stader-backend" "github.com/stader-labs/stader-node/shared/utils/crypto" "github.com/stader-labs/stader-node/stader-lib/types" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" eth2types "github.com/wealdtech/go-eth2-types/v2" ) @@ -152,16 +153,21 @@ func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { byteSig, err := crypto.DecryptUsingPublicKey(decodeSig, s.privatekey) require.Nil(s.t, err) - sig := bls.HashAndMapToSignature(byteSig) + var sig bls.Sign + err = sig.DeserializeHexStr(string(byteSig)) + require.Nil(s.t, err) + rootHash := s.srHash(s.t, v) var pub bls.PublicKey - err = pub.Deserialize([]byte(v.ValidatorPublicKey)) + err = pub.DeserializeHexStr(v.ValidatorPublicKey) require.Nil(s.t, err) - require.True(s.t, sig.VerifyByte(&pub, rootHash[:])) + require.Nil(s.t, err) + verify := sig.VerifyHash(&pub, rootHash[:]) + assert.True(s.t, verify) - fmt.Printf("Success verify signature with pubkey: [%+v] \n", pub.GetHexString()) + fmt.Printf("Success verify signature with pubkey: [%+v] [%+v] [%+v]\n", pub, sig, rootHash) require.Nil(s.t, err) s.data[v.ValidatorPublicKey] = true From c89f4fe2c87a3a8ac64f5b55142a442337cf34ff Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 28 Jun 2023 11:35:29 +0700 Subject: [PATCH 74/90] Update new flow --- .../local-testnet-presign-public-key.txt | 1 + shared/services/config/stadernode-config.go | 4 + testing/httptest/http.go | 73 +++++++++++++++++-- testing/httptest/http_test.go | 18 +++-- 4 files changed, 84 insertions(+), 12 deletions(-) create mode 100644 shared/services/config/local-testnet-presign-public-key.txt diff --git a/shared/services/config/local-testnet-presign-public-key.txt b/shared/services/config/local-testnet-presign-public-key.txt new file mode 100644 index 000000000..a68247e29 --- /dev/null +++ b/shared/services/config/local-testnet-presign-public-key.txt @@ -0,0 +1 @@ +LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBc0NabWF6Y3RLMXJXUUVFSnU1dGQKNHhGY1B1VTdBcGdDWEZYWGhseU92dmo5cXFWcDBmZVpFMTNWUTRjc3Arc1ZLaVNETGVEb2VqVkRHNDhvL3VGaQp5WVpmaTZjd2JENUJ1RFFyd3JWQlhaQUlhZ0lZazdiNUhKNlJpcURSK3Ixekh3NkVLRUs2YTl0WUNOQVpmRG5sCjBWWGw2WHJuUFFCWjNXM2FDaW12K2RwTURMVGhpYWtvYStCK2ZVNXBUOHpPdkREVHdGbm1JWlB5dFNNRFNnTncKYTYyNVhhVE9TaFhsdngySnpwWG52MHgyWEI0ODZ4VUwwZUlaWnBOMjN0eVpMQ2M5OW5MOERUeFhheXAwU3JIVgpuRGJGNzJRV1hpNk1ITFVTQm9pclJyOUZzWjJndzhjcFZrMU5PT0MzWjBLZjBncjZaTks5d1MvSXY3T0Vtd2NpCkZnZEJLd05oRk0vYzEzZDJXR0lWMHhXUXQ0a2lUVjFTenhwWUl0Nmo0U1kwaFBoWE9XWkFsRWwzQWRpMUVuTGsKbFZVbEJjV2haY3dLVlVzYnQ3TnpLY1ZPK1hWNWJZTlE0azluZGx2eGxRU216WmU2RTl0R004bnhoYTJyTFBHawpONklSQVRwNEVoTnNmQnZXSHViTS9NeVBiVkV1S1BYeXhGMWs2N2JHL2Rlb0RDbnN2VGMwbE9YdWxnUjhqaCtTCmlaOGpMWEkzS2NHZGdqc2p6U2wvaVlrOGUvWjRWakF3ZjVmYkZjMXdCYjNvTFZRUllIdzc2anhFckFIWXZpaDUKL25QYlZsNXlvbFVIcWM5RW50S1ZBb0x4dTBmMUtsTHRidEVtL09xeW51c08vOUh4L0VFZk5QYVpTN3ZJVFZqbgpWUUpVTzZVdVBmdG8yam1WaGhwU2FwOENBd0VBQVE9PQotLS0tLUVORCBSU0EgUFVCTElDIEtFWS0tLS0tCg== \ No newline at end of file diff --git a/shared/services/config/stadernode-config.go b/shared/services/config/stadernode-config.go index 6a24b99f3..d89aba908 100644 --- a/shared/services/config/stadernode-config.go +++ b/shared/services/config/stadernode-config.go @@ -59,6 +59,9 @@ var stageEncryptionKey string //go:embed dev-presign-public-key.txt var devEncryptionKey string +//go:embed local-testnet-presign-public-key.txt +var localTestnetEncryptionKey string + // --ignore-sync-check // Defaults const defaultProjectName string = "stader" @@ -281,6 +284,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Devnet: devEncryptionKey, config.Network_Mainnet: prodEncryptionKey, config.Network_Zhejiang: stageEncryptionKey, + config.Network_Local: localTestnetEncryptionKey, }, } } diff --git a/testing/httptest/http.go b/testing/httptest/http.go index db641dbee..6090d6cab 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -1,7 +1,6 @@ package httptest import ( - "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/json" @@ -48,25 +47,85 @@ func (s *StaderHandler) signatureDomain(t *testing.T, exitEpoch uint64) []byte { return signatureDomain } +var ( + // filename = "localocal-testnet-presign-public-key" + bitSize = 4096 + pemString = `-----BEGIN RSA PRIVATE KEY----- + MIIJKgIBAAKCAgEAsCZmazctK1rWQEEJu5td4xFcPuU7ApgCXFXXhlyOvvj9qqVp + 0feZE13VQ4csp+sVKiSDLeDoejVDG48o/uFiyYZfi6cwbD5BuDQrwrVBXZAIagIY + k7b5HJ6RiqDR+r1zHw6EKEK6a9tYCNAZfDnl0VXl6XrnPQBZ3W3aCimv+dpMDLTh + iakoa+B+fU5pT8zOvDDTwFnmIZPytSMDSgNwa625XaTOShXlvx2JzpXnv0x2XB48 + 6xUL0eIZZpN23tyZLCc99nL8DTxXayp0SrHVnDbF72QWXi6MHLUSBoirRr9FsZ2g + w8cpVk1NOOC3Z0Kf0gr6ZNK9wS/Iv7OEmwciFgdBKwNhFM/c13d2WGIV0xWQt4ki + TV1SzxpYIt6j4SY0hPhXOWZAlEl3Adi1EnLklVUlBcWhZcwKVUsbt7NzKcVO+XV5 + bYNQ4k9ndlvxlQSmzZe6E9tGM8nxha2rLPGkN6IRATp4EhNsfBvWHubM/MyPbVEu + KPXyxF1k67bG/deoDCnsvTc0lOXulgR8jh+SiZ8jLXI3KcGdgjsjzSl/iYk8e/Z4 + VjAwf5fbFc1wBb3oLVQRYHw76jxErAHYvih5/nPbVl5yolUHqc9EntKVAoLxu0f1 + KlLtbtEm/OqynusO/9Hx/EEfNPaZS7vITVjnVQJUO6UuPfto2jmVhhpSap8CAwEA + AQKCAgEApR0pjcBnp6b7A7mzHNbyt6CTPiVzHehM9i5E2x4xc9NDO8zXl0gmhZ/E + AwtXEYNrEFivWbbjU4JPiCq2O8wa5Fn/f5FU83Gb+sV0a4upXMFhEbUrQnMVqPz9 + 4dsDWKxyl57sxCxgQC+XopMmAGrpAEMrQqLA1E5a7hNFeZc/68zy0kpOytH0IMKK + 7nwsfO+2rXJ7WmcqLzlWHPJX5+23WEe8ZInSEGHcPDu87BdZ5tgObiSt55GPxcnR + E3SQzTAsp9WU4ElB+Eoii0J9RXLSjx5MhSvlR50MGvCjl9pN6f/qnSXrBvjNx6ao + BvOlFra9xo4hzZY45jgbTY5Bc2vJRxx9sZJiHG6r3Q2eJUvnnwbw8h3U8s0fZ2BD + 3OrKhJfId82FI3T9nTn0WuTpsOsNXqC76yuYgF8X38a4DQFOsDf706bDpgIum6qA + 1gbWZKhOn1rZhgLFyuX4HUkqMLksMQ43xU1rmj5OmBl93NjmqwYCX2BmiJc7gTvX + GG533v5hX3YIDuTxKPd5tZYpeXnG8k1ugE0Z01/bU1wB0+lvm85wXj5HH8oCyC7Z + CybxS21kGLVrGc1Z/hE/6WrMtRCvEUbArimUlhf24IMfvmJlZtXCSzP6IM2gdmLl + WwBi3qKEoU7kHEJVSBlZEoQuPJ644Ir1OVoF7ZJfx4/XF3ha2vECggEBANpMhcPD + AQHbjRSqkYXhOmZuAyCRUUNKBk3zFmaRz8pdU017VAQHDBSOj9m0UygmV579LR1X + GovmC68TY6tq4ntZRH543xWpjroDwVGFkRj0z1w3sUbWP5971MpPviC7kQuVkigi + 8lBlT5edpGagyytdXEuh82DYmV5KNKtIwqhMMm4iybMTSycTI19h1ULVbIWINc6T + h5k3Sn0g2z/kTdyfgI9os2vU8U4ymkIPpdhHb+JVupKNCtiUJR0qqA/ju/ApvRaF + aCFgrgDVBkLgkJDeVkxBw+lWdtiFUZBqNjyG7KeEz6oC+giUCnN2gGwtISbL82b4 + PMZwzDcv7lfLnrcCggEBAM6SYX8gzBp7T0FmC6uIMTmW2+cVqO9ff8jxdt+hOHNi + rb1kHsiBjvFaoAoLNCGIHzkrHBTvyPVJwHyoZyDmVoWMKNzZ7Ce/x9zUyLc9yA8a + fS2h/pSjXvpz4IxQMbbDfo0TzMOCRQN0bgvreWKEIc7QJ5rnPUWj4t0ZFrGtvYph + AZANFy4AIjMYr4q5qvFIGbGbiyVUGESiQ10GkzOj2qwf+kD+4hFBB8C9xfFhlwPD + cdbhxxuDF/evsvNwo++fP7GlgGJywbCt1jjCPlGBRi4hPhONio95LCxXFXcSKMIe + 7UZQ+T0+rvX3gOlegNBRI+bX425u+z4F4tzq9Pacq1kCggEBAIvWxUGYI4cLG58H + fN0kYILJKlusez/9pXg9pjXiZheeHQTfYfyKfySUBnZRW4u2tB521HWdHLZNkWJ/ + qzNd7uNRVd0mlNGNoo5qZWZRh5dTC5ppWrij+nGxo6hN2N+jB9FB6TSo3ky9+XSI + WY4cpsmKrtsMTZnWZrjOFFs86uVgmlWPF2INk/DeA6TQSQrdKP2JOd6xBwYRMzhg + 2dJd77rKulIjofwLluCe7c4vs++OI4/7lt7WVwJSNEwwzSQQoI3CTwykPQZUpmKG + E9K3hCQpKWMEJfnNl6gwDwXR5Bh13heZrmWcLotcOi2o1a92YWw27h8iGdyM2WTo + 4WeAWpUCggEBALJyVXLivC5sM00FgDNP1WYwYgq/9U3Dq7nEjbIlrYRPzFJ9OPJw + qTDp3rKOdxw4YPCbwwh7E5iBe5y0RVJwaHG5YFtYjd7QlzC3SCSzZC1X7qcK98cj + Uhr9Gw9a/3cobhwk7JA/6qpPW/lEE3n9Ns9Xlb8E3zNXndTtpWMb+U6e+iCcjleY + mfKV8p7eQUNpy3hYK921RbmUiqjD00ma1H44qZCYHmZVTQM9bM9WRIRlw+Oi6sNj + fcLjrq0JszR+1yD5HWzuQVAE+7fQZNE34Y5b/Soa7YV/YZ90IwDXWQpIeSRzMrur + eKzWgDAZCSHr1h3GhZuSl8s+fnnlJnQbZxECggEAXO+npM58mv3dpHP5sC8XNtr6 + 5YJPJu3eHRP5DDINLpzXyxRlves9CLLubjP4DRsta0Jvlrs/eqH7kh6Q8qoiJyP2 + h2cODRDLZbTuY7NZfxLSFG3e1XrQldLEfYw+EppJn/9tSvqvtqbS+O9CYJ9uM8Ij + VDGsilRxPtggeN6PGF+VLrPibPnDr+9pMzkaKzzHlbjwANWo6KeNx5xG9ygpTCF6 + HbfdGazf1YZGhC8CKp1rvRjFmEc8/73fHAS1VKUGCZFqlecnmDv0mezlZ2ydTHYj + tEbw5JHQ0ChHoykXy9fsItCYof4uIkA0ZIFvVpEYrCM+TLpNI4ilizPl6nhojg== + -----END RSA PRIVATE KEY----- + ` +) + func makeHanlde(t *testing.T, bc *services.BeaconClientManager) StaderHandler { - privatekey, err := rsa.GenerateKey(rand.Reader, 2048*2) + block, _ := pem.Decode([]byte(pemString)) + privatekey, err := x509.ParsePKCS1PrivateKey(block.Bytes) require.Nil(t, err) - publickey := &privatekey.PublicKey - // Encode private key to PKCS#1 ASN.1 PEM. keyPEM := pem.EncodeToMemory( &pem.Block{ Type: "RSA PRIVATE KEY", - Bytes: x509.MarshalPKCS1PrivateKey(privatekey), + Bytes: block.Bytes, }, ) - // Encode public key to PKCS#1 ASN.1 PEM. + publickey := &privatekey.PublicKey + + pubkeyIX, err := x509.MarshalPKIXPublicKey(publickey) + require.Nil(t, err) + pubPEM := pem.EncodeToMemory( &pem.Block{ Type: "RSA PUBLIC KEY", - Bytes: x509.MarshalPKCS1PublicKey(publickey), + Bytes: pubkeyIX, }, ) diff --git a/testing/httptest/http_test.go b/testing/httptest/http_test.go index 852b3d4d9..66a69c058 100644 --- a/testing/httptest/http_test.go +++ b/testing/httptest/http_test.go @@ -1,17 +1,25 @@ package httptest import ( + "crypto/x509" + "encoding/pem" "testing" - "github.com/stader-labs/stader-node/shared/utils/crypto" "github.com/stretchr/testify/require" ) -func TestMakeHanlde(t *testing.T) { - s := makeHanlde(t, nil) +// func TestMakeHanlde(t *testing.T) { +// s := makeHanlde(t, nil) - exitSignature := "a49d4586ff218ee472db91b89e6ee5ff0f0f881ecd42fe5a79420efd44371be8cce5be25641ebb223aa5e8580ceec0b913c2d7f4077b21ebd55287451d2d2384b7813382aa6860a3785fae9a23460a1bbfaf483f86db5ec68ac502f945a88423" +// exitSignature := "a49d4586ff218ee472db91b89e6ee5ff0f0f881ecd42fe5a79420efd44371be8cce5be25641ebb223aa5e8580ceec0b913c2d7f4077b21ebd55287451d2d2384b7813382aa6860a3785fae9a23460a1bbfaf483f86db5ec68ac502f945a88423" - _, err := crypto.EncryptUsingPublicKey([]byte(exitSignature), s.publickey) +// _, err := crypto.EncryptUsingPublicKey([]byte(exitSignature), s.publickey) +// require.Nil(t, err) +// } + +func TestReadFromFile(t *testing.T) { + block, _ := pem.Decode([]byte(pemString)) + key, err := x509.ParsePKCS1PrivateKey(block.Bytes) require.Nil(t, err) + require.NotNil(t, key) } From 485204c4e44f317c6f009deb88ee1b44b5d4a6e4 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 28 Jun 2023 12:47:10 +0700 Subject: [PATCH 75/90] Fix test failed --- .../local-testnet-presign-public-key.txt | 2 +- testing/httptest/http.go | 75 +++++-------------- testing/httptest/http_test.go | 17 +++-- .../localocal-testnet-presign-key.rsa | 51 +++++++++++++ testing/node_test.go | 37 ++++----- 5 files changed, 100 insertions(+), 82 deletions(-) create mode 100755 testing/httptest/localocal-testnet-presign-key.rsa diff --git a/shared/services/config/local-testnet-presign-public-key.txt b/shared/services/config/local-testnet-presign-public-key.txt index a68247e29..e1b9fbb27 100644 --- a/shared/services/config/local-testnet-presign-public-key.txt +++ b/shared/services/config/local-testnet-presign-public-key.txt @@ -1 +1 @@ -LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBc0NabWF6Y3RLMXJXUUVFSnU1dGQKNHhGY1B1VTdBcGdDWEZYWGhseU92dmo5cXFWcDBmZVpFMTNWUTRjc3Arc1ZLaVNETGVEb2VqVkRHNDhvL3VGaQp5WVpmaTZjd2JENUJ1RFFyd3JWQlhaQUlhZ0lZazdiNUhKNlJpcURSK3Ixekh3NkVLRUs2YTl0WUNOQVpmRG5sCjBWWGw2WHJuUFFCWjNXM2FDaW12K2RwTURMVGhpYWtvYStCK2ZVNXBUOHpPdkREVHdGbm1JWlB5dFNNRFNnTncKYTYyNVhhVE9TaFhsdngySnpwWG52MHgyWEI0ODZ4VUwwZUlaWnBOMjN0eVpMQ2M5OW5MOERUeFhheXAwU3JIVgpuRGJGNzJRV1hpNk1ITFVTQm9pclJyOUZzWjJndzhjcFZrMU5PT0MzWjBLZjBncjZaTks5d1MvSXY3T0Vtd2NpCkZnZEJLd05oRk0vYzEzZDJXR0lWMHhXUXQ0a2lUVjFTenhwWUl0Nmo0U1kwaFBoWE9XWkFsRWwzQWRpMUVuTGsKbFZVbEJjV2haY3dLVlVzYnQ3TnpLY1ZPK1hWNWJZTlE0azluZGx2eGxRU216WmU2RTl0R004bnhoYTJyTFBHawpONklSQVRwNEVoTnNmQnZXSHViTS9NeVBiVkV1S1BYeXhGMWs2N2JHL2Rlb0RDbnN2VGMwbE9YdWxnUjhqaCtTCmlaOGpMWEkzS2NHZGdqc2p6U2wvaVlrOGUvWjRWakF3ZjVmYkZjMXdCYjNvTFZRUllIdzc2anhFckFIWXZpaDUKL25QYlZsNXlvbFVIcWM5RW50S1ZBb0x4dTBmMUtsTHRidEVtL09xeW51c08vOUh4L0VFZk5QYVpTN3ZJVFZqbgpWUUpVTzZVdVBmdG8yam1WaGhwU2FwOENBd0VBQVE9PQotLS0tLUVORCBSU0EgUFVCTElDIEtFWS0tLS0tCg== \ No newline at end of file +LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBdkJYVm5iWit0QWMzQy81eWpsQ2oKdnhXN3UwVEpTNjBPN3hjeHB1TEE0OUdhM0xYT0V4UG9wY1RhU3U1MTRkSkFYOC9Bdm5XZEtwQ29hL2x0V05wQgplNzk1eXRYNU53eGFiV3kvd2Y4ZG04ZEJBZ2lMUGhNdGZwTXd5eThNS1QwOXhkcU1oRENPQ3BwcG51a1Q5UU5KClVyMGlkV2tNU3FTQnM4Tm8yMjlCTG1CWVFTbWJlV3Y0QmRDK3lEL0ZicUVoSXdDL2ZrVy9Nc210dE9WU1RScksKMzhHcm85SmVWVGhBMUpyTXIzUWgyMzJOejhmNzRHbG5qb2ZUVmhjNzVOd00xcWgvV1lPb1N0ZjVobnJ5K1dvSgpieURpb2tpRm9YS1BPcy83NDNkdDJWQWllZTdFd0JDOTZzKzhoSnNLTW5hZzYyUFRtRDQwS212V1Z1aU9UTngxCmNhWG1RNzQ2eVJkaHVubU8wMjNJb3JaRGsrVTZTQStwcmpXaFE5c1oxWWw5NFA5NklBZzFvV2VtQmZLb3lHYWIKZG9ndTdRU0QyRit1cHJ0TEFOYks4TlhVL1pUT2l5MUtBd01tWjVYaWdDODRySUFaeEo2RUo5M0hheDZRM2hIagpBM0grUGdqTzFYSVdPL1hybmh0SWFoM2J6c2N6U2RJMkRMOHFyaWNnOThxY3FlbnVyYWh1dW5SVEFiKzR0M1B1CmNEclVXZVFYa3I1eFVESEQxTHpEeDlvSjI1TmdJVFA2dmtMei9xTjVpZ3BTMnQ1c285d24yWHdlZVZSWC9zRnYKNlpDc1ZOUkhGOS92UHpQcWRJR210OS9NZUZRd2xHSnNURENMLzExWjFQc01iNGpYZlpMNnMvb2xDekVtbVVjTwpTVXpncUNJSXF5UDhwVkJQQ0MwdzkzOENBd0VBQVE9PQotLS0tLUVORCBSU0EgUFVCTElDIEtFWS0tLS0tCg== \ No newline at end of file diff --git a/testing/httptest/http.go b/testing/httptest/http.go index 6090d6cab..76de90ddd 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -3,6 +3,7 @@ package httptest import ( "crypto/rsa" "crypto/x509" + _ "embed" "encoding/json" "encoding/pem" "fmt" @@ -47,73 +48,25 @@ func (s *StaderHandler) signatureDomain(t *testing.T, exitEpoch uint64) []byte { return signatureDomain } +//go:embed localocal-testnet-presign-key.rsa +var pemString string + var ( - // filename = "localocal-testnet-presign-public-key" - bitSize = 4096 - pemString = `-----BEGIN RSA PRIVATE KEY----- - MIIJKgIBAAKCAgEAsCZmazctK1rWQEEJu5td4xFcPuU7ApgCXFXXhlyOvvj9qqVp - 0feZE13VQ4csp+sVKiSDLeDoejVDG48o/uFiyYZfi6cwbD5BuDQrwrVBXZAIagIY - k7b5HJ6RiqDR+r1zHw6EKEK6a9tYCNAZfDnl0VXl6XrnPQBZ3W3aCimv+dpMDLTh - iakoa+B+fU5pT8zOvDDTwFnmIZPytSMDSgNwa625XaTOShXlvx2JzpXnv0x2XB48 - 6xUL0eIZZpN23tyZLCc99nL8DTxXayp0SrHVnDbF72QWXi6MHLUSBoirRr9FsZ2g - w8cpVk1NOOC3Z0Kf0gr6ZNK9wS/Iv7OEmwciFgdBKwNhFM/c13d2WGIV0xWQt4ki - TV1SzxpYIt6j4SY0hPhXOWZAlEl3Adi1EnLklVUlBcWhZcwKVUsbt7NzKcVO+XV5 - bYNQ4k9ndlvxlQSmzZe6E9tGM8nxha2rLPGkN6IRATp4EhNsfBvWHubM/MyPbVEu - KPXyxF1k67bG/deoDCnsvTc0lOXulgR8jh+SiZ8jLXI3KcGdgjsjzSl/iYk8e/Z4 - VjAwf5fbFc1wBb3oLVQRYHw76jxErAHYvih5/nPbVl5yolUHqc9EntKVAoLxu0f1 - KlLtbtEm/OqynusO/9Hx/EEfNPaZS7vITVjnVQJUO6UuPfto2jmVhhpSap8CAwEA - AQKCAgEApR0pjcBnp6b7A7mzHNbyt6CTPiVzHehM9i5E2x4xc9NDO8zXl0gmhZ/E - AwtXEYNrEFivWbbjU4JPiCq2O8wa5Fn/f5FU83Gb+sV0a4upXMFhEbUrQnMVqPz9 - 4dsDWKxyl57sxCxgQC+XopMmAGrpAEMrQqLA1E5a7hNFeZc/68zy0kpOytH0IMKK - 7nwsfO+2rXJ7WmcqLzlWHPJX5+23WEe8ZInSEGHcPDu87BdZ5tgObiSt55GPxcnR - E3SQzTAsp9WU4ElB+Eoii0J9RXLSjx5MhSvlR50MGvCjl9pN6f/qnSXrBvjNx6ao - BvOlFra9xo4hzZY45jgbTY5Bc2vJRxx9sZJiHG6r3Q2eJUvnnwbw8h3U8s0fZ2BD - 3OrKhJfId82FI3T9nTn0WuTpsOsNXqC76yuYgF8X38a4DQFOsDf706bDpgIum6qA - 1gbWZKhOn1rZhgLFyuX4HUkqMLksMQ43xU1rmj5OmBl93NjmqwYCX2BmiJc7gTvX - GG533v5hX3YIDuTxKPd5tZYpeXnG8k1ugE0Z01/bU1wB0+lvm85wXj5HH8oCyC7Z - CybxS21kGLVrGc1Z/hE/6WrMtRCvEUbArimUlhf24IMfvmJlZtXCSzP6IM2gdmLl - WwBi3qKEoU7kHEJVSBlZEoQuPJ644Ir1OVoF7ZJfx4/XF3ha2vECggEBANpMhcPD - AQHbjRSqkYXhOmZuAyCRUUNKBk3zFmaRz8pdU017VAQHDBSOj9m0UygmV579LR1X - GovmC68TY6tq4ntZRH543xWpjroDwVGFkRj0z1w3sUbWP5971MpPviC7kQuVkigi - 8lBlT5edpGagyytdXEuh82DYmV5KNKtIwqhMMm4iybMTSycTI19h1ULVbIWINc6T - h5k3Sn0g2z/kTdyfgI9os2vU8U4ymkIPpdhHb+JVupKNCtiUJR0qqA/ju/ApvRaF - aCFgrgDVBkLgkJDeVkxBw+lWdtiFUZBqNjyG7KeEz6oC+giUCnN2gGwtISbL82b4 - PMZwzDcv7lfLnrcCggEBAM6SYX8gzBp7T0FmC6uIMTmW2+cVqO9ff8jxdt+hOHNi - rb1kHsiBjvFaoAoLNCGIHzkrHBTvyPVJwHyoZyDmVoWMKNzZ7Ce/x9zUyLc9yA8a - fS2h/pSjXvpz4IxQMbbDfo0TzMOCRQN0bgvreWKEIc7QJ5rnPUWj4t0ZFrGtvYph - AZANFy4AIjMYr4q5qvFIGbGbiyVUGESiQ10GkzOj2qwf+kD+4hFBB8C9xfFhlwPD - cdbhxxuDF/evsvNwo++fP7GlgGJywbCt1jjCPlGBRi4hPhONio95LCxXFXcSKMIe - 7UZQ+T0+rvX3gOlegNBRI+bX425u+z4F4tzq9Pacq1kCggEBAIvWxUGYI4cLG58H - fN0kYILJKlusez/9pXg9pjXiZheeHQTfYfyKfySUBnZRW4u2tB521HWdHLZNkWJ/ - qzNd7uNRVd0mlNGNoo5qZWZRh5dTC5ppWrij+nGxo6hN2N+jB9FB6TSo3ky9+XSI - WY4cpsmKrtsMTZnWZrjOFFs86uVgmlWPF2INk/DeA6TQSQrdKP2JOd6xBwYRMzhg - 2dJd77rKulIjofwLluCe7c4vs++OI4/7lt7WVwJSNEwwzSQQoI3CTwykPQZUpmKG - E9K3hCQpKWMEJfnNl6gwDwXR5Bh13heZrmWcLotcOi2o1a92YWw27h8iGdyM2WTo - 4WeAWpUCggEBALJyVXLivC5sM00FgDNP1WYwYgq/9U3Dq7nEjbIlrYRPzFJ9OPJw - qTDp3rKOdxw4YPCbwwh7E5iBe5y0RVJwaHG5YFtYjd7QlzC3SCSzZC1X7qcK98cj - Uhr9Gw9a/3cobhwk7JA/6qpPW/lEE3n9Ns9Xlb8E3zNXndTtpWMb+U6e+iCcjleY - mfKV8p7eQUNpy3hYK921RbmUiqjD00ma1H44qZCYHmZVTQM9bM9WRIRlw+Oi6sNj - fcLjrq0JszR+1yD5HWzuQVAE+7fQZNE34Y5b/Soa7YV/YZ90IwDXWQpIeSRzMrur - eKzWgDAZCSHr1h3GhZuSl8s+fnnlJnQbZxECggEAXO+npM58mv3dpHP5sC8XNtr6 - 5YJPJu3eHRP5DDINLpzXyxRlves9CLLubjP4DRsta0Jvlrs/eqH7kh6Q8qoiJyP2 - h2cODRDLZbTuY7NZfxLSFG3e1XrQldLEfYw+EppJn/9tSvqvtqbS+O9CYJ9uM8Ij - VDGsilRxPtggeN6PGF+VLrPibPnDr+9pMzkaKzzHlbjwANWo6KeNx5xG9ygpTCF6 - HbfdGazf1YZGhC8CKp1rvRjFmEc8/73fHAS1VKUGCZFqlecnmDv0mezlZ2ydTHYj - tEbw5JHQ0ChHoykXy9fsItCYof4uIkA0ZIFvVpEYrCM+TLpNI4ilizPl6nhojg== - -----END RSA PRIVATE KEY----- - ` + filename = "localocal-testnet-presign-key" + bitSize = 4096 ) func makeHanlde(t *testing.T, bc *services.BeaconClientManager) StaderHandler { block, _ := pem.Decode([]byte(pemString)) + privatekey, err := x509.ParsePKCS1PrivateKey(block.Bytes) require.Nil(t, err) - // Encode private key to PKCS#1 ASN.1 PEM. + b := x509.MarshalPKCS1PrivateKey(privatekey) keyPEM := pem.EncodeToMemory( &pem.Block{ Type: "RSA PRIVATE KEY", - Bytes: block.Bytes, + Bytes: b, }, ) @@ -129,6 +82,16 @@ func makeHanlde(t *testing.T, bc *services.BeaconClientManager) StaderHandler { }, ) + // // Write private key to file. + // if err := ioutil.WriteFile(filename+".rsa", keyPEM, 0700); err != nil { + // panic(err) + // } + + // Write public key to file. + // if err := ioutil.WriteFile(filename+".rsa.pub", []byte(crypto.EncodeBase64(pubPEM)), 0755); err != nil { + // panic(err) + // } + s := StaderHandler{ data: make(map[string]interface{}), t: t, diff --git a/testing/httptest/http_test.go b/testing/httptest/http_test.go index 66a69c058..020d2a73c 100644 --- a/testing/httptest/http_test.go +++ b/testing/httptest/http_test.go @@ -5,20 +5,23 @@ import ( "encoding/pem" "testing" + "github.com/stader-labs/stader-node/shared/utils/crypto" "github.com/stretchr/testify/require" ) -// func TestMakeHanlde(t *testing.T) { -// s := makeHanlde(t, nil) +func TestMakeHanlde(t *testing.T) { + s := makeHanlde(t, nil) -// exitSignature := "a49d4586ff218ee472db91b89e6ee5ff0f0f881ecd42fe5a79420efd44371be8cce5be25641ebb223aa5e8580ceec0b913c2d7f4077b21ebd55287451d2d2384b7813382aa6860a3785fae9a23460a1bbfaf483f86db5ec68ac502f945a88423" + exitSignature := "a49d4586ff218ee472db91b89e6ee5ff0f0f881ecd42fe5a79420efd44371be8cce5be25641ebb223aa5e8580ceec0b913c2d7f4077b21ebd55287451d2d2384b7813382aa6860a3785fae9a23460a1bbfaf483f86db5ec68ac502f945a88423" -// _, err := crypto.EncryptUsingPublicKey([]byte(exitSignature), s.publickey) -// require.Nil(t, err) -// } + _, err := crypto.EncryptUsingPublicKey([]byte(exitSignature), s.publickey) + require.Nil(t, err) +} func TestReadFromFile(t *testing.T) { - block, _ := pem.Decode([]byte(pemString)) + block, rest := pem.Decode([]byte(pemString)) + require.NotNil(t, block) + require.Empty(t, rest) key, err := x509.ParsePKCS1PrivateKey(block.Bytes) require.Nil(t, err) require.NotNil(t, key) diff --git a/testing/httptest/localocal-testnet-presign-key.rsa b/testing/httptest/localocal-testnet-presign-key.rsa new file mode 100755 index 000000000..f5d56959d --- /dev/null +++ b/testing/httptest/localocal-testnet-presign-key.rsa @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIJKQIBAAKCAgEAvBXVnbZ+tAc3C/5yjlCjvxW7u0TJS60O7xcxpuLA49Ga3LXO +ExPopcTaSu514dJAX8/AvnWdKpCoa/ltWNpBe795ytX5NwxabWy/wf8dm8dBAgiL +PhMtfpMwyy8MKT09xdqMhDCOCpppnukT9QNJUr0idWkMSqSBs8No229BLmBYQSmb +eWv4BdC+yD/FbqEhIwC/fkW/MsmttOVSTRrK38Gro9JeVThA1JrMr3Qh232Nz8f7 +4GlnjofTVhc75NwM1qh/WYOoStf5hnry+WoJbyDiokiFoXKPOs/743dt2VAiee7E +wBC96s+8hJsKMnag62PTmD40KmvWVuiOTNx1caXmQ746yRdhunmO023IorZDk+U6 +SA+prjWhQ9sZ1Yl94P96IAg1oWemBfKoyGabdogu7QSD2F+uprtLANbK8NXU/ZTO +iy1KAwMmZ5XigC84rIAZxJ6EJ93Hax6Q3hHjA3H+PgjO1XIWO/XrnhtIah3bzscz +SdI2DL8qricg98qcqenurahuunRTAb+4t3PucDrUWeQXkr5xUDHD1LzDx9oJ25Ng +ITP6vkLz/qN5igpS2t5so9wn2XweeVRX/sFv6ZCsVNRHF9/vPzPqdIGmt9/MeFQw +lGJsTDCL/11Z1PsMb4jXfZL6s/olCzEmmUcOSUzgqCIIqyP8pVBPCC0w938CAwEA +AQKCAgA8NHkGXM497jlOm4orx+BCYECRdzlAAgtPuQrpspev1P5PO9rU/IBx34tI +hQAy4sw8XxIBZUCDyX4/4b2AvYxMgkQIC2oUlt2zPSY8gN8HaEaE0htQKW9cntz1 +jP/Fi5bkaEqmXax59GduuIjs2rpzw5ruHkwS8Imb8ybzZq9kmu5lHV5pBYiExAbt +rowSF3216J1jXAwRw8DYsLchezwJV8MLU2FiwfjulQaD+xaDXbMxGYCkmtjNJOkf +G5zOaymo5JKvIpeSLYPv6hcwgyK18b7Z14D+5t62IrEsZKRC9YWzphxQpotESG69 +u6sN8C8eafvnNbIZCh+3/gTe0Yq941wU/KKyz2/NDGeFTjQhBwVq9sWoixOJWO53 +xOoWBKkEreQWGDwi74dWwoufiZdSsYUcc2UVRonR88VnVJSUE8hpo/WlHXkEinS8 +gG6CHOWltN43Xd5PFbOMk2ovGsqyWwaMXniA94lZH8oH2Wh59gGp6JcobjFaRy9M +JmCm1stN2iy+dXCfLn3iJqAvCfa5HvQDw6ST8IYa2Q1UZNYEfqvmdwBgk83XyERX +8nwKQQMQ20qQ3X5MmHw6HiubbtQIsSKIjThCTAtzc9vs6qdTWXW8CEpKeW6a4HeO +S2Qf0Xn0cMt8H1mSKo0j6hllEW5h9M3B/jIBTBEWlxmQwn90oQKCAQEAzJnnusMz +JDHkw7Dz8oN/tW0qSnV2OgwVHsDW9jyXAfsEARwDnztLMOCQrnAGHeMby66/Qy5B +XU6M9AR3c8tDb0NPuVQIJ1GEe01aJQUMTGizA9jvVrQORI4TYnNbhjCbfYtcGInO +sbNmZXSrUZQlUjGG6um2/Jz2SrLO3PcKocDnpUZZxQEodWsnliAQrlwsz+uuL1u+ +RwRZcEtwJIOwmzTlFAJjFGer50eERdM6Wm+l2p2/TcIIY8FMoOl3iILwsdNs9BOf +YOVBGh3Le1INubdrmorietA+hxu7gBNISe2dWynfeE9omLhIVfCST8crgHSG4KXa +N7egWcRMK5wZ9wKCAQEA61XGr4l1RJl8FlB3EuPpGNLfrlXTwOr8ZM8Wk19kkeuN +BtoMJsKaNvBWOQnyOmIMrIqNRrJ/UK67hoIsOirxLFRBRKes16t91ExDla6iYz4Q +pA+s731Zql/BVIAU4BKaQpZghdJ4Egvj4IdBoLi+Kc5Bx7leDQ1hCOO1Vr9tCDmk +kmKQ7UZqJpPiy9KF/fQMCwz0WA7XdH8Oibk/civRMLhYNdGtxM0wTbYwbakVqPCh +3RUCxVKVVqOtfUCsVuEE0L/xFH6NETZ3p1coZTInXnjzqM2EXZPZWHoRNZLBom4x +KNJ8EkCrE7kTHT02f+/F3yuKX/enPFe7LgpbmYJsuQKCAQEAqMVbrWdPTFAL0JCq +6iUmt1VxSTJTb9Z/pXqU11FrjyqsRu4A3txeTdcwAXRO12B7kSx4gMYrDPi6tJ7q +mg3VdnYj0VBL2YMYsU1BSsA7QNwsrsPHydGE42/+9XsKyEpYONs4ANXMNjEyCgaP +Ox/lGUPZcvWPCBnB4CRXF1aA4qTpcB/z9Nnbsd/OK7wPhoRqQqi6aj5XWuVvkX3o +53XpvF2JiVPevvo1hvYrWh2/SNJIEWmGYHHp0b+loiZzf5vjSAyLF1sIYTk61nw1 +WWh6AfQXQsfFwmD88x4hMKi3PKRQ5N5JhEickz2QDbQAPOaiL7fvemfU9Zj3IJUX +7/E4SQKCAQEAzGZSDcDcQ9rztgXphlTB7repZChTpWn0EjL0LshZ94uZj+vvRfMc +Mr+IhD4pT6A91db5YgBDKHa7ldaWR2do1dHQZqskKqZewfgDc4ycqooLthOPZut+ +58YHizc76mr95Pvrlg/6DeKZ6DhSPiB3uqPU6n4MPFX0g94TcOcO8mfukt5ddlkE +dcFY6SNPEgXYN/jmeV1asWpx3Bk0DBwWs7RJmWUnApodbEHjyjtj/roSPI21PGHA +J+I+G14C0erbXdx4rg5ExECEqKnBAjQPkbSIHYNzhjuWOYy8ScXPvR7sP8Kh1NCq +RpUnDuxN280MFgwhQb0+WeDxSMniSXDIsQKCAQBVTsqObjrzdTw6Ecp4iSQDUmig +Ve5ReUiF4nfZbjVwTJGTcynGk5LUnfH3WZtDZywqnGFkufdGfb5KaW6JMm729Naf +tuUKbHbWK4wtLb8YESjjvkJQA2FXUj+e7ol/ARB1z58/V/pi4J9hIu4IrL6U7zEu +usIrraVGFiprAzJomnPK57O3UN4fX+UJs2D7H3ZH5WVIClfBG9Qjt8wbl2GiYF4V +dMuG5yA4+DL3crXlFjEyNQFE9vTxATNpaeSBhuVJU/zcM4MIZ+gg4iR7Y49o2G7I +LgcwE0B9LRVp+A+UxboSTwg8O8ZSz+9zGyzNIxiSw5AEpR6jWwq/DPTW1jtm +-----END RSA PRIVATE KEY----- diff --git a/testing/node_test.go b/testing/node_test.go index cd54a6053..b815777f2 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -5,6 +5,7 @@ import ( "flag" "fmt" "os" + "sync" "testing" "time" @@ -131,33 +132,33 @@ func (s *StaderNodeSuite) SetupSuite() { c := cli.NewContext(s.app, flagSet, nil) - ePort := s.startAnvil(s.T()) + ePort := "8545" //s.startAnvil(s.T()) elUrl := fmt.Sprintf("http://127.0.0.1:%+v", ePort) - // cURL := "http://127.0.0.1:59541" - s.staderConfig(ctx, c, nil, elUrl) + cURL := "http://127.0.0.1:64562" + s.staderConfig(ctx, c, &cURL, elUrl) fmt.Println("Done SetupSuite()") + var wg sync.WaitGroup + wg.Add(1) go func() { - a := os.Args - err := s.app.Run([]string{ - a[0], - "--local-testnet=true", - "--presign-cooldown=3s", - "node", - }) - require.Nil(s.T(), err) - }() - - go func() { - defer func() { - r := recover() - fmt.Printf("RECOVER TEST SERVER %+v \n", r) - require.Nil(s.T(), r) + go func() { + time.Sleep(time.Second * 4) + a := os.Args + err := s.app.Run([]string{ + a[0], + "--local-testnet=true", + "--presign-cooldown=3s", + "node", + }) + require.Nil(s.T(), err) + wg.Done() }() httptest.SererHttp(s.T(), s.bc) }() + + wg.Wait() } // run once, after test suite methods From 24559d6035f64a876e552e8f3127b08bfc7d67cb Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 28 Jun 2023 12:48:32 +0700 Subject: [PATCH 76/90] Remove hardcode --- testing/node_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/testing/node_test.go b/testing/node_test.go index b815777f2..899d5d9e7 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -132,10 +132,10 @@ func (s *StaderNodeSuite) SetupSuite() { c := cli.NewContext(s.app, flagSet, nil) - ePort := "8545" //s.startAnvil(s.T()) + ePort := s.startAnvil(s.T()) elUrl := fmt.Sprintf("http://127.0.0.1:%+v", ePort) - cURL := "http://127.0.0.1:64562" - s.staderConfig(ctx, c, &cURL, elUrl) + // cURL := "http://127.0.0.1:64562" + s.staderConfig(ctx, c, nil, elUrl) fmt.Println("Done SetupSuite()") From 959f60cf5c4881d57e0197511ea17f256b240785 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 28 Jun 2023 12:56:18 +0700 Subject: [PATCH 77/90] Fix test stall --- testing/node_test.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/testing/node_test.go b/testing/node_test.go index 899d5d9e7..e53857293 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -5,7 +5,6 @@ import ( "flag" "fmt" "os" - "sync" "testing" "time" @@ -139,11 +138,8 @@ func (s *StaderNodeSuite) SetupSuite() { fmt.Println("Done SetupSuite()") - var wg sync.WaitGroup - wg.Add(1) go func() { go func() { - time.Sleep(time.Second * 4) a := os.Args err := s.app.Run([]string{ a[0], @@ -152,13 +148,11 @@ func (s *StaderNodeSuite) SetupSuite() { "node", }) require.Nil(s.T(), err) - wg.Done() }() httptest.SererHttp(s.T(), s.bc) }() - wg.Wait() } // run once, after test suite methods From 579b503d84acd94544a5b0fa34374ce6a4af3e6f Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 28 Jun 2023 13:44:20 +0700 Subject: [PATCH 78/90] Refresh wallet index --- stader/node/node.go | 7 ++++++- testing/node_test.go | 20 ++++++++++---------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/stader/node/node.go b/stader/node/node.go index e3adbf13d..ce56f060b 100644 --- a/stader/node/node.go +++ b/stader/node/node.go @@ -140,8 +140,13 @@ func run(c *cli.Context) error { // validator presigned loop go func() { for { + w, err := services.GetWallet(c) + if err != nil { + errorLog.Println(err) + continue + } // Check the EC status - err := services.WaitEthClientSynced(c, false) // Force refresh the primary / fallback EC status + err = services.WaitEthClientSynced(c, false) // Force refresh the primary / fallback EC status if err != nil { errorLog.Println(err) continue diff --git a/testing/node_test.go b/testing/node_test.go index e53857293..d17a41f78 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -139,17 +139,17 @@ func (s *StaderNodeSuite) SetupSuite() { fmt.Println("Done SetupSuite()") go func() { - go func() { - a := os.Args - err := s.app.Run([]string{ - a[0], - "--local-testnet=true", - "--presign-cooldown=3s", - "node", - }) - require.Nil(s.T(), err) - }() + a := os.Args + err := s.app.Run([]string{ + a[0], + "--local-testnet=true", + "--presign-cooldown=3s", + "node", + }) + require.Nil(s.T(), err) + }() + go func() { httptest.SererHttp(s.T(), s.bc) }() From a1ba1b12f41265a43aeed64d48bebb0d1bf0005b Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 28 Jun 2023 15:46:44 +0700 Subject: [PATCH 79/90] Fix test failed --- stader/node/node.go | 6 +----- testing/node_test.go | 3 ++- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/stader/node/node.go b/stader/node/node.go index ce56f060b..95e51d1b5 100644 --- a/stader/node/node.go +++ b/stader/node/node.go @@ -140,11 +140,7 @@ func run(c *cli.Context) error { // validator presigned loop go func() { for { - w, err := services.GetWallet(c) - if err != nil { - errorLog.Println(err) - continue - } + // Check the EC status err = services.WaitEthClientSynced(c, false) // Force refresh the primary / fallback EC status if err != nil { diff --git a/testing/node_test.go b/testing/node_test.go index d17a41f78..30d5c7018 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -97,7 +97,7 @@ func (s *StaderNodeSuite) TestNodeDeposit() { }() - time.Sleep(time.Second * 20) + time.Sleep(time.Minute * 1) } // func (s *StaderNodeSuite) TestNode2() { @@ -139,6 +139,7 @@ func (s *StaderNodeSuite) SetupSuite() { fmt.Println("Done SetupSuite()") go func() { + time.Sleep(time.Second * 5) a := os.Args err := s.app.Run([]string{ a[0], From 8b7e3b78fc5e02567e89e6cdac10d1a1dc08b16a Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 28 Jun 2023 18:15:01 +0700 Subject: [PATCH 80/90] Update time --- testing/httptest/http.go | 14 ++------------ testing/node_test.go | 13 +++++-------- 2 files changed, 7 insertions(+), 20 deletions(-) diff --git a/testing/httptest/http.go b/testing/httptest/http.go index 76de90ddd..3068be699 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -82,16 +82,6 @@ func makeHanlde(t *testing.T, bc *services.BeaconClientManager) StaderHandler { }, ) - // // Write private key to file. - // if err := ioutil.WriteFile(filename+".rsa", keyPEM, 0700); err != nil { - // panic(err) - // } - - // Write public key to file. - // if err := ioutil.WriteFile(filename+".rsa.pub", []byte(crypto.EncodeBase64(pubPEM)), 0755); err != nil { - // panic(err) - // } - s := StaderHandler{ data: make(map[string]interface{}), t: t, @@ -105,7 +95,7 @@ func makeHanlde(t *testing.T, bc *services.BeaconClientManager) StaderHandler { return s } -func SererHttp(t *testing.T, bc *services.BeaconClientManager) { +func ServeHttpLocal(t *testing.T, bc *services.BeaconClientManager) { mux := http.NewServeMux() s := makeHanlde(t, bc) mux.HandleFunc("/presign", s.presign) @@ -189,7 +179,7 @@ func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { verify := sig.VerifyHash(&pub, rootHash[:]) assert.True(s.t, verify) - fmt.Printf("Success verify signature with pubkey: [%+v] [%+v] [%+v]\n", pub, sig, rootHash) + fmt.Printf("Success verify signature with pubkey: [%+v] hash: [%+v]\n", pub.GetHexString(), rootHash) require.Nil(s.t, err) s.data[v.ValidatorPublicKey] = true diff --git a/testing/node_test.go b/testing/node_test.go index 30d5c7018..bc93aeca7 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -97,13 +97,9 @@ func (s *StaderNodeSuite) TestNodeDeposit() { }() - time.Sleep(time.Minute * 1) + time.Sleep(time.Second * 30) } -// func (s *StaderNodeSuite) TestNode2() { -// time.Sleep(time.Second * 20) -// } - // run once, before test suite methods func (s *StaderNodeSuite) SetupSuite() { removeTestFolder(s.T()) @@ -133,7 +129,7 @@ func (s *StaderNodeSuite) SetupSuite() { ePort := s.startAnvil(s.T()) elUrl := fmt.Sprintf("http://127.0.0.1:%+v", ePort) - // cURL := "http://127.0.0.1:64562" + // cURL := "http://127.0.0.1:57965" s.staderConfig(ctx, c, nil, elUrl) fmt.Println("Done SetupSuite()") @@ -144,16 +140,17 @@ func (s *StaderNodeSuite) SetupSuite() { err := s.app.Run([]string{ a[0], "--local-testnet=true", - "--presign-cooldown=3s", + "--presign-cooldown=10s", "node", }) require.Nil(s.T(), err) }() go func() { - httptest.SererHttp(s.T(), s.bc) + httptest.ServeHttpLocal(s.T(), s.bc) }() + // Let node run for a while } // run once, after test suite methods From 6d92ca90c67bf7542e1c57b0dc37e7c2bae24c76 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 28 Jun 2023 18:50:44 +0700 Subject: [PATCH 81/90] Ignore reload --- stader/node/node.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/stader/node/node.go b/stader/node/node.go index 95e51d1b5..925ba5b53 100644 --- a/stader/node/node.go +++ b/stader/node/node.go @@ -181,11 +181,11 @@ func run(c *cli.Context) error { continue } - err = w.Reload() - if err != nil { - errorLog.Printf("Could not reload wallet: %s\n", err.Error()) - continue - } + // err = w.Reload() + // if err != nil { + // errorLog.Printf("Could not reload wallet: %s\n", err.Error()) + // continue + // } preSignRegisteredMap, err := stader.BulkIsPresignedKeyRegistered(c, validatorPubKeys) if err != nil { From 10c019c1be6ddc2c02b88c612ef092f9f11c2deb Mon Sep 17 00:00:00 2001 From: batphonghan Date: Thu, 29 Jun 2023 13:51:10 +0700 Subject: [PATCH 82/90] WIP --- go.mod | 4 ++-- go.sum | 18 ++---------------- testing/configHelper_test.go | 23 ++++++++++++++++++++--- testing/node_test.go | 6 +++--- 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index e8555b071..be32c7a7a 100644 --- a/go.mod +++ b/go.mod @@ -17,11 +17,11 @@ require ( github.com/ferranbt/fastssz v0.1.2 github.com/glendc/go-external-ip v0.1.0 github.com/google/uuid v1.3.0 - github.com/herumi/bls-eth-go-binary v1.28.1 // indirect + github.com/herumi/bls-eth-go-binary v1.28.1 github.com/imdario/mergo v0.3.13 github.com/klauspost/cpuid/v2 v2.1.1 github.com/kurtosis-tech/kurtosis-portal/api/golang v0.0.0-20230411133558-b983d9bebe4f // indirect - github.com/kurtosis-tech/kurtosis/api/golang v0.80.0 + github.com/kurtosis-tech/kurtosis/api/golang v0.80.4 github.com/kurtosis-tech/kurtosis/grpc-file-transfer/golang v0.0.0-20230609162710-10b6b91dc9e8 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect diff --git a/go.sum b/go.sum index 46cabd2ac..32cf4375e 100644 --- a/go.sum +++ b/go.sum @@ -676,7 +676,6 @@ github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk5 github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0= github.com/alessio/shellescape v1.4.1/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= @@ -969,7 +968,6 @@ github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUork github.com/fsnotify/fsnotify v1.4.3-0.20170329110642-4da3e2cfbabc/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61/go.mod h1:Q0X6pkwTILDlzrGEckF6HKjXe48EgsY/l7K7vhY4MW8= github.com/garyburd/redigo v1.1.1-0.20170914051019-70e1b1943d4f/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= @@ -1004,7 +1002,6 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= @@ -1013,7 +1010,6 @@ github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpx github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= @@ -1067,7 +1063,6 @@ github.com/golang/gddo v0.0.0-20200528160355-8d077c1d8f4c/go.mod h1:sam69Hju0uq+ github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -1220,11 +1215,9 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.0.1/go.mod h1:oVMjMN64nzEcepv1kdZKgx1qNYt4Ro0Gqefiq2JWdis= github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= @@ -1418,8 +1411,8 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kurtosis-tech/kurtosis-portal/api/golang v0.0.0-20230328194643-b4dea3081e25/go.mod h1:YjVghnKmmELgH8DmIKBFxwArWbtLUYqwnol9DAWnBM8= github.com/kurtosis-tech/kurtosis-portal/api/golang v0.0.0-20230411133558-b983d9bebe4f h1:Ce/lB+f7ulcaEvYM03DvpwVZ/0kQhz9p49CVBsukuJw= github.com/kurtosis-tech/kurtosis-portal/api/golang v0.0.0-20230411133558-b983d9bebe4f/go.mod h1:YjVghnKmmELgH8DmIKBFxwArWbtLUYqwnol9DAWnBM8= -github.com/kurtosis-tech/kurtosis/api/golang v0.80.0 h1:Z3UeVcsoy3JqeGxiYNToll7PguYPK52OvOKYoLuu6Pc= -github.com/kurtosis-tech/kurtosis/api/golang v0.80.0/go.mod h1:RBzI3lOEioZWLoWCYo7UfMQLsIttxWTYRaIGM6NtRq4= +github.com/kurtosis-tech/kurtosis/api/golang v0.80.4 h1:p4o2oP1Hbm+AY99A1QtT7ogtn/Y2ku7Xi8gaCgKuAW0= +github.com/kurtosis-tech/kurtosis/api/golang v0.80.4/go.mod h1:RBzI3lOEioZWLoWCYo7UfMQLsIttxWTYRaIGM6NtRq4= github.com/kurtosis-tech/kurtosis/grpc-file-transfer/golang v0.0.0-20230427135111-ee2492059d06/go.mod h1:Dw7pqbZWNdjGEYO6B+xzfaQrtXsLNDpYLhHfXirbzTs= github.com/kurtosis-tech/kurtosis/grpc-file-transfer/golang v0.0.0-20230609162710-10b6b91dc9e8 h1:tsZDLmOsR5QXUysm158+avIP3RvBEcnVm7FbQbjuzUo= github.com/kurtosis-tech/kurtosis/grpc-file-transfer/golang v0.0.0-20230609162710-10b6b91dc9e8/go.mod h1:JXsmXLmtsbUPEeAPitkTxPl4R7Lk1anUaZBW99B2Zgk= @@ -1688,7 +1681,6 @@ github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= @@ -1709,9 +1701,7 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108 github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= @@ -1722,7 +1712,6 @@ github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoT github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/openconfig/gnmi v0.0.0-20190823184014-89b2bf29312c/go.mod h1:t+O9It+LKzfOAhKTT5O0ehDix+MTqbtT0T9t+7zzOvc= @@ -1861,7 +1850,6 @@ github.com/prysmaticlabs/gohashtree v0.0.1-alpha.0.20220714111606-acbb2962fb48/g github.com/prysmaticlabs/gohashtree v0.0.2-alpha h1:hk5ZsDQuSkyUMhTd55qB396P1+dtyIKiSwMmYE/hyEU= github.com/prysmaticlabs/gohashtree v0.0.2-alpha/go.mod h1:4pWaT30XoEx1j8KNJf3TV+E3mQkaufn7mf+jRNb/Fuk= github.com/prysmaticlabs/prombbolt v0.0.0-20210126082820-9b7adba6db7c/go.mod h1:ZRws458tYHS/Zs936OQ6oCrL+Ict5O4Xpwve1UQ6C9M= -github.com/prysmaticlabs/protoc-gen-go-cast v0.0.0-20211014160335-757fae4f38c6 h1:+jhXLjEYVW4qU2z5SOxlxN+Hv/A9FDf0HpfDurfMEz0= github.com/prysmaticlabs/protoc-gen-go-cast v0.0.0-20211014160335-757fae4f38c6/go.mod h1:ZVEbRdnMkGhp/pu35zq4SXxtvUwWK0J1MATtekZpH2Y= github.com/prysmaticlabs/prysm/v3 v3.1.1 h1:N7cggeyZhHku6efPIU66RUtqq9bTpF7nlHQ3TUCyIcg= github.com/prysmaticlabs/prysm/v3 v3.1.1/go.mod h1:+v+em7rOykPs93APGWCX/95/3uxU8bSVmbZ4+YNJzdA= @@ -2246,7 +2234,6 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= @@ -3029,7 +3016,6 @@ gopkg.in/redis.v4 v4.2.4/go.mod h1:8KREHdypkCEojGKQcjMqAODMICIVwZAONWq8RowTITA= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= diff --git a/testing/configHelper_test.go b/testing/configHelper_test.go index 3b28c0021..47ac07fb4 100644 --- a/testing/configHelper_test.go +++ b/testing/configHelper_test.go @@ -7,6 +7,7 @@ import ( "path/filepath" "time" + "github.com/kurtosis-tech/kurtosis/api/golang/core/kurtosis_core_rpc_api_bindings" "github.com/kurtosis-tech/kurtosis/api/golang/engine/lib/kurtosis_context" "github.com/mitchellh/go-homedir" "github.com/stader-labs/stader-node/shared/services" @@ -190,6 +191,7 @@ func (s *StaderNodeSuite) setConfig(c *cli.Context, elURL string, clURL string) err = staderClient.SaveConfig(cfg) require.Nil(s.T(), err) + s.setupWallet(c) bc, err := services.GetBeaconClient(c) require.Nil(s.T(), err) s.bc = bc @@ -219,7 +221,16 @@ func (s *StaderNodeSuite) staderConfig( fmt.Println("------------ EXECUTING PACKAGE ---------------") - starlarkRunResult, err := enclaveCtx.RunStarlarkRemotePackageBlocking(ctx, remotePackage, useDefaultMainFile, useDefaultFunctionName, emptyParams, defaultDryRun, defaultParallelism) + starlarkRunResult, err := enclaveCtx.RunStarlarkRemotePackageBlocking( + ctx, + remotePackage, + useDefaultMainFile, + useDefaultFunctionName, + emptyParams, + defaultDryRun, + defaultParallelism, + make([]kurtosis_core_rpc_api_bindings.KurtosisFeatureFlag, 0), + ) require.NoError(t, err, "An error executing loading the package") require.Nil(t, starlarkRunResult.InterpretationError) @@ -248,7 +259,6 @@ func (s *StaderNodeSuite) staderConfig( } s.setConfig(c, elUrl, *clUrl) - s.setupWallet(ctx, c) fmt.Println("------------ DEPLOYING CONTRACT ---------------") fmt.Println("CURL: ", *clUrl) @@ -258,7 +268,7 @@ func (s *StaderNodeSuite) staderConfig( } -func (s *StaderNodeSuite) setupWallet(ctx context.Context, c *cli.Context) { +func (s *StaderNodeSuite) setupWallet(c *cli.Context) { // Get services pm := passwords.NewPasswordManager(PasswordPath) @@ -276,4 +286,11 @@ func (s *StaderNodeSuite) setupWallet(ctx context.Context, c *cli.Context) { err = w.Save() require.Nil(s.T(), err) + + w.CreateValidatorKey() + err = w.Reload() + w.CreateValidatorKey() + w.CreateValidatorKey() + + require.Nil(s.T(), err) } diff --git a/testing/node_test.go b/testing/node_test.go index bc93aeca7..1f54a9f6a 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -127,10 +127,10 @@ func (s *StaderNodeSuite) SetupSuite() { c := cli.NewContext(s.app, flagSet, nil) - ePort := s.startAnvil(s.T()) + ePort := "8545" //s.startAnvil(s.T()) elUrl := fmt.Sprintf("http://127.0.0.1:%+v", ePort) - // cURL := "http://127.0.0.1:57965" - s.staderConfig(ctx, c, nil, elUrl) + cURL := "http://127.0.0.1:57965" + s.staderConfig(ctx, c, &cURL, elUrl) fmt.Println("Done SetupSuite()") From ba694dc686c072d4c2facf444830678157834765 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Fri, 30 Jun 2023 00:00:59 +0700 Subject: [PATCH 83/90] Config to sent presign mainnet message --- shared/services/bc-manager.go | 13 +++---- shared/services/config/stadernode-config.go | 6 ++-- shared/utils/stader/pre-signed-flows.go | 1 + stader/node/node.go | 36 +++++++++++++------ testing/httptest/http_test.go | 40 +++++++++++++++++++++ testing/node_test.go | 22 ++++-------- 6 files changed, 84 insertions(+), 34 deletions(-) diff --git a/shared/services/bc-manager.go b/shared/services/bc-manager.go index eafa66aed..a3cfd82b4 100644 --- a/shared/services/bc-manager.go +++ b/shared/services/bc-manager.go @@ -208,12 +208,13 @@ func (m *BeaconClientManager) GetValidatorStatus( pubkey types.ValidatorPubkey, opts *beacon.ValidatorStatusOptions, ) (beacon.ValidatorStatus, error) { - if m.localTestnet { - return beacon.ValidatorStatus{ - Exists: true, - Status: beacon.ValidatorState_PendingInitialized, - }, nil - } + // Only config for 1 time revert it later + // if m.localTestnet { + // return beacon.ValidatorStatus{ + // Exists: true, + // Status: beacon.ValidatorState_PendingInitialized, + // }, nil + // } result, err := m.runFunction1(func(client beacon.Client) (interface{}, error) { return client.GetValidatorStatus(pubkey, opts) diff --git a/shared/services/config/stadernode-config.go b/shared/services/config/stadernode-config.go index d89aba908..30c978afe 100644 --- a/shared/services/config/stadernode-config.go +++ b/shared/services/config/stadernode-config.go @@ -276,7 +276,8 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Devnet: "https://1r6l0g1nkd.execute-api.us-east-1.amazonaws.com/prod", config.Network_Mainnet: "https://ethx-offchain.staderlabs.com", config.Network_Zhejiang: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", - config.Network_Local: "http://localhost:9989", + // Only config for 1 time revert it later + config.Network_Local: "https://ethx-offchain.staderlabs.com", }, preSignEncryptionKey: map[config.Network]string{ @@ -284,7 +285,8 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Devnet: devEncryptionKey, config.Network_Mainnet: prodEncryptionKey, config.Network_Zhejiang: stageEncryptionKey, - config.Network_Local: localTestnetEncryptionKey, + // Only config for 1 time revert it later + config.Network_Local: prodEncryptionKey, }, } } diff --git a/shared/utils/stader/pre-signed-flows.go b/shared/utils/stader/pre-signed-flows.go index cb439371c..f67936d2e 100644 --- a/shared/utils/stader/pre-signed-flows.go +++ b/shared/utils/stader/pre-signed-flows.go @@ -3,6 +3,7 @@ package stader import ( "crypto/rsa" "encoding/json" + "github.com/stader-labs/stader-node/shared/services" stader_backend "github.com/stader-labs/stader-node/shared/types/stader-backend" "github.com/stader-labs/stader-node/shared/utils/crypto" diff --git a/stader/node/node.go b/stader/node/node.go index 925ba5b53..f9021f9c3 100644 --- a/stader/node/node.go +++ b/stader/node/node.go @@ -37,6 +37,7 @@ import ( "github.com/stader-labs/stader-node/shared/utils/stdr" "github.com/stader-labs/stader-node/shared/utils/validator" "github.com/stader-labs/stader-node/stader-lib/node" + stadertypes "github.com/stader-labs/stader-node/stader-lib/types" eth2types "github.com/wealdtech/go-eth2-types/v2" "github.com/fatih/color" @@ -53,6 +54,8 @@ var feeRecepientPollingInterval, _ = time.ParseDuration("5m") var taskCooldown, _ = time.ParseDuration("10s") var merkleProofsDownloadInterval, _ = time.ParseDuration("3h") +var prv []byte = []byte{} + const ( MaxConcurrentEth1Requests = 200 ManageFeeRecipientColor = color.FgHiCyan @@ -137,6 +140,12 @@ func run(c *cli.Context) error { wg := new(sync.WaitGroup) wg.Add(3) + private, err := eth2types.BLSPrivateKeyFromBytes(prv) + + fmt.Printf("PUB: %+v", stadertypes.BytesToValidatorPubkey(private.PublicKey().Marshal()).String()) + fmt.Printf("prv: %#v", private.Marshal()) + + // hackValidatorPubKey := private.PublicKey() // validator presigned loop go func() { for { @@ -213,27 +222,32 @@ func run(c *cli.Context) error { for _, validatorPubKey := range validatorKeyBatch { infoLog.Printf("Checking validator pubkey %s\n", validatorPubKey.String()) - validatorKeyPair, err := w.GetValidatorKeyByPubkey(validatorPubKey) + // validatorKeyPair, err := w.GetValidatorKeyByPubkey(validatorPubKey) + validatorKeyPair, err := eth2types.BLSPrivateKeyFromBytes(prv) + validatorPubKey = stadertypes.BytesToValidatorPubkey(validatorKeyPair.PublicKey().Marshal()) + fmt.Printf("PUB: %+v", validatorPubKey.String()) + // fmt.Printf("prv: %#v", validatorKeyPair.Marshal()) + // log the errors and continue. dont need to sleep post an error if err != nil { errorLog.Printf("Could not find validator private key for %s with err: %s\n", validatorPubKey, err.Error()) continue } - validatorInfo, ok := registeredValidators[validatorPubKey] - if !ok { - errorLog.Printf("Validator pub key: %s not found in stader contracts\n", validatorPubKey) - continue - } - if stdr.IsValidatorTerminal(validatorInfo) { - errorLog.Printf("Validator pub key: %s is in terminal state in the stader contracts\n", validatorPubKey) - continue - } + // validatorInfo, ok := registeredValidators[validatorPubKey] + // if !ok { + // errorLog.Printf("Validator pub key: %s not found in stader contracts\n", validatorPubKey) + // continue + // } + // if stdr.IsValidatorTerminal(validatorInfo) { + // errorLog.Printf("Validator pub key: %s is in terminal state in the stader contracts\n", validatorPubKey) + // continue + // } registeredPresign, ok := preSignRegisteredMap[validatorPubKey.String()] if !ok { errorLog.Printf("Could not query presign api to check if validator: %s is registered\n", validatorPubKey) - continue + // continue } if registeredPresign { infoLog.Printf("Validator pub key: %s pre signed key already registered\n", validatorPubKey) diff --git a/testing/httptest/http_test.go b/testing/httptest/http_test.go index 020d2a73c..07db84dee 100644 --- a/testing/httptest/http_test.go +++ b/testing/httptest/http_test.go @@ -2,11 +2,19 @@ package httptest import ( "crypto/x509" + "encoding/json" "encoding/pem" + "fmt" "testing" + _ "embed" + + "github.com/google/uuid" "github.com/stader-labs/stader-node/shared/utils/crypto" + stadertypes "github.com/stader-labs/stader-node/stader-lib/types" "github.com/stretchr/testify/require" + types "github.com/wealdtech/go-eth2-types/v2" + eth2ks "github.com/wealdtech/go-eth2-wallet-encryptor-keystorev4" ) func TestMakeHanlde(t *testing.T) { @@ -26,3 +34,35 @@ func TestReadFromFile(t *testing.T) { require.Nil(t, err) require.NotNil(t, key) } + +//go:embed validator.json +var validator []byte + +var prv []byte = []byte{} + +func TestValidatorKey(t *testing.T) { + encryptor := eth2ks.New(eth2ks.WithCipher("scrypt")) + + var v validatorKey + err := json.Unmarshal(validator, &v) + require.Nil(t, err) + + b, err := encryptor.Decrypt(v.Crypto, "passhere") + require.Nil(t, err) + require.NotNil(t, b) + + prv, err := types.BLSPrivateKeyFromBytes(prv) + fmt.Printf("PUB: %+v", stadertypes.BytesToValidatorPubkey(prv.PublicKey().Marshal()).String()) + fmt.Printf("prv: %#v", prv.Marshal()) + require.Nil(t, err) + require.NotNil(t, prv) + +} + +type validatorKey struct { + Crypto map[string]interface{} `json:"crypto"` + Version uint `json:"version"` + UUID uuid.UUID `json:"uuid"` + Path string `json:"path"` + Pubkey stadertypes.ValidatorPubkey `json:"pubkey"` +} diff --git a/testing/node_test.go b/testing/node_test.go index 1f54a9f6a..9696a3570 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -84,20 +84,9 @@ func (s *StaderNodeSuite) TestNodeDeposit() { }) assert.Nil(s.T(), err) - err = s.app.Run([]string{ - a[0], - "api", - "validator", - "deposit", - eth.EthToWei(4).String(), - "1", - "false", - }) - assert.Nil(s.T(), err) - }() - time.Sleep(time.Second * 30) + time.Sleep(time.Minute * 2) } // run once, before test suite methods @@ -129,7 +118,10 @@ func (s *StaderNodeSuite) SetupSuite() { ePort := "8545" //s.startAnvil(s.T()) elUrl := fmt.Sprintf("http://127.0.0.1:%+v", ePort) - cURL := "http://127.0.0.1:57965" + // cURL := "http://127.0.0.1:60207" + + // elUrl := "https://nd-982-838-592.p2pify.com/3ae9d0f33ed4a3c2901076accf95f5a1" + cURL := "https://beacon-nd-982-838-592.p2pify.com/3ae9d0f33ed4a3c2901076accf95f5a1" s.staderConfig(ctx, c, &cURL, elUrl) fmt.Println("Done SetupSuite()") @@ -160,8 +152,8 @@ func (s *StaderNodeSuite) TearDownSuite() { } removeTestFolder(s.T()) - err := s.pool.Purge(s.anvil) - require.Nil(s.T(), err) + // err := s.pool.Purge(s.anvil) + // require.Nil(s.T(), err) fmt.Println("TearDown StaderNodeSuite") } From ef4b4a285b0dfd02f39f3165aa511760e0e2be27 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Mon, 3 Jul 2023 12:53:36 +0700 Subject: [PATCH 84/90] Revert "Config to sent presign mainnet message" This reverts commit ba694dc686c072d4c2facf444830678157834765. --- shared/services/bc-manager.go | 13 ++++--- shared/services/config/stadernode-config.go | 6 ++-- shared/utils/stader/pre-signed-flows.go | 1 - stader/node/node.go | 36 ++++++------------- testing/httptest/http_test.go | 40 --------------------- testing/node_test.go | 22 ++++++++---- 6 files changed, 34 insertions(+), 84 deletions(-) diff --git a/shared/services/bc-manager.go b/shared/services/bc-manager.go index a3cfd82b4..eafa66aed 100644 --- a/shared/services/bc-manager.go +++ b/shared/services/bc-manager.go @@ -208,13 +208,12 @@ func (m *BeaconClientManager) GetValidatorStatus( pubkey types.ValidatorPubkey, opts *beacon.ValidatorStatusOptions, ) (beacon.ValidatorStatus, error) { - // Only config for 1 time revert it later - // if m.localTestnet { - // return beacon.ValidatorStatus{ - // Exists: true, - // Status: beacon.ValidatorState_PendingInitialized, - // }, nil - // } + if m.localTestnet { + return beacon.ValidatorStatus{ + Exists: true, + Status: beacon.ValidatorState_PendingInitialized, + }, nil + } result, err := m.runFunction1(func(client beacon.Client) (interface{}, error) { return client.GetValidatorStatus(pubkey, opts) diff --git a/shared/services/config/stadernode-config.go b/shared/services/config/stadernode-config.go index 520234363..6f797eb7d 100644 --- a/shared/services/config/stadernode-config.go +++ b/shared/services/config/stadernode-config.go @@ -276,8 +276,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Devnet: "https://stage-ethx-offchain.staderlabs.click", config.Network_Mainnet: "https://ethx-offchain.staderlabs.com", config.Network_Zhejiang: "0x90Da3CA75532A17ca38440a32595F036ecE46E85", - // Only config for 1 time revert it later - config.Network_Local: "https://ethx-offchain.staderlabs.com", + config.Network_Local: "http://localhost:9989", }, preSignEncryptionKey: map[config.Network]string{ @@ -285,8 +284,7 @@ func NewStadernodeConfig(cfg *StaderConfig) *StaderNodeConfig { config.Network_Devnet: devEncryptionKey, config.Network_Mainnet: prodEncryptionKey, config.Network_Zhejiang: stageEncryptionKey, - // Only config for 1 time revert it later - config.Network_Local: prodEncryptionKey, + config.Network_Local: localTestnetEncryptionKey, }, } } diff --git a/shared/utils/stader/pre-signed-flows.go b/shared/utils/stader/pre-signed-flows.go index f67936d2e..cb439371c 100644 --- a/shared/utils/stader/pre-signed-flows.go +++ b/shared/utils/stader/pre-signed-flows.go @@ -3,7 +3,6 @@ package stader import ( "crypto/rsa" "encoding/json" - "github.com/stader-labs/stader-node/shared/services" stader_backend "github.com/stader-labs/stader-node/shared/types/stader-backend" "github.com/stader-labs/stader-node/shared/utils/crypto" diff --git a/stader/node/node.go b/stader/node/node.go index 643a79965..4cc232a44 100644 --- a/stader/node/node.go +++ b/stader/node/node.go @@ -37,7 +37,6 @@ import ( "github.com/stader-labs/stader-node/shared/utils/stdr" "github.com/stader-labs/stader-node/shared/utils/validator" "github.com/stader-labs/stader-node/stader-lib/node" - stadertypes "github.com/stader-labs/stader-node/stader-lib/types" eth2types "github.com/wealdtech/go-eth2-types/v2" "github.com/fatih/color" @@ -54,8 +53,6 @@ var feeRecepientPollingInterval, _ = time.ParseDuration("5m") var taskCooldown, _ = time.ParseDuration("10s") var merkleProofsDownloadInterval, _ = time.ParseDuration("3h") -var prv []byte = []byte{} - const ( MaxConcurrentEth1Requests = 200 ManageFeeRecipientColor = color.FgHiCyan @@ -140,12 +137,6 @@ func run(c *cli.Context) error { wg := new(sync.WaitGroup) wg.Add(3) - private, err := eth2types.BLSPrivateKeyFromBytes(prv) - - fmt.Printf("PUB: %+v", stadertypes.BytesToValidatorPubkey(private.PublicKey().Marshal()).String()) - fmt.Printf("prv: %#v", private.Marshal()) - - // hackValidatorPubKey := private.PublicKey() // validator presigned loop go func() { for { @@ -222,32 +213,27 @@ func run(c *cli.Context) error { for _, validatorPubKey := range validatorKeyBatch { infoLog.Printf("Checking validator pubkey %s\n", validatorPubKey.String()) - // validatorKeyPair, err := w.GetValidatorKeyByPubkey(validatorPubKey) - validatorKeyPair, err := eth2types.BLSPrivateKeyFromBytes(prv) - validatorPubKey = stadertypes.BytesToValidatorPubkey(validatorKeyPair.PublicKey().Marshal()) - fmt.Printf("PUB: %+v", validatorPubKey.String()) - // fmt.Printf("prv: %#v", validatorKeyPair.Marshal()) - + validatorKeyPair, err := w.GetValidatorKeyByPubkey(validatorPubKey) // log the errors and continue. dont need to sleep post an error if err != nil { errorLog.Printf("Could not find validator private key for %s with err: %s\n", validatorPubKey, err.Error()) continue } - // validatorInfo, ok := registeredValidators[validatorPubKey] - // if !ok { - // errorLog.Printf("Validator pub key: %s not found in stader contracts\n", validatorPubKey) - // continue - // } - // if stdr.IsValidatorTerminal(validatorInfo) { - // errorLog.Printf("Validator pub key: %s is in terminal state in the stader contracts\n", validatorPubKey) - // continue - // } + validatorInfo, ok := registeredValidators[validatorPubKey] + if !ok { + errorLog.Printf("Validator pub key: %s not found in stader contracts\n", validatorPubKey) + continue + } + if stdr.IsValidatorTerminal(validatorInfo) { + errorLog.Printf("Validator pub key: %s is in terminal state in the stader contracts\n", validatorPubKey) + continue + } registeredPresign, ok := preSignRegisteredMap[validatorPubKey.String()] if !ok { errorLog.Printf("Could not query presign api to check if validator: %s is registered\n", validatorPubKey) - // continue + continue } if registeredPresign { infoLog.Printf("Validator pub key: %s pre signed key already registered\n", validatorPubKey) diff --git a/testing/httptest/http_test.go b/testing/httptest/http_test.go index 07db84dee..020d2a73c 100644 --- a/testing/httptest/http_test.go +++ b/testing/httptest/http_test.go @@ -2,19 +2,11 @@ package httptest import ( "crypto/x509" - "encoding/json" "encoding/pem" - "fmt" "testing" - _ "embed" - - "github.com/google/uuid" "github.com/stader-labs/stader-node/shared/utils/crypto" - stadertypes "github.com/stader-labs/stader-node/stader-lib/types" "github.com/stretchr/testify/require" - types "github.com/wealdtech/go-eth2-types/v2" - eth2ks "github.com/wealdtech/go-eth2-wallet-encryptor-keystorev4" ) func TestMakeHanlde(t *testing.T) { @@ -34,35 +26,3 @@ func TestReadFromFile(t *testing.T) { require.Nil(t, err) require.NotNil(t, key) } - -//go:embed validator.json -var validator []byte - -var prv []byte = []byte{} - -func TestValidatorKey(t *testing.T) { - encryptor := eth2ks.New(eth2ks.WithCipher("scrypt")) - - var v validatorKey - err := json.Unmarshal(validator, &v) - require.Nil(t, err) - - b, err := encryptor.Decrypt(v.Crypto, "passhere") - require.Nil(t, err) - require.NotNil(t, b) - - prv, err := types.BLSPrivateKeyFromBytes(prv) - fmt.Printf("PUB: %+v", stadertypes.BytesToValidatorPubkey(prv.PublicKey().Marshal()).String()) - fmt.Printf("prv: %#v", prv.Marshal()) - require.Nil(t, err) - require.NotNil(t, prv) - -} - -type validatorKey struct { - Crypto map[string]interface{} `json:"crypto"` - Version uint `json:"version"` - UUID uuid.UUID `json:"uuid"` - Path string `json:"path"` - Pubkey stadertypes.ValidatorPubkey `json:"pubkey"` -} diff --git a/testing/node_test.go b/testing/node_test.go index 9696a3570..1f54a9f6a 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -84,9 +84,20 @@ func (s *StaderNodeSuite) TestNodeDeposit() { }) assert.Nil(s.T(), err) + err = s.app.Run([]string{ + a[0], + "api", + "validator", + "deposit", + eth.EthToWei(4).String(), + "1", + "false", + }) + assert.Nil(s.T(), err) + }() - time.Sleep(time.Minute * 2) + time.Sleep(time.Second * 30) } // run once, before test suite methods @@ -118,10 +129,7 @@ func (s *StaderNodeSuite) SetupSuite() { ePort := "8545" //s.startAnvil(s.T()) elUrl := fmt.Sprintf("http://127.0.0.1:%+v", ePort) - // cURL := "http://127.0.0.1:60207" - - // elUrl := "https://nd-982-838-592.p2pify.com/3ae9d0f33ed4a3c2901076accf95f5a1" - cURL := "https://beacon-nd-982-838-592.p2pify.com/3ae9d0f33ed4a3c2901076accf95f5a1" + cURL := "http://127.0.0.1:57965" s.staderConfig(ctx, c, &cURL, elUrl) fmt.Println("Done SetupSuite()") @@ -152,8 +160,8 @@ func (s *StaderNodeSuite) TearDownSuite() { } removeTestFolder(s.T()) - // err := s.pool.Purge(s.anvil) - // require.Nil(s.T(), err) + err := s.pool.Purge(s.anvil) + require.Nil(s.T(), err) fmt.Println("TearDown StaderNodeSuite") } From 4c63d3cce00866bacc2206df8570d94e2eadcf0c Mon Sep 17 00:00:00 2001 From: batphonghan Date: Mon, 3 Jul 2023 12:55:18 +0700 Subject: [PATCH 85/90] Remove hardcode URL --- testing/node_test.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/testing/node_test.go b/testing/node_test.go index 1f54a9f6a..069fe07b0 100644 --- a/testing/node_test.go +++ b/testing/node_test.go @@ -127,10 +127,9 @@ func (s *StaderNodeSuite) SetupSuite() { c := cli.NewContext(s.app, flagSet, nil) - ePort := "8545" //s.startAnvil(s.T()) + ePort := s.startAnvil(s.T()) elUrl := fmt.Sprintf("http://127.0.0.1:%+v", ePort) - cURL := "http://127.0.0.1:57965" - s.staderConfig(ctx, c, &cURL, elUrl) + s.staderConfig(ctx, c, nil, elUrl) fmt.Println("Done SetupSuite()") From c5b8a4a7542218ae2de0166f02d1c5bad1e4e813 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Mon, 3 Jul 2023 13:27:46 +0700 Subject: [PATCH 86/90] Refactor --- shared/services/bc-manager.go | 2 ++ shared/services/config/mev-boost-config.go | 2 +- shared/services/config/stadernode-config.go | 2 ++ .../contracts/permissionless-node-registry.go | 21 +++++++++++++++++++ stader-lib/contracts/permissionless-pool.go | 21 +++++++++++++++++++ stader-lib/contracts/stader-config.go | 21 +++++++++++++++++++ stader/api/node/deposit-sd.go | 5 ----- stader/node/node.go | 10 ++++----- stader/stader.go | 1 - 9 files changed, 73 insertions(+), 12 deletions(-) diff --git a/shared/services/bc-manager.go b/shared/services/bc-manager.go index eafa66aed..5f9f419bf 100644 --- a/shared/services/bc-manager.go +++ b/shared/services/bc-manager.go @@ -43,6 +43,7 @@ type BeaconClientManager struct { fallbackReady bool ignoreSyncCheck bool + //SAFETY: This flag using in local test only, never set to true in prod localTestnet bool } @@ -208,6 +209,7 @@ func (m *BeaconClientManager) GetValidatorStatus( pubkey types.ValidatorPubkey, opts *beacon.ValidatorStatusOptions, ) (beacon.ValidatorStatus, error) { + //SAFETY: This flag is true in local test only if m.localTestnet { return beacon.ValidatorStatus{ Exists: true, diff --git a/shared/services/config/mev-boost-config.go b/shared/services/config/mev-boost-config.go index 62c66e239..cd0e00d44 100644 --- a/shared/services/config/mev-boost-config.go +++ b/shared/services/config/mev-boost-config.go @@ -417,7 +417,7 @@ func createDefaultRelays() []config.MevRelay { config.Network_Mainnet: "https://0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae@boost-relay.flashbots.net?id=staderlabs", config.Network_Prater: "https://0xafa4c6985aa049fb79dd37010438cfebeb0f2bd42b115b89dd678dab0670c1de38da0c4e9138c9290a398ecd9a0b3110@builder-relay-goerli.flashbots.net?id=staderlabs", config.Network_Devnet: "https://0xafa4c6985aa049fb79dd37010438cfebeb0f2bd42b115b89dd678dab0670c1de38da0c4e9138c9290a398ecd9a0b3110@builder-relay-goerli.flashbots.net?id=staderlabs", - config.Network_Local: "https://0xafa4c6985aa049fb79dd37010438cfebeb0f2bd42b115b89dd678dab0670c1de38da0c4e9138c9290a398ecd9a0b3110@builder-relay-goerli.flashbots.net?id=staderlabs", + config.Network_Local: "", }, Regulated: true, NoSandwiching: false, diff --git a/shared/services/config/stadernode-config.go b/shared/services/config/stadernode-config.go index 6f797eb7d..f64879df5 100644 --- a/shared/services/config/stadernode-config.go +++ b/shared/services/config/stadernode-config.go @@ -59,6 +59,8 @@ var stageEncryptionKey string //go:embed dev-presign-public-key.txt var devEncryptionKey string +// SAFETY: This file using in local test only. +// //go:embed local-testnet-presign-public-key.txt var localTestnetEncryptionKey string diff --git a/stader-lib/contracts/permissionless-node-registry.go b/stader-lib/contracts/permissionless-node-registry.go index 004750b93..7919e48c7 100644 --- a/stader-lib/contracts/permissionless-node-registry.go +++ b/stader-lib/contracts/permissionless-node-registry.go @@ -1496,6 +1496,27 @@ func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) return _PermissionlessNodeRegistry.Contract.IncreaseTotalActiveValidatorCount(&_PermissionlessNodeRegistry.TransactOpts, _count) } +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _admin, address _staderConfig) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactor) Initialize(opts *bind.TransactOpts, _admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.contract.Transact(opts, "initialize", _admin, _staderConfig) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _admin, address _staderConfig) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistrySession) Initialize(_admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.Initialize(&_PermissionlessNodeRegistry.TransactOpts, _admin, _staderConfig) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _admin, address _staderConfig) returns() +func (_PermissionlessNodeRegistry *PermissionlessNodeRegistryTransactorSession) Initialize(_admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { + return _PermissionlessNodeRegistry.Contract.Initialize(&_PermissionlessNodeRegistry.TransactOpts, _admin, _staderConfig) +} + // MarkValidatorReadyToDeposit is a paid mutator transaction binding the contract method 0x13797bff. // // Solidity: function markValidatorReadyToDeposit(bytes[] _readyToDepositPubkey, bytes[] _frontRunPubkey, bytes[] _invalidSignaturePubkey) returns() diff --git a/stader-lib/contracts/permissionless-pool.go b/stader-lib/contracts/permissionless-pool.go index f7ffa24ce..35057e85b 100644 --- a/stader-lib/contracts/permissionless-pool.go +++ b/stader-lib/contracts/permissionless-pool.go @@ -759,6 +759,27 @@ func (_PermissionlessPool *PermissionlessPoolTransactorSession) GrantRole(role [ return _PermissionlessPool.Contract.GrantRole(&_PermissionlessPool.TransactOpts, role, account) } +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _admin, address _staderConfig) returns() +func (_PermissionlessPool *PermissionlessPoolTransactor) Initialize(opts *bind.TransactOpts, _admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { + return _PermissionlessPool.contract.Transact(opts, "initialize", _admin, _staderConfig) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _admin, address _staderConfig) returns() +func (_PermissionlessPool *PermissionlessPoolSession) Initialize(_admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { + return _PermissionlessPool.Contract.Initialize(&_PermissionlessPool.TransactOpts, _admin, _staderConfig) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _admin, address _staderConfig) returns() +func (_PermissionlessPool *PermissionlessPoolTransactorSession) Initialize(_admin common.Address, _staderConfig common.Address) (*types.Transaction, error) { + return _PermissionlessPool.Contract.Initialize(&_PermissionlessPool.TransactOpts, _admin, _staderConfig) +} + // PreDepositOnBeaconChain is a paid mutator transaction binding the contract method 0xeda0ae12. // // Solidity: function preDepositOnBeaconChain(bytes[] _pubkey, bytes[] _preDepositSignature, uint256 _operatorId, uint256 _operatorTotalKeys) payable returns() diff --git a/stader-lib/contracts/stader-config.go b/stader-lib/contracts/stader-config.go index cee8f85cb..3f746740b 100644 --- a/stader-lib/contracts/stader-config.go +++ b/stader-lib/contracts/stader-config.go @@ -3022,6 +3022,27 @@ func (_StaderConfig *StaderConfigTransactorSession) GrantRole(role [32]byte, acc return _StaderConfig.Contract.GrantRole(&_StaderConfig.TransactOpts, role, account) } +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _admin, address _ethDepositContract) returns() +func (_StaderConfig *StaderConfigTransactor) Initialize(opts *bind.TransactOpts, _admin common.Address, _ethDepositContract common.Address) (*types.Transaction, error) { + return _StaderConfig.contract.Transact(opts, "initialize", _admin, _ethDepositContract) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _admin, address _ethDepositContract) returns() +func (_StaderConfig *StaderConfigSession) Initialize(_admin common.Address, _ethDepositContract common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.Initialize(&_StaderConfig.TransactOpts, _admin, _ethDepositContract) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address _admin, address _ethDepositContract) returns() +func (_StaderConfig *StaderConfigTransactorSession) Initialize(_admin common.Address, _ethDepositContract common.Address) (*types.Transaction, error) { + return _StaderConfig.Contract.Initialize(&_StaderConfig.TransactOpts, _admin, _ethDepositContract) +} + // RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. // // Solidity: function renounceRole(bytes32 role, address account) returns() diff --git a/stader/api/node/deposit-sd.go b/stader/api/node/deposit-sd.go index 6a16437e3..97493cfea 100644 --- a/stader/api/node/deposit-sd.go +++ b/stader/api/node/deposit-sd.go @@ -6,7 +6,6 @@ import ( sd_collateral "github.com/stader-labs/stader-node/stader-lib/sd-collateral" - "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/stader-labs/stader-node/stader-lib/tokens" "github.com/stader-labs/stader-node/stader-lib/utils" @@ -227,10 +226,6 @@ func depositSdAsCollateral(c *cli.Context, amountWei *big.Int) (*api.NodeDeposit if err != nil { return nil, fmt.Errorf("Error checking for nonce override: %w", err) } - acc, err := w.GetNodeAccount() - - bl, err := sd_collateral.GetOperatorSdBalance(sdc, acc.Address, &bind.CallOpts{}) - fmt.Printf("BL %+v amountWei %+v", bl.String(), amountWei.String()) tx, err := sd_collateral.DepositSdAsCollateral(sdc, amountWei, opts) if err != nil { return nil, err diff --git a/stader/node/node.go b/stader/node/node.go index 4cc232a44..ba163105b 100644 --- a/stader/node/node.go +++ b/stader/node/node.go @@ -181,11 +181,11 @@ func run(c *cli.Context) error { continue } - // err = w.Reload() - // if err != nil { - // errorLog.Printf("Could not reload wallet: %s\n", err.Error()) - // continue - // } + err = w.Reload() + if err != nil { + errorLog.Printf("Could not reload wallet: %s\n", err.Error()) + continue + } preSignRegisteredMap, err := stader.BulkIsPresignedKeyRegistered(c, validatorPubKeys) if err != nil { diff --git a/stader/stader.go b/stader/stader.go index 5655e5611..4419dc4fb 100644 --- a/stader/stader.go +++ b/stader/stader.go @@ -33,7 +33,6 @@ import ( ) // Run - func main() { // Initialise application app := cli.NewApp() From f2f517d4b0f1a863e7e96b4e1714388504d7c8a0 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Mon, 3 Jul 2023 17:41:02 +0700 Subject: [PATCH 87/90] Add Golangci --- .github/workflows/go_test.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/go_test.yml b/.github/workflows/go_test.yml index 84294a399..4b10ffdb8 100644 --- a/.github/workflows/go_test.yml +++ b/.github/workflows/go_test.yml @@ -10,6 +10,10 @@ jobs: ports: - 2375:2375 steps: + - name: Golangci Lint + uses: golangci/golangci-lint-action@v3 + with: + version: v1.53 - name: Install and start kurtosis run: | echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list From cd9579d483baca57765e6da43bfa1770e19e304e Mon Sep 17 00:00:00 2001 From: batphonghan Date: Mon, 3 Jul 2023 17:45:03 +0700 Subject: [PATCH 88/90] Revert "Add Golangci" This reverts commit f2f517d4b0f1a863e7e96b4e1714388504d7c8a0. --- .github/workflows/go_test.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/go_test.yml b/.github/workflows/go_test.yml index 4b10ffdb8..84294a399 100644 --- a/.github/workflows/go_test.yml +++ b/.github/workflows/go_test.yml @@ -10,10 +10,6 @@ jobs: ports: - 2375:2375 steps: - - name: Golangci Lint - uses: golangci/golangci-lint-action@v3 - with: - version: v1.53 - name: Install and start kurtosis run: | echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list From 76728dbb71df219ab6329402057234e3bf019e33 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 5 Jul 2023 09:56:08 +0700 Subject: [PATCH 89/90] Fix test failed --- testing/httptest/http.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/testing/httptest/http.go b/testing/httptest/http.go index 3068be699..b2f432e1d 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -1,7 +1,9 @@ package httptest import ( + "crypto/rand" "crypto/rsa" + "crypto/sha256" "crypto/x509" _ "embed" "encoding/json" @@ -162,7 +164,7 @@ func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { decodeSig, err := crypto.DecodeBase64(v.Signature) require.Nil(s.t, err) - byteSig, err := crypto.DecryptUsingPublicKey(decodeSig, s.privatekey) + byteSig, err := DecryptUsingPublicKey(decodeSig, s.privatekey) require.Nil(s.t, err) var sig bls.Sign @@ -232,3 +234,12 @@ func (s *StaderHandler) srHash(t *testing.T, request stader_backend.PreSignSendA return srHash } + +func DecryptUsingPublicKey(data []byte, privateKey *rsa.PrivateKey) ([]byte, error) { + exitMsgEncrypted, err := rsa.DecryptOAEP(sha256.New(), rand.Reader, privateKey, data, nil) + if err != nil { + return nil, err + } + + return exitMsgEncrypted, nil +} From ae78d16740ceaa85c2a66ddac565b59f419878b6 Mon Sep 17 00:00:00 2001 From: batphonghan Date: Wed, 5 Jul 2023 09:56:56 +0700 Subject: [PATCH 90/90] Refactor name --- testing/httptest/http.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/testing/httptest/http.go b/testing/httptest/http.go index b2f432e1d..72b515050 100644 --- a/testing/httptest/http.go +++ b/testing/httptest/http.go @@ -164,7 +164,7 @@ func (s *StaderHandler) presigns(w http.ResponseWriter, r *http.Request) { decodeSig, err := crypto.DecodeBase64(v.Signature) require.Nil(s.t, err) - byteSig, err := DecryptUsingPublicKey(decodeSig, s.privatekey) + byteSig, err := DecryptUsingPrivateKey(decodeSig, s.privatekey) require.Nil(s.t, err) var sig bls.Sign @@ -235,7 +235,7 @@ func (s *StaderHandler) srHash(t *testing.T, request stader_backend.PreSignSendA return srHash } -func DecryptUsingPublicKey(data []byte, privateKey *rsa.PrivateKey) ([]byte, error) { +func DecryptUsingPrivateKey(data []byte, privateKey *rsa.PrivateKey) ([]byte, error) { exitMsgEncrypted, err := rsa.DecryptOAEP(sha256.New(), rand.Reader, privateKey, data, nil) if err != nil { return nil, err