blobstream-contracts 0.0.1-security → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of blobstream-contracts might be problematic. Click here for more details.

Files changed (64) hide show
  1. package/.codecov.yml +51 -0
  2. package/.github/CODEOWNERS +7 -0
  3. package/.github/dependabot.yml +18 -0
  4. package/.github/workflows/code-analysis.yml +41 -0
  5. package/.github/workflows/contract-inheritance-check.yml +28 -0
  6. package/.github/workflows/go-check.yml +25 -0
  7. package/.github/workflows/labels.yml +19 -0
  8. package/.github/workflows/lint.yml +37 -0
  9. package/.github/workflows/tests.yml +72 -0
  10. package/.gitmodules +12 -0
  11. package/.golangci.yml +64 -0
  12. package/.markdownlint.yaml +5 -0
  13. package/.markdownlint.yml +4 -0
  14. package/.markdownlintignore +1 -0
  15. package/.prettierrc.json +11 -0
  16. package/LICENSE +201 -0
  17. package/Makefile +18 -0
  18. package/README.md +102 -5
  19. package/docs/inclusion-proofs.md +69 -0
  20. package/foundry.toml +4 -0
  21. package/go.mod +34 -0
  22. package/go.sum +212 -0
  23. package/hardhat.config.ts +46 -0
  24. package/index.js +16 -0
  25. package/package.json +31 -3
  26. package/remappings.txt +6 -0
  27. package/scripts/Dockerfile_Environment +39 -0
  28. package/scripts/deploy.ts +12 -0
  29. package/scripts/gen.sh +34 -0
  30. package/scripts/upgradability_check.sh +22 -0
  31. package/slither.config.json +3 -0
  32. package/src/Blobstream.sol +366 -0
  33. package/src/Constants.sol +10 -0
  34. package/src/DataRootTuple.sol +15 -0
  35. package/src/IDAOracle.sol +18 -0
  36. package/src/lib/tree/Constants.sol +23 -0
  37. package/src/lib/tree/Types.sol +37 -0
  38. package/src/lib/tree/Utils.sol +106 -0
  39. package/src/lib/tree/binary/BinaryMerkleMultiproof.sol +12 -0
  40. package/src/lib/tree/binary/BinaryMerkleProof.sol +12 -0
  41. package/src/lib/tree/binary/BinaryMerkleTree.sol +256 -0
  42. package/src/lib/tree/binary/TreeHasher.sol +23 -0
  43. package/src/lib/tree/binary/test/BinaryMerkleTree.t.sol +365 -0
  44. package/src/lib/tree/binary/test/TreeHasher.t.sol +40 -0
  45. package/src/lib/tree/namespace/NamespaceMerkleMultiproof.sol +14 -0
  46. package/src/lib/tree/namespace/NamespaceMerkleProof.sol +14 -0
  47. package/src/lib/tree/namespace/NamespaceMerkleTree.sol +306 -0
  48. package/src/lib/tree/namespace/NamespaceNode.sol +23 -0
  49. package/src/lib/tree/namespace/TreeHasher.sol +69 -0
  50. package/src/lib/tree/namespace/test/NamespaceMerkleMultiproof.t.sol +108 -0
  51. package/src/lib/tree/namespace/test/NamespaceMerkleTree.t.sol +644 -0
  52. package/src/lib/tree/namespace/test/TreeHasher.t.sol +66 -0
  53. package/src/lib/tree/test/Utils.t.sol +48 -0
  54. package/src/lib/tree/test/blob.dat +0 -0
  55. package/src/lib/tree/test/header.dat +0 -0
  56. package/src/lib/tree/test/proofs.json +1 -0
  57. package/src/lib/verifier/DAVerifier.sol +328 -0
  58. package/src/lib/verifier/test/DAVerifier.t.sol +396 -0
  59. package/src/lib/verifier/test/RollupInclusionProofs.t.sol +589 -0
  60. package/src/test/Blobstream.t.sol +200 -0
  61. package/src/test/BlobstreamBenchmark.t.sol +137 -0
  62. package/tsconfig.json +11 -0
  63. package/wrappers/Blobstream.sol/wrapper.go +1325 -0
  64. package/wrappers/ERC1967Proxy.sol/wrapper.go +668 -0
@@ -0,0 +1,1325 @@
1
+ // Code generated - DO NOT EDIT.
2
+ // This file is a generated binding and any manual changes will be lost.
3
+
4
+ package wrappers
5
+
6
+ import (
7
+ "errors"
8
+ "math/big"
9
+ "strings"
10
+
11
+ ethereum "github.com/ethereum/go-ethereum"
12
+ "github.com/ethereum/go-ethereum/accounts/abi"
13
+ "github.com/ethereum/go-ethereum/accounts/abi/bind"
14
+ "github.com/ethereum/go-ethereum/common"
15
+ "github.com/ethereum/go-ethereum/core/types"
16
+ "github.com/ethereum/go-ethereum/event"
17
+ )
18
+
19
+ // Reference imports to suppress errors if they are not otherwise used.
20
+ var (
21
+ _ = errors.New
22
+ _ = big.NewInt
23
+ _ = strings.NewReader
24
+ _ = ethereum.NotFound
25
+ _ = bind.Bind
26
+ _ = common.Big1
27
+ _ = types.BloomLookup
28
+ _ = event.NewSubscription
29
+ _ = abi.ConvertType
30
+ )
31
+
32
+ // BinaryMerkleProof is an auto generated low-level Go binding around an user-defined struct.
33
+ type BinaryMerkleProof struct {
34
+ SideNodes [][32]byte
35
+ Key *big.Int
36
+ NumLeaves *big.Int
37
+ }
38
+
39
+ // DataRootTuple is an auto generated low-level Go binding around an user-defined struct.
40
+ type DataRootTuple struct {
41
+ Height *big.Int
42
+ DataRoot [32]byte
43
+ }
44
+
45
+ // Signature is an auto generated low-level Go binding around an user-defined struct.
46
+ type Signature struct {
47
+ V uint8
48
+ R [32]byte
49
+ S [32]byte
50
+ }
51
+
52
+ // Validator is an auto generated low-level Go binding around an user-defined struct.
53
+ type Validator struct {
54
+ Addr common.Address
55
+ Power *big.Int
56
+ }
57
+
58
+ // WrappersMetaData contains all meta data concerning the Wrappers contract.
59
+ var WrappersMetaData = &bind.MetaData{
60
+ ABI: "[{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_powerThreshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_validatorSetCheckpoint\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"state_dataRootTupleRoots\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"state_eventNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"state_lastValidatorSetCheckpoint\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"state_powerThreshold\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"submitDataRootTupleRoot\",\"inputs\":[{\"name\":\"_newNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_validatorSetNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_dataRootTupleRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_currentValidatorSet\",\"type\":\"tuple[]\",\"internalType\":\"structValidator[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"power\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"_sigs\",\"type\":\"tuple[]\",\"internalType\":\"structSignature[]\",\"components\":[{\"name\":\"v\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"r\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"s\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateValidatorSet\",\"inputs\":[{\"name\":\"_newNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_oldNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_newPowerThreshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_newValidatorSetHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_currentValidatorSet\",\"type\":\"tuple[]\",\"internalType\":\"structValidator[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"power\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"_sigs\",\"type\":\"tuple[]\",\"internalType\":\"structSignature[]\",\"components\":[{\"name\":\"v\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"r\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"s\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"verifyAttestation\",\"inputs\":[{\"name\":\"_tupleRootNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_tuple\",\"type\":\"tuple\",\"internalType\":\"structDataRootTuple\",\"components\":[{\"name\":\"height\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"dataRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_proof\",\"type\":\"tuple\",\"internalType\":\"structBinaryMerkleProof\",\"components\":[{\"name\":\"sideNodes\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"key\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"numLeaves\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DataRootTupleRootEvent\",\"inputs\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"dataRootTupleRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorSetUpdatedEvent\",\"inputs\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"powerThreshold\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"validatorSetHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AlreadyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientVotingPower\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDataRootTupleRootNonce\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorSetNonce\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MalformedCurrentValidatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnableInvalidOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"SuppliedValidatorSetInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}]",
61
+ Bin: "0x60a06040523462000044576200001462000054565b6200001e6200004a565b61350e620000d58239608051818181611caf01528181611d1b0152611ee6015261350e90f35b62000050565b60405190565b5f80fd5b6200005e62000060565b565b6200006a6200006c565b565b62000076620000c4565b565b60018060a01b031690565b90565b6200009f62000099620000a59262000078565b62000083565b62000078565b90565b620000b39062000086565b90565b620000c190620000a8565b90565b620000cf30620000b6565b60805256fe60806040526004361015610013575b610be7565b61001d5f356100fc565b806305d85c13146100f75780631f3302a9146100f2578063226fe7be146100ed5780634f1ef286146100e857806352d1902d146100e35780635433218c146100de578063715018a6146100d9578063817f985b146100d45780638da5cb5b146100cf578063ad3cb1cc146100ca578063cdade866146100c5578063e23eb326146100c0578063e5a2b5d2146100bb5763f2fde38b0361000e57610bb4565b610b61565b610b18565b610a5a565b6109cb565b610882565b61082b565b61078c565b610757565b6106e6565b61068b565b61054d565b6104dd565b610284565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f80fd5b90565b61012081610114565b0361012757565b5f80fd5b9050359061013882610117565b565b90565b6101468161013a565b0361014d57565b5f80fd5b9050359061015e8261013d565b565b5f80fd5b5f80fd5b5f80fd5b909182601f830112156101a65781359167ffffffffffffffff83116101a157602001926040830284011161019c57565b610168565b610164565b610160565b909182601f830112156101e55781359167ffffffffffffffff83116101e05760200192606083028401116101db57565b610168565b610164565b610160565b60c08183031261027a57610200825f830161012b565b9261020e836020840161012b565b9261021c816040850161012b565b9261022a8260608301610151565b92608082013567ffffffffffffffff8111610275578361024b91840161016c565b92909360a082013567ffffffffffffffff81116102705761026c92016101ab565b9091565b610110565b610110565b61010c565b5f0190565b346102bc576102a66102973660046101ea565b96959095949194939293610d2b565b6102ae610102565b806102b88161027f565b0390f35b610108565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906102ed906102c5565b810190811067ffffffffffffffff82111761030757604052565b6102cf565b9061031f610318610102565b92836102e3565b565b5f80fd5b919060408382031261035f576103589061033f604061030c565b9361034c825f830161012b565b5f860152602001610151565b6020830152565b6102c1565b67ffffffffffffffff811161037c5760208091020190565b6102cf565b9092919261039661039182610364565b61030c565b93818552602080860192028301928184116103d357915b8383106103ba5750505050565b602080916103c88486610151565b8152019201916103ad565b610168565b9080601f830112156103f6578160206103f393359101610381565b90565b610160565b91909160608184031261046057610412606061030c565b925f8201359167ffffffffffffffff831161045b57610436826104549483016103d8565b5f860152610447826020830161012b565b602086015260400161012b565b6040830152565b610321565b6102c1565b916080838303126104b15761047c825f850161012b565b9261048a8360208301610325565b92606082013567ffffffffffffffff81116104ac576104a992016103fb565b90565b610110565b61010c565b151590565b6104c4906104b6565b9052565b91906104db905f602085019401906104bb565b565b3461050e5761050a6104f96104f3366004610465565b91610f1c565b610501610102565b918291826104c8565b0390f35b610108565b90916060828403126105485761054561052e845f850161012b565b9361053c816020860161012b565b93604001610151565b90565b61010c565b3461057c57610566610560366004610513565b916112e1565b61056e610102565b806105788161027f565b0390f35b610108565b60018060a01b031690565b61059590610581565b90565b6105a18161058c565b036105a857565b5f80fd5b905035906105b982610598565b565b5f80fd5b67ffffffffffffffff81116105dd576105d96020916102c5565b0190565b6102cf565b90825f939282370152565b909291926106026105fd826105bf565b61030c565b9381855260208501908284011161061e5761061c926105e2565b565b6105bb565b9080601f830112156106415781602061063e933591016105ed565b90565b610160565b9190916040818403126106865761065f835f83016105ac565b92602082013567ffffffffffffffff81116106815761067e9201610623565b90565b610110565b61010c565b61069f610699366004610646565b90611317565b6106a7610102565b806106b18161027f565b0390f35b5f9103126106bf57565b61010c565b6106cd9061013a565b9052565b91906106e4905f602085019401906106c4565b565b34610716576106f63660046106b5565b610712610701611392565b610709610102565b918291826106d1565b0390f35b610108565b1c90565b90565b610732906008610737930261071b565b61071f565b90565b906107459154610722565b90565b61075460965f9061073a565b90565b34610787576107673660046106b5565b610783610772610748565b61077a610102565b918291826106d1565b0390f35b610108565b346107ba5761079c3660046106b5565b6107a46113f2565b6107ac610102565b806107b68161027f565b0390f35b610108565b906020828203126107d8576107d5915f0161012b565b90565b61010c565b90565b6107f46107ef6107f992610114565b6107dd565b610114565b90565b90610806906107e0565b5f5260205260405f2090565b610828906108236099915f926107fc565b61073a565b90565b3461085b576108576108466108413660046107bf565b610812565b61084e610102565b918291826106d1565b0390f35b610108565b6108699061058c565b9052565b9190610880905f60208501940190610860565b565b346108b2576108923660046106b5565b6108ae61089d61142c565b6108a5610102565b9182918261086d565b0390f35b610108565b67ffffffffffffffff81116108d5576108d16020916102c5565b0190565b6102cf565b906108ec6108e7836108b7565b61030c565b918252565b5f7f352e302e30000000000000000000000000000000000000000000000000000000910152565b61092260056108da565b9061092f602083016108f1565b565b610939610918565b90565b610944610931565b90565b61094f61093c565b90565b5190565b60209181520190565b5f5b838110610971575050905f910152565b806020918301518185015201610961565b6109a16109aa6020936109af9361099881610952565b93848093610956565b9586910161095f565b6102c5565b0190565b6109c89160208201915f818403910152610982565b90565b346109fb576109db3660046106b5565b6109f76109e6610947565b6109ee610102565b918291826109b3565b0390f35b610108565b90565b610a13906008610a18930261071b565b610a00565b90565b90610a269154610a03565b90565b610a3560985f90610a1b565b90565b610a4190610114565b9052565b9190610a58905f60208501940190610a38565b565b34610a8a57610a6a3660046106b5565b610a86610a75610a29565b610a7d610102565b91829182610a45565b0390f35b610108565b909160a082840312610b1357610aa7835f840161012b565b92610ab5816020850161012b565b92610ac38260408301610151565b92606082013567ffffffffffffffff8111610b0e5783610ae491840161016c565b929093608082013567ffffffffffffffff8111610b0957610b0592016101ab565b9091565b610110565b610110565b61010c565b34610b4d57610b37610b2b366004610a8f565b95949094939193611442565b610b3f610102565b80610b498161027f565b0390f35b610108565b610b5e60975f90610a1b565b90565b34610b9157610b713660046106b5565b610b8d610b7c610b52565b610b84610102565b91829182610a45565b0390f35b610108565b90602082820312610baf57610bac915f016105ac565b90565b61010c565b34610be257610bcc610bc7366004610b96565b611641565b610bd4610102565b80610bde8161027f565b0390f35b610108565b5f80fd5b5f1c90565b610bfc610c0191610beb565b610a00565b90565b610c0e9054610bf0565b90565b610c1d610c2291610beb565b61071f565b90565b610c2f9054610c11565b90565b90565b610c49610c44610c4e92610c32565b6107dd565b610114565b90565b634e487b7160e01b5f52601160045260245ffd5b610c74610c7a91939293610114565b92610114565b8201809211610c8557565b610c51565b5090565b5090565b5f1b90565b90610ca35f1991610c92565b9181191691161790565b610cb69061013a565b90565b610cc290610beb565b90565b90610cda610cd5610ce192610cad565b610cb9565b8254610c97565b9055565b90565b90610cfd610cf8610d04926107e0565b610ce5565b8254610c97565b9055565b916020610d29929493610d2260408201965f830190610a38565b01906106c4565b565b9490969195939296610d3d6098610c04565b610d476097610c04565b91610d526096610c25565b91610d79610d73610d6e8b93610d686001610c35565b90610c65565b610114565b91610114565b03610ea257610d89868590610c8a565b610da5610d9f610d9a8a8990610c8e565b610114565b91610114565b03610e7f57610dcd610dc7610dd392610dbf898890611751565b869091611810565b9261013a565b9161013a565b03610e5c57610e0094610df993610dec888a8c91611810565b95939190918693946118cb565b6096610cc5565b610e0b826097610ce8565b610e16816098610ce8565b9091610e427fe55fb3cbbfe29b13c7f8a35ef23127e7df9ab88df16bac166ad254a20f02414c926107e0565b92610e57610e4e610102565b92839283610d08565b0390a2565b610e64610102565b630bbdaec960e11b815280610e7b6004820161027f565b0390fd5b610e87610102565b63c6617b7b60e01b815280610e9e6004820161027f565b0390fd5b610eaa610102565b6368a35ffd60e11b815280610ec16004820161027f565b0390fd5b5f90565b610ed290610114565b9052565b610edf9061013a565b9052565b90602080610f0593610efb5f8201515f860190610ec9565b0151910190610ed6565b565b9190610f1a905f60408501940190610ee3565b565b90610f25610ec5565b5081610f42610f3c610f376098610c04565b610114565b91610114565b11610f9257610f8e92610f89610f64610f5f610f7a9560996107fc565b610c25565b9192610f6e610102565b94859160208301610f07565b602082018103825203846102e3565b611a6f565b5090565b5050505f90565b60401c90565b60ff1690565b610fb1610fb691610f99565b610f9f565b90565b610fc39054610fa5565b90565b67ffffffffffffffff1690565b610fdf610fe491610beb565b610fc6565b90565b610ff19054610fd3565b90565b67ffffffffffffffff1690565b61101561101061101a92610c32565b6107dd565b610ff4565b90565b61103161102c61103692610581565b6107dd565b610581565b90565b6110429061101d565b90565b61104e90611039565b90565b90565b61106861106361106d92611051565b6107dd565b610114565b90565b9061108367ffffffffffffffff91610c92565b9181191691161790565b6110a161109c6110a692610ff4565b6107dd565b610ff4565b90565b90565b906110c16110bc6110c89261108d565b6110a9565b8254611070565b9055565b60401b90565b906110e668ff0000000000000000916110cc565b9181191691161790565b6110f9906104b6565b90565b90565b9061111461110f61111b926110f0565b6110fc565b82546110d2565b9055565b61112890611001565b9052565b919061113f905f6020850194019061111f565b565b611149611c38565b9261115e6111585f8601610fb9565b156104b6565b928380611285575b61117090156104b6565b80611228575b6112065761119e9261119361118b6001611001565b5f88016110ac565b846111f4575b6112af565b6111a6575b50565b6111b3905f8091016110ff565b60016111eb7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916111e2610102565b9182918261112c565b0390a15f6111a3565b61120160015f88016110ff565b611199565b61120e610102565b62dc149f60e41b8152806112246004820161027f565b0390fd5b5061123230611045565b3b61124561123f5f611054565b91610114565b148061125b575b61125690156104b6565b611176565b5061125661126a5f8701610fe7565b61127d6112776001611001565b91610ff4565b14905061124c565b506111706112945f8701610fe7565b6112a76112a16001611001565b91610ff4565b109050611166565b6112cf926112c16112c8926098610ce8565b6096610cc5565b6097610ce8565b6112df6112da611c5c565b611c87565b565b906112ec9291611141565b565b90611300916112fb611c9e565b611302565b565b906113159161131081611d57565b611dc9565b565b90611321916112ee565b565b5f90565b61133890611333611ed5565b611386565b90565b90565b61135261134d6113579261133b565b610c92565b61013a565b90565b6113837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61133e565b90565b5061138f61135a565b90565b6113a261139d611323565b611327565b90565b6113ad611f3a565b6113b56113df565b565b6113cb6113c66113d092611051565b6107dd565b610581565b90565b6113dc906113b7565b90565b6113f06113eb5f6113d3565b611fd9565b565b6113fa6113a5565b565b5f90565b60018060a01b031690565b61141761141c91610beb565b611400565b90565b611429905461140b565b90565b6114346113fc565b5061143f606461141f565b90565b9493929091956114526098610c04565b61145c6097610c04565b936114676096610c25565b9161148e6114886114838b9361147d6001610c35565b90610c65565b610114565b91610114565b036115b25761149e848790610c8a565b6114ba6114b46114af8a8790610c8e565b610114565b91610114565b0361158f576114e26114dc6114e8926114d4878a90611751565b889091611810565b9261013a565b9161013a565b0361156c57611508946114fc8789906120aa565b929490919293946118cb565b611513816098610ce8565b61152882611523609984906107fc565b610cc5565b6115676115557f6614d037bde4905e31ca5ff05de61964c267f28b0320ed49e59f7d99752e1c4f926107e0565b9261155e610102565b918291826106d1565b0390a2565b611574610102565b630bbdaec960e11b81528061158b6004820161027f565b0390fd5b611597610102565b63c6617b7b60e01b8152806115ae6004820161027f565b0390fd5b6115ba610102565b63e869766d60e01b8152806115d16004820161027f565b0390fd5b6115e6906115e1611f3a565b6115e8565b565b806116036115fd6115f85f6113d3565b61058c565b9161058c565b146116135761161190611fd9565b565b61163d61161f5f6113d3565b611627610102565b918291631e4fbdf760e01b83526004830161086d565b0390fd5b61164a906115d5565b565b60209181520190565b90565b506116679060208101906105ac565b90565b6116739061058c565b9052565b5061168690602081019061012b565b90565b9060206116b46116bc936116ab6116a25f830183611658565b5f86019061166a565b82810190611677565b910190610ec9565b565b906116cb81604093611689565b0190565b5090565b60400190565b916116e7826116ed9261164c565b92611655565b90815f905b828210611700575050505090565b9091929361172261171c60019261171788866116cf565b6116be565b956116d3565b9201909291926116f2565b90916117449260208301925f8185039101526116d9565b90565b60200190565b5190565b6117849061175d611323565b50611775611769610102565b9384926020840161172d565b602082018103825203826102e3565b6117966117908261174d565b91611747565b2090565b90565b6117b16117ac6117b69261179a565b610c92565b61013a565b90565b6117cf6918da1958dadc1bda5b9d60b21b61179d565b90565b61180761180e946117fd6060949897956117f3608086019a5f8701906106c4565b6020850190610a38565b6040830190610a38565b01906106c4565b565b61183f61184e9293611820611323565b506118296117b9565b9294611833610102565b958694602086016117d2565b602082018103825203826102e3565b61186061185a8261174d565b91611747565b2090565b60016118709101610114565b90565b634e487b7160e01b5f52603260045260245ffd5b9190811015611897576060020190565b611873565b91908110156118ac576040020190565b611873565b356118bb81610598565b90565b356118c881610117565b90565b909294936118d85f611054565b926118e25f611054565b935b846119016118fb6118f6878a90610c8a565b610114565b91610114565b1015611a165761191b611916838a8891611887565b612169565b611a0c5761195461194e61193b5f611935888b8b9161189c565b016118b1565b85611948868d8b91611887565b916121ec565b156104b6565b6119e95761197990611973602061196d878a8a9161189c565b016118be565b90610c65565b938461198d61198789610114565b91610114565b10156119a35761199d905b611864565b936118e4565b505050506119bf9293506119b991505b92610114565b91610114565b106119c657565b6119ce610102565b63cabeb65560e01b8152806119e56004820161027f565b0390fd5b6119f1610102565b638baa579f60e01b815280611a086004820161027f565b0390fd5b9361199d90611998565b93505050506119bf9293506119b991506119b3565b5f90565b611a399051610114565b90565b5190565b634e487b7160e01b5f52602160045260245ffd5b60061115611a5e57565b611a40565b90611a6d82611a54565b565b9091611a79610ec5565b50611a82611a2b565b50611a8f60408401611a2f565b611aa2611a9c6001610c35565b91610114565b11155f14611bea57611ab65f840151611a3c565b611ac8611ac25f611054565b91610114565b03611be0575b611ada60208401611a2f565b611af7611af1611aec60408701611a2f565b610114565b91610114565b1015611bd657611b0690612474565b91611b135f820151611a3c565b611b25611b1f5f611054565b91610114565b14611b8f579182611b3c6020611b54949501611a2f565b915f611b4a60408401611a2f565b919201519261250e565b80611b67611b615f611a63565b91611a63565b03611b865750611b7a611b80919261013a565b9161013a565b14905f90565b929150505f9190565b6040611b9b9101611a2f565b611bae611ba86001610c35565b91610114565b145f14611bce57611bc2611bc8919261013a565b9161013a565b14905f90565b50505f905f90565b5050505f90600290565b5050505f90600190565b611bf65f840151611a3c565b611c28611c22611c1d611c0b60208801611a2f565b611c1760408901611a2f565b906122c3565b610114565b91610114565b0315611ace575050505f90600190565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0e90565b611c646113fc565b503390565b611c7a90611c75612722565b611c7c565b565b611c859061277a565b565b611c9090611c69565b565b611c9b90611039565b90565b611ca730611c92565b611cd9611cd37f000000000000000000000000000000000000000000000000000000000000000061058c565b9161058c565b148015611d0a575b611ce757565b611cef610102565b63703e46dd60e11b815280611d066004820161027f565b0390fd5b50611d13612785565b611d45611d3f7f000000000000000000000000000000000000000000000000000000000000000061058c565b9161058c565b1415611ce1565b50611d55611f3a565b565b611d6090611d4c565b565b611d6b9061101d565b90565b611d7790611d62565b90565b611d8390611039565b90565b60e01b90565b90505190611d998261013d565b565b90602082820312611db457611db1915f01611d8c565b90565b61010c565b611dc1610102565b3d5f823e3d90fd5b9190611df76020611de1611ddc86611d6e565b611d7a565b6352d1902d90611def610102565b938492611d86565b82528180611e076004820161027f565b03915afa80915f92611ea5575b50155f14611e4f575050906001611e2957505b565b611e4b90611e35610102565b918291634c9c8ce360e01b83526004830161086d565b0390fd5b9283611e6a611e64611e5f61135a565b61013a565b9161013a565b03611e7f57611e7a9293506127ab565b611e27565b611ea184611e8b610102565b918291632a87526960e21b8352600483016106d1565b0390fd5b611ec791925060203d8111611ece575b611ebf81836102e3565b810190611d9b565b905f611e14565b503d611eb5565b611ede30611c92565b611f10611f0a7f000000000000000000000000000000000000000000000000000000000000000061058c565b9161058c565b03611f1757565b611f1f610102565b63703e46dd60e11b815280611f366004820161027f565b0390fd5b611f4261142c565b611f5b611f55611f50611c5c565b61058c565b9161058c565b03611f6257565b611f8b611f6d611c5c565b611f75610102565b91829163118cdaa760e01b83526004830161086d565b0390fd5b90611fa060018060a01b0391610c92565b9181191691161790565b611fb390611039565b90565b90565b90611fce611fc9611fd592611faa565b611fb6565b8254611f8f565b9055565b611fe3606461141f565b611fee826064611fb9565b9061202261201c7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e093611faa565b91611faa565b9161202b610102565b806120358161027f565b0390a3565b90565b61205161204c6120569261203a565b610c92565b61013a565b90565b6120756f0e8e4c2dce6c2c6e8d2dedc84c2e8c6d60831b61203d565b90565b6040906120a16120a8949695939661209760608401985f8501906106c4565b6020830190610a38565b01906106c4565b565b6120e7906120b6611323565b506120d86120c2612059565b91936120cc610102565b94859360208501612078565b602082018103825203826102e3565b6120f96120f38261174d565b91611747565b2090565b356121078161013d565b90565b61211e61211961212392611051565b610c92565b61013a565b90565b60ff1690565b61213581612126565b0361213c57565b5f80fd5b3561214a8161212c565b90565b61216161215c61216692611051565b6107dd565b612126565b90565b612171610ec5565b5061217e602082016120fd565b61219061218a5f61210a565b9161013a565b14806121c7575b90816121a2575b5090565b6121ae91505f01612140565b6121c06121ba5f61214d565b91612126565b145f61219e565b506121d4604082016120fd565b6121e66121e05f61210a565b9161013a565b14612197565b916122336122389161220961223e94612203610ec5565b506128ab565b906122155f8201612140565b61222d6040612226602085016120fd565b93016120fd565b926128f4565b61058c565b9161058c565b1490565b5f90565b90565b61225d61225861226292612246565b6107dd565b610114565b90565b612270610100612249565b90565b61228261228891939293610114565b92610114565b820391821161229357565b610c51565b1b90565b6122bb906122b56122af6122c094610114565b91610114565b90612298565b610114565b90565b6122cb612242565b50816122e06122da6001610c35565b91610114565b11156123c2576123006122f1612265565b6122fa8461291a565b90612273565b91612328600161232361231d866123176001610c35565b90612273565b91610c35565b61229c565b908261234f6123496123448561233e6001610c35565b90612273565b610114565b91610114565b11155f1461235d5750505090565b908092935061237561236f6001610c35565b91610114565b145f1461238c575050506123896001610c35565b90565b6123a66123ac926123a06001958290612273565b92612273565b906122c3565b906123ba6123bf9291610c35565b610c65565b90565b50506123cd5f611054565b90565b60ff60f81b1690565b60f81b90565b6123f36123ee6123f892611051565b6123d9565b6123d0565b90565b6124045f6123df565b90565b90565b61241661241b916123d0565b612407565b9052565b905090565b612449612440926020926124378161174d565b9485809361241f565b9384910161095f565b0190565b8061245e600192612465959461240a565b0190612424565b90565b61247191612424565b90565b5f6124c4602092612483611323565b506124b361248f6123fb565b6124a561249a610102565b93849288840161244d565b8682018103825203826102e3565b6124bb610102565b91829182612468565b039060025afa156124dc576124d95f51610c92565b90565b611db9565b906124eb82611a3c565b8110156124fc576020809102010190565b611873565b61250b905161013a565b90565b939293612519611323565b50612522611a2b565b50816125366125305f611054565b91610114565b14612717578161254f6125496001610c35565b91610114565b146126e85761255d85611a3c565b61256f6125695f611054565b91610114565b146126dd5761257d826129d5565b6125ae865f906125a86125a26125928b611a3c565b61259c6001610c35565b90612273565b92611054565b90612bb6565b916125b7611a2b565b50806125cb6125c584610114565b91610114565b1061265c576125fb9392916125ed6125f3926125e5611323565b508290612273565b93612273565b84919261250e565b90918161261061260a5f611a63565b91611a63565b0361265457505061264a6126458461263f61262f61264f969792611a3c565b6126396001610c35565b90612273565b906124e1565b612501565b612d34565b905f90565b915092509190565b61267b93505f96949692919250612671611323565b509186919261250e565b90938161269061268a5f611a63565b91611a63565b036126d55750506126ca6126c56126d09394926126bf6126af82611a3c565b6126b96001610c35565b90612273565b906124e1565b612501565b90612d34565b905f90565b915092509190565b505090915090600590565b505090916126f590611a3c565b6127076127015f611054565b91610114565b0361271157905f90565b90600490565b505090915090600390565b61273361272d612da4565b156104b6565b61273957565b612741610102565b631afcd79f60e31b8152806127586004820161027f565b0390fd5b61276d90612768612722565b61276f565b565b61277890611fd9565b565b6127839061275c565b565b61278d6113fc565b506127a85f6127a261279d61135a565b612dc2565b0161141f565b90565b906127b582612dc5565b816127e07fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b91611faa565b906127e9610102565b806127f38161027f565b0390a26127ff8161174d565b61281161280b5f611054565b91610114565b115f146128255761282191612ea3565b505b565b505061282f612e21565b612823565b905090565b5f7f19457468657265756d205369676e6564204d6573736167653a0a333200000000910152565b61286c601c8092612834565b61287581612839565b0190565b90565b61288861288d9161013a565b612879565b9052565b906128a76128a0602093612860565b809261287c565b0190565b6128de6128cf916128ba611323565b506128c3610102565b92839160208301612891565b602082018103825203826102e3565b6128f06128ea8261174d565b91611747565b2090565b9261290f92612917946129056113fc565b5092909192612f92565b919091613281565b90565b612922612242565b5061292c5f611054565b5b612941600161293c8391610c35565b61229c565b61295361294d84610114565b91610114565b10156129725761296d906129676001610c35565b90610c65565b61292d565b612984915061297f612265565b612273565b90565b1561298e57565b5f80fd5b6129a66129a16129ab92610c32565b6107dd565b612126565b90565b6129cd906129c76129c16129d294612126565b91610114565b9061071b565b610114565b90565b6129dd612242565b506129fc816129f56129ef6001610c35565b91610114565b1015612987565b612a2c612a08826133ad565b612a27612a21600192612a1b6001610c35565b90612273565b91610c35565b61229c565b90612a40612a3a8392610114565b91610114565b14612a49575b90565b612a5d90612a576001612992565b906129ae565b612a46565b606090565b60207f207468616e205f656e6400000000000000000000000000000000000000000000917f496e76616c69642072616e67653a205f626567696e20697320677265617465725f8201520152565b612ac1602a604092610956565b612aca81612a67565b0190565b612ae39060208101905f818303910152612ab4565b90565b60207f65206f7574206f6620626f756e64730000000000000000000000000000000000917f496e76616c69642072616e67653a205f626567696e206f72205f656e642061725f8201520152565b612b40602f604092610956565b612b4981612ae6565b0190565b612b629060208101905f818303910152612b33565b90565b90612b77612b7283610364565b61030c565b918252565b369037565b90612ba6612b8e83612b65565b92602080612b9c8693610364565b9201910390612b7c565b565b90612bb29061013a565b9052565b929092612bc1612a62565b5083612bd5612bcf85610114565b91610114565b11612cbd5783612bf5612bef612bea84611a3c565b610114565b91610114565b118015612c9b575b612c7957612c14612c0f848690612273565b612b81565b91845b80612c2a612c2487610114565b91610114565b1015612c7057612c6b90612c66612c4a612c458684906124e1565b612501565b612c618791612c5a858c90612273565b90926124e1565b612ba8565b611864565b612c17565b50935050905090565b612c81610102565b62461bcd60e51b815280612c9760048201612b4d565b0390fd5b5082612cb7612cb1612cac84611a3c565b610114565b91610114565b11612bfd565b612cc5610102565b62461bcd60e51b815280612cdb60048201612ace565b0390fd5b612cf3612cee612cf892610c32565b6123d9565b6123d0565b90565b612d056001612cdf565b90565b60209392612d28600183612d208895612d309761240a565b01809261287c565b01809261287c565b0190565b612d87602092612d765f93612d47611323565b50612d68612d53612cfb565b9193612d5d610102565b948593898501612d08565b8682018103825203826102e3565b612d7e610102565b91829182612468565b039060025afa15612d9f57612d9c5f51610c92565b90565b611db9565b612dac610ec5565b50612dbf5f612db9611c38565b01610fb9565b90565b90565b803b612dd9612dd35f611054565b91610114565b14612dfb57612df9905f612df3612dee61135a565b612dc2565b01611fb9565b565b612e1d90612e07610102565b918291634c9c8ce360e01b83526004830161086d565b0390fd5b34612e34612e2e5f611054565b91610114565b11612e3b57565b612e43610102565b63b398979f60e01b815280612e5a6004820161027f565b0390fd5b606090565b90612e75612e70836105bf565b61030c565b918252565b3d5f14612e9557612e8a3d612e63565b903d5f602084013e5b565b612e9d612e5e565b90612e93565b5f80612ecf93612eb1612e5e565b508390602081019051915af490612ec6612e7a565b90919091613400565b90565b5f90565b612ee2612ee791610beb565b6107e0565b90565b90565b612f01612efc612f0692612eea565b6107dd565b610114565b90565b90565b612f20612f1b612f2592612f09565b6107dd565b612126565b90565b90565b612f3f612f3a612f4492612f28565b6107dd565b612126565b90565b612f5090612126565b9052565b612f89612f9094612f7f606094989795612f75608086019a5f8701906106c4565b6020850190612f47565b60408301906106c4565b01906106c4565b565b929190612f9d6113fc565b50612fa6612ed2565b50612fb083612ed6565b612fe2612fdc7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0612eed565b91610114565b116130a35780612ffb612ff5601b612f0c565b91612126565b141580613087575b613074576130225f936020959293613019610102565b94859485612f54565b838052039060015afa1561306f5761303a5f51610c92565b8061305561304f61304a5f6113d3565b61058c565b9161058c565b1461305f57905f90565b506130695f6113d3565b90600190565b611db9565b505050506130815f6113d3565b90600490565b508061309c613096601c612f2b565b91612126565b1415613003565b505050506130b05f6113d3565b90600390565b600511156130c057565b611a40565b906130cf826130b6565b565b60207f7565000000000000000000000000000000000000000000000000000000000000917f45434453413a20696e76616c6964207369676e6174757265202776272076616c5f8201520152565b61312b6022604092610956565b613134816130d1565b0190565b61314d9060208101905f81830391015261311e565b90565b60207f7565000000000000000000000000000000000000000000000000000000000000917f45434453413a20696e76616c6964207369676e6174757265202773272076616c5f8201520152565b6131aa6022604092610956565b6131b381613150565b0190565b6131cc9060208101905f81830391015261319d565b90565b5f7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800910152565b613203601f602092610956565b61320c816131cf565b0190565b6132259060208101905f8183039101526131f6565b90565b5f7f45434453413a20696e76616c6964207369676e61747572650000000000000000910152565b61325c6018602092610956565b61326581613228565b0190565b61327e9060208101905f81830391015261324f565b90565b8061329461328e5f6130c5565b916130c5565b145f1461329e5750565b806132b26132ac60016130c5565b916130c5565b145f146132db576132c1610102565b62461bcd60e51b8152806132d760048201613269565b0390fd5b806132ef6132e960026130c5565b916130c5565b145f14613318576132fe610102565b62461bcd60e51b81528061331460048201613210565b0390fd5b8061332c61332660036130c5565b916130c5565b145f146133555761333b610102565b62461bcd60e51b815280613351600482016131b7565b0390fd5b61336861336260046130c5565b916130c5565b1461336f57565b613377610102565b62461bcd60e51b81528061338d60048201613138565b0390fd5b61339a90610114565b5f1981146133a85760010190565b610c51565b6133b5612242565b506133bf5f611054565b5b816133d36133cd5f611054565b91610114565b146133fb576133e46133f591613391565b916133ef6001612992565b906129ae565b906133c0565b905090565b906134149061340d612e5e565b50156104b6565b5f14613420575061348b565b6134298261174d565b61343b6134355f611054565b91610114565b1480613470575b61344a575090565b61346c90613456610102565b918291639996b31560e01b83526004830161086d565b0390fd5b50803b61348561347f5f611054565b91610114565b14613442565b6134948161174d565b6134a66134a05f611054565b91610114565b115f146134b557805190602001fd5b6134bd610102565b630a12f52160e11b8152806134d46004820161027f565b0390fdfea26469706673582212203fa473e1094dcd2c4adec9a31e5b8354ab4733484f056fd4c72cc0777e1e452264736f6c63430008160033",
62
+ }
63
+
64
+ // WrappersABI is the input ABI used to generate the binding from.
65
+ // Deprecated: Use WrappersMetaData.ABI instead.
66
+ var WrappersABI = WrappersMetaData.ABI
67
+
68
+ // WrappersBin is the compiled bytecode used for deploying new contracts.
69
+ // Deprecated: Use WrappersMetaData.Bin instead.
70
+ var WrappersBin = WrappersMetaData.Bin
71
+
72
+ // DeployWrappers deploys a new Ethereum contract, binding an instance of Wrappers to it.
73
+ func DeployWrappers(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Wrappers, error) {
74
+ parsed, err := WrappersMetaData.GetAbi()
75
+ if err != nil {
76
+ return common.Address{}, nil, nil, err
77
+ }
78
+ if parsed == nil {
79
+ return common.Address{}, nil, nil, errors.New("GetABI returned nil")
80
+ }
81
+
82
+ address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(WrappersBin), backend)
83
+ if err != nil {
84
+ return common.Address{}, nil, nil, err
85
+ }
86
+ return address, tx, &Wrappers{WrappersCaller: WrappersCaller{contract: contract}, WrappersTransactor: WrappersTransactor{contract: contract}, WrappersFilterer: WrappersFilterer{contract: contract}}, nil
87
+ }
88
+
89
+ // Wrappers is an auto generated Go binding around an Ethereum contract.
90
+ type Wrappers struct {
91
+ WrappersCaller // Read-only binding to the contract
92
+ WrappersTransactor // Write-only binding to the contract
93
+ WrappersFilterer // Log filterer for contract events
94
+ }
95
+
96
+ // WrappersCaller is an auto generated read-only Go binding around an Ethereum contract.
97
+ type WrappersCaller struct {
98
+ contract *bind.BoundContract // Generic contract wrapper for the low level calls
99
+ }
100
+
101
+ // WrappersTransactor is an auto generated write-only Go binding around an Ethereum contract.
102
+ type WrappersTransactor struct {
103
+ contract *bind.BoundContract // Generic contract wrapper for the low level calls
104
+ }
105
+
106
+ // WrappersFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
107
+ type WrappersFilterer struct {
108
+ contract *bind.BoundContract // Generic contract wrapper for the low level calls
109
+ }
110
+
111
+ // WrappersSession is an auto generated Go binding around an Ethereum contract,
112
+ // with pre-set call and transact options.
113
+ type WrappersSession struct {
114
+ Contract *Wrappers // Generic contract binding to set the session for
115
+ CallOpts bind.CallOpts // Call options to use throughout this session
116
+ TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
117
+ }
118
+
119
+ // WrappersCallerSession is an auto generated read-only Go binding around an Ethereum contract,
120
+ // with pre-set call options.
121
+ type WrappersCallerSession struct {
122
+ Contract *WrappersCaller // Generic contract caller binding to set the session for
123
+ CallOpts bind.CallOpts // Call options to use throughout this session
124
+ }
125
+
126
+ // WrappersTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
127
+ // with pre-set transact options.
128
+ type WrappersTransactorSession struct {
129
+ Contract *WrappersTransactor // Generic contract transactor binding to set the session for
130
+ TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
131
+ }
132
+
133
+ // WrappersRaw is an auto generated low-level Go binding around an Ethereum contract.
134
+ type WrappersRaw struct {
135
+ Contract *Wrappers // Generic contract binding to access the raw methods on
136
+ }
137
+
138
+ // WrappersCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
139
+ type WrappersCallerRaw struct {
140
+ Contract *WrappersCaller // Generic read-only contract binding to access the raw methods on
141
+ }
142
+
143
+ // WrappersTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
144
+ type WrappersTransactorRaw struct {
145
+ Contract *WrappersTransactor // Generic write-only contract binding to access the raw methods on
146
+ }
147
+
148
+ // NewWrappers creates a new instance of Wrappers, bound to a specific deployed contract.
149
+ func NewWrappers(address common.Address, backend bind.ContractBackend) (*Wrappers, error) {
150
+ contract, err := bindWrappers(address, backend, backend, backend)
151
+ if err != nil {
152
+ return nil, err
153
+ }
154
+ return &Wrappers{WrappersCaller: WrappersCaller{contract: contract}, WrappersTransactor: WrappersTransactor{contract: contract}, WrappersFilterer: WrappersFilterer{contract: contract}}, nil
155
+ }
156
+
157
+ // NewWrappersCaller creates a new read-only instance of Wrappers, bound to a specific deployed contract.
158
+ func NewWrappersCaller(address common.Address, caller bind.ContractCaller) (*WrappersCaller, error) {
159
+ contract, err := bindWrappers(address, caller, nil, nil)
160
+ if err != nil {
161
+ return nil, err
162
+ }
163
+ return &WrappersCaller{contract: contract}, nil
164
+ }
165
+
166
+ // NewWrappersTransactor creates a new write-only instance of Wrappers, bound to a specific deployed contract.
167
+ func NewWrappersTransactor(address common.Address, transactor bind.ContractTransactor) (*WrappersTransactor, error) {
168
+ contract, err := bindWrappers(address, nil, transactor, nil)
169
+ if err != nil {
170
+ return nil, err
171
+ }
172
+ return &WrappersTransactor{contract: contract}, nil
173
+ }
174
+
175
+ // NewWrappersFilterer creates a new log filterer instance of Wrappers, bound to a specific deployed contract.
176
+ func NewWrappersFilterer(address common.Address, filterer bind.ContractFilterer) (*WrappersFilterer, error) {
177
+ contract, err := bindWrappers(address, nil, nil, filterer)
178
+ if err != nil {
179
+ return nil, err
180
+ }
181
+ return &WrappersFilterer{contract: contract}, nil
182
+ }
183
+
184
+ // bindWrappers binds a generic wrapper to an already deployed contract.
185
+ func bindWrappers(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
186
+ parsed, err := WrappersMetaData.GetAbi()
187
+ if err != nil {
188
+ return nil, err
189
+ }
190
+ return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil
191
+ }
192
+
193
+ // Call invokes the (constant) contract method with params as input values and
194
+ // sets the output to result. The result type might be a single field for simple
195
+ // returns, a slice of interfaces for anonymous returns and a struct for named
196
+ // returns.
197
+ func (_Wrappers *WrappersRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
198
+ return _Wrappers.Contract.WrappersCaller.contract.Call(opts, result, method, params...)
199
+ }
200
+
201
+ // Transfer initiates a plain transaction to move funds to the contract, calling
202
+ // its default method if one is available.
203
+ func (_Wrappers *WrappersRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
204
+ return _Wrappers.Contract.WrappersTransactor.contract.Transfer(opts)
205
+ }
206
+
207
+ // Transact invokes the (paid) contract method with params as input values.
208
+ func (_Wrappers *WrappersRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
209
+ return _Wrappers.Contract.WrappersTransactor.contract.Transact(opts, method, params...)
210
+ }
211
+
212
+ // Call invokes the (constant) contract method with params as input values and
213
+ // sets the output to result. The result type might be a single field for simple
214
+ // returns, a slice of interfaces for anonymous returns and a struct for named
215
+ // returns.
216
+ func (_Wrappers *WrappersCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
217
+ return _Wrappers.Contract.contract.Call(opts, result, method, params...)
218
+ }
219
+
220
+ // Transfer initiates a plain transaction to move funds to the contract, calling
221
+ // its default method if one is available.
222
+ func (_Wrappers *WrappersTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
223
+ return _Wrappers.Contract.contract.Transfer(opts)
224
+ }
225
+
226
+ // Transact invokes the (paid) contract method with params as input values.
227
+ func (_Wrappers *WrappersTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
228
+ return _Wrappers.Contract.contract.Transact(opts, method, params...)
229
+ }
230
+
231
+ // UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc.
232
+ //
233
+ // Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string)
234
+ func (_Wrappers *WrappersCaller) UPGRADEINTERFACEVERSION(opts *bind.CallOpts) (string, error) {
235
+ var out []interface{}
236
+ err := _Wrappers.contract.Call(opts, &out, "UPGRADE_INTERFACE_VERSION")
237
+
238
+ if err != nil {
239
+ return *new(string), err
240
+ }
241
+
242
+ out0 := *abi.ConvertType(out[0], new(string)).(*string)
243
+
244
+ return out0, err
245
+
246
+ }
247
+
248
+ // UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc.
249
+ //
250
+ // Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string)
251
+ func (_Wrappers *WrappersSession) UPGRADEINTERFACEVERSION() (string, error) {
252
+ return _Wrappers.Contract.UPGRADEINTERFACEVERSION(&_Wrappers.CallOpts)
253
+ }
254
+
255
+ // UPGRADEINTERFACEVERSION is a free data retrieval call binding the contract method 0xad3cb1cc.
256
+ //
257
+ // Solidity: function UPGRADE_INTERFACE_VERSION() view returns(string)
258
+ func (_Wrappers *WrappersCallerSession) UPGRADEINTERFACEVERSION() (string, error) {
259
+ return _Wrappers.Contract.UPGRADEINTERFACEVERSION(&_Wrappers.CallOpts)
260
+ }
261
+
262
+ // Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
263
+ //
264
+ // Solidity: function owner() view returns(address)
265
+ func (_Wrappers *WrappersCaller) Owner(opts *bind.CallOpts) (common.Address, error) {
266
+ var out []interface{}
267
+ err := _Wrappers.contract.Call(opts, &out, "owner")
268
+
269
+ if err != nil {
270
+ return *new(common.Address), err
271
+ }
272
+
273
+ out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
274
+
275
+ return out0, err
276
+
277
+ }
278
+
279
+ // Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
280
+ //
281
+ // Solidity: function owner() view returns(address)
282
+ func (_Wrappers *WrappersSession) Owner() (common.Address, error) {
283
+ return _Wrappers.Contract.Owner(&_Wrappers.CallOpts)
284
+ }
285
+
286
+ // Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
287
+ //
288
+ // Solidity: function owner() view returns(address)
289
+ func (_Wrappers *WrappersCallerSession) Owner() (common.Address, error) {
290
+ return _Wrappers.Contract.Owner(&_Wrappers.CallOpts)
291
+ }
292
+
293
+ // ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d.
294
+ //
295
+ // Solidity: function proxiableUUID() view returns(bytes32)
296
+ func (_Wrappers *WrappersCaller) ProxiableUUID(opts *bind.CallOpts) ([32]byte, error) {
297
+ var out []interface{}
298
+ err := _Wrappers.contract.Call(opts, &out, "proxiableUUID")
299
+
300
+ if err != nil {
301
+ return *new([32]byte), err
302
+ }
303
+
304
+ out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
305
+
306
+ return out0, err
307
+
308
+ }
309
+
310
+ // ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d.
311
+ //
312
+ // Solidity: function proxiableUUID() view returns(bytes32)
313
+ func (_Wrappers *WrappersSession) ProxiableUUID() ([32]byte, error) {
314
+ return _Wrappers.Contract.ProxiableUUID(&_Wrappers.CallOpts)
315
+ }
316
+
317
+ // ProxiableUUID is a free data retrieval call binding the contract method 0x52d1902d.
318
+ //
319
+ // Solidity: function proxiableUUID() view returns(bytes32)
320
+ func (_Wrappers *WrappersCallerSession) ProxiableUUID() ([32]byte, error) {
321
+ return _Wrappers.Contract.ProxiableUUID(&_Wrappers.CallOpts)
322
+ }
323
+
324
+ // StateDataRootTupleRoots is a free data retrieval call binding the contract method 0x817f985b.
325
+ //
326
+ // Solidity: function state_dataRootTupleRoots(uint256 ) view returns(bytes32)
327
+ func (_Wrappers *WrappersCaller) StateDataRootTupleRoots(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) {
328
+ var out []interface{}
329
+ err := _Wrappers.contract.Call(opts, &out, "state_dataRootTupleRoots", arg0)
330
+
331
+ if err != nil {
332
+ return *new([32]byte), err
333
+ }
334
+
335
+ out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
336
+
337
+ return out0, err
338
+
339
+ }
340
+
341
+ // StateDataRootTupleRoots is a free data retrieval call binding the contract method 0x817f985b.
342
+ //
343
+ // Solidity: function state_dataRootTupleRoots(uint256 ) view returns(bytes32)
344
+ func (_Wrappers *WrappersSession) StateDataRootTupleRoots(arg0 *big.Int) ([32]byte, error) {
345
+ return _Wrappers.Contract.StateDataRootTupleRoots(&_Wrappers.CallOpts, arg0)
346
+ }
347
+
348
+ // StateDataRootTupleRoots is a free data retrieval call binding the contract method 0x817f985b.
349
+ //
350
+ // Solidity: function state_dataRootTupleRoots(uint256 ) view returns(bytes32)
351
+ func (_Wrappers *WrappersCallerSession) StateDataRootTupleRoots(arg0 *big.Int) ([32]byte, error) {
352
+ return _Wrappers.Contract.StateDataRootTupleRoots(&_Wrappers.CallOpts, arg0)
353
+ }
354
+
355
+ // StateEventNonce is a free data retrieval call binding the contract method 0xcdade866.
356
+ //
357
+ // Solidity: function state_eventNonce() view returns(uint256)
358
+ func (_Wrappers *WrappersCaller) StateEventNonce(opts *bind.CallOpts) (*big.Int, error) {
359
+ var out []interface{}
360
+ err := _Wrappers.contract.Call(opts, &out, "state_eventNonce")
361
+
362
+ if err != nil {
363
+ return *new(*big.Int), err
364
+ }
365
+
366
+ out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
367
+
368
+ return out0, err
369
+
370
+ }
371
+
372
+ // StateEventNonce is a free data retrieval call binding the contract method 0xcdade866.
373
+ //
374
+ // Solidity: function state_eventNonce() view returns(uint256)
375
+ func (_Wrappers *WrappersSession) StateEventNonce() (*big.Int, error) {
376
+ return _Wrappers.Contract.StateEventNonce(&_Wrappers.CallOpts)
377
+ }
378
+
379
+ // StateEventNonce is a free data retrieval call binding the contract method 0xcdade866.
380
+ //
381
+ // Solidity: function state_eventNonce() view returns(uint256)
382
+ func (_Wrappers *WrappersCallerSession) StateEventNonce() (*big.Int, error) {
383
+ return _Wrappers.Contract.StateEventNonce(&_Wrappers.CallOpts)
384
+ }
385
+
386
+ // StateLastValidatorSetCheckpoint is a free data retrieval call binding the contract method 0x5433218c.
387
+ //
388
+ // Solidity: function state_lastValidatorSetCheckpoint() view returns(bytes32)
389
+ func (_Wrappers *WrappersCaller) StateLastValidatorSetCheckpoint(opts *bind.CallOpts) ([32]byte, error) {
390
+ var out []interface{}
391
+ err := _Wrappers.contract.Call(opts, &out, "state_lastValidatorSetCheckpoint")
392
+
393
+ if err != nil {
394
+ return *new([32]byte), err
395
+ }
396
+
397
+ out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
398
+
399
+ return out0, err
400
+
401
+ }
402
+
403
+ // StateLastValidatorSetCheckpoint is a free data retrieval call binding the contract method 0x5433218c.
404
+ //
405
+ // Solidity: function state_lastValidatorSetCheckpoint() view returns(bytes32)
406
+ func (_Wrappers *WrappersSession) StateLastValidatorSetCheckpoint() ([32]byte, error) {
407
+ return _Wrappers.Contract.StateLastValidatorSetCheckpoint(&_Wrappers.CallOpts)
408
+ }
409
+
410
+ // StateLastValidatorSetCheckpoint is a free data retrieval call binding the contract method 0x5433218c.
411
+ //
412
+ // Solidity: function state_lastValidatorSetCheckpoint() view returns(bytes32)
413
+ func (_Wrappers *WrappersCallerSession) StateLastValidatorSetCheckpoint() ([32]byte, error) {
414
+ return _Wrappers.Contract.StateLastValidatorSetCheckpoint(&_Wrappers.CallOpts)
415
+ }
416
+
417
+ // StatePowerThreshold is a free data retrieval call binding the contract method 0xe5a2b5d2.
418
+ //
419
+ // Solidity: function state_powerThreshold() view returns(uint256)
420
+ func (_Wrappers *WrappersCaller) StatePowerThreshold(opts *bind.CallOpts) (*big.Int, error) {
421
+ var out []interface{}
422
+ err := _Wrappers.contract.Call(opts, &out, "state_powerThreshold")
423
+
424
+ if err != nil {
425
+ return *new(*big.Int), err
426
+ }
427
+
428
+ out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
429
+
430
+ return out0, err
431
+
432
+ }
433
+
434
+ // StatePowerThreshold is a free data retrieval call binding the contract method 0xe5a2b5d2.
435
+ //
436
+ // Solidity: function state_powerThreshold() view returns(uint256)
437
+ func (_Wrappers *WrappersSession) StatePowerThreshold() (*big.Int, error) {
438
+ return _Wrappers.Contract.StatePowerThreshold(&_Wrappers.CallOpts)
439
+ }
440
+
441
+ // StatePowerThreshold is a free data retrieval call binding the contract method 0xe5a2b5d2.
442
+ //
443
+ // Solidity: function state_powerThreshold() view returns(uint256)
444
+ func (_Wrappers *WrappersCallerSession) StatePowerThreshold() (*big.Int, error) {
445
+ return _Wrappers.Contract.StatePowerThreshold(&_Wrappers.CallOpts)
446
+ }
447
+
448
+ // VerifyAttestation is a free data retrieval call binding the contract method 0x1f3302a9.
449
+ //
450
+ // Solidity: function verifyAttestation(uint256 _tupleRootNonce, (uint256,bytes32) _tuple, (bytes32[],uint256,uint256) _proof) view returns(bool)
451
+ func (_Wrappers *WrappersCaller) VerifyAttestation(opts *bind.CallOpts, _tupleRootNonce *big.Int, _tuple DataRootTuple, _proof BinaryMerkleProof) (bool, error) {
452
+ var out []interface{}
453
+ err := _Wrappers.contract.Call(opts, &out, "verifyAttestation", _tupleRootNonce, _tuple, _proof)
454
+
455
+ if err != nil {
456
+ return *new(bool), err
457
+ }
458
+
459
+ out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
460
+
461
+ return out0, err
462
+
463
+ }
464
+
465
+ // VerifyAttestation is a free data retrieval call binding the contract method 0x1f3302a9.
466
+ //
467
+ // Solidity: function verifyAttestation(uint256 _tupleRootNonce, (uint256,bytes32) _tuple, (bytes32[],uint256,uint256) _proof) view returns(bool)
468
+ func (_Wrappers *WrappersSession) VerifyAttestation(_tupleRootNonce *big.Int, _tuple DataRootTuple, _proof BinaryMerkleProof) (bool, error) {
469
+ return _Wrappers.Contract.VerifyAttestation(&_Wrappers.CallOpts, _tupleRootNonce, _tuple, _proof)
470
+ }
471
+
472
+ // VerifyAttestation is a free data retrieval call binding the contract method 0x1f3302a9.
473
+ //
474
+ // Solidity: function verifyAttestation(uint256 _tupleRootNonce, (uint256,bytes32) _tuple, (bytes32[],uint256,uint256) _proof) view returns(bool)
475
+ func (_Wrappers *WrappersCallerSession) VerifyAttestation(_tupleRootNonce *big.Int, _tuple DataRootTuple, _proof BinaryMerkleProof) (bool, error) {
476
+ return _Wrappers.Contract.VerifyAttestation(&_Wrappers.CallOpts, _tupleRootNonce, _tuple, _proof)
477
+ }
478
+
479
+ // Initialize is a paid mutator transaction binding the contract method 0x226fe7be.
480
+ //
481
+ // Solidity: function initialize(uint256 _nonce, uint256 _powerThreshold, bytes32 _validatorSetCheckpoint) returns()
482
+ func (_Wrappers *WrappersTransactor) Initialize(opts *bind.TransactOpts, _nonce *big.Int, _powerThreshold *big.Int, _validatorSetCheckpoint [32]byte) (*types.Transaction, error) {
483
+ return _Wrappers.contract.Transact(opts, "initialize", _nonce, _powerThreshold, _validatorSetCheckpoint)
484
+ }
485
+
486
+ // Initialize is a paid mutator transaction binding the contract method 0x226fe7be.
487
+ //
488
+ // Solidity: function initialize(uint256 _nonce, uint256 _powerThreshold, bytes32 _validatorSetCheckpoint) returns()
489
+ func (_Wrappers *WrappersSession) Initialize(_nonce *big.Int, _powerThreshold *big.Int, _validatorSetCheckpoint [32]byte) (*types.Transaction, error) {
490
+ return _Wrappers.Contract.Initialize(&_Wrappers.TransactOpts, _nonce, _powerThreshold, _validatorSetCheckpoint)
491
+ }
492
+
493
+ // Initialize is a paid mutator transaction binding the contract method 0x226fe7be.
494
+ //
495
+ // Solidity: function initialize(uint256 _nonce, uint256 _powerThreshold, bytes32 _validatorSetCheckpoint) returns()
496
+ func (_Wrappers *WrappersTransactorSession) Initialize(_nonce *big.Int, _powerThreshold *big.Int, _validatorSetCheckpoint [32]byte) (*types.Transaction, error) {
497
+ return _Wrappers.Contract.Initialize(&_Wrappers.TransactOpts, _nonce, _powerThreshold, _validatorSetCheckpoint)
498
+ }
499
+
500
+ // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
501
+ //
502
+ // Solidity: function renounceOwnership() returns()
503
+ func (_Wrappers *WrappersTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
504
+ return _Wrappers.contract.Transact(opts, "renounceOwnership")
505
+ }
506
+
507
+ // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
508
+ //
509
+ // Solidity: function renounceOwnership() returns()
510
+ func (_Wrappers *WrappersSession) RenounceOwnership() (*types.Transaction, error) {
511
+ return _Wrappers.Contract.RenounceOwnership(&_Wrappers.TransactOpts)
512
+ }
513
+
514
+ // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
515
+ //
516
+ // Solidity: function renounceOwnership() returns()
517
+ func (_Wrappers *WrappersTransactorSession) RenounceOwnership() (*types.Transaction, error) {
518
+ return _Wrappers.Contract.RenounceOwnership(&_Wrappers.TransactOpts)
519
+ }
520
+
521
+ // SubmitDataRootTupleRoot is a paid mutator transaction binding the contract method 0xe23eb326.
522
+ //
523
+ // Solidity: function submitDataRootTupleRoot(uint256 _newNonce, uint256 _validatorSetNonce, bytes32 _dataRootTupleRoot, (address,uint256)[] _currentValidatorSet, (uint8,bytes32,bytes32)[] _sigs) returns()
524
+ func (_Wrappers *WrappersTransactor) SubmitDataRootTupleRoot(opts *bind.TransactOpts, _newNonce *big.Int, _validatorSetNonce *big.Int, _dataRootTupleRoot [32]byte, _currentValidatorSet []Validator, _sigs []Signature) (*types.Transaction, error) {
525
+ return _Wrappers.contract.Transact(opts, "submitDataRootTupleRoot", _newNonce, _validatorSetNonce, _dataRootTupleRoot, _currentValidatorSet, _sigs)
526
+ }
527
+
528
+ // SubmitDataRootTupleRoot is a paid mutator transaction binding the contract method 0xe23eb326.
529
+ //
530
+ // Solidity: function submitDataRootTupleRoot(uint256 _newNonce, uint256 _validatorSetNonce, bytes32 _dataRootTupleRoot, (address,uint256)[] _currentValidatorSet, (uint8,bytes32,bytes32)[] _sigs) returns()
531
+ func (_Wrappers *WrappersSession) SubmitDataRootTupleRoot(_newNonce *big.Int, _validatorSetNonce *big.Int, _dataRootTupleRoot [32]byte, _currentValidatorSet []Validator, _sigs []Signature) (*types.Transaction, error) {
532
+ return _Wrappers.Contract.SubmitDataRootTupleRoot(&_Wrappers.TransactOpts, _newNonce, _validatorSetNonce, _dataRootTupleRoot, _currentValidatorSet, _sigs)
533
+ }
534
+
535
+ // SubmitDataRootTupleRoot is a paid mutator transaction binding the contract method 0xe23eb326.
536
+ //
537
+ // Solidity: function submitDataRootTupleRoot(uint256 _newNonce, uint256 _validatorSetNonce, bytes32 _dataRootTupleRoot, (address,uint256)[] _currentValidatorSet, (uint8,bytes32,bytes32)[] _sigs) returns()
538
+ func (_Wrappers *WrappersTransactorSession) SubmitDataRootTupleRoot(_newNonce *big.Int, _validatorSetNonce *big.Int, _dataRootTupleRoot [32]byte, _currentValidatorSet []Validator, _sigs []Signature) (*types.Transaction, error) {
539
+ return _Wrappers.Contract.SubmitDataRootTupleRoot(&_Wrappers.TransactOpts, _newNonce, _validatorSetNonce, _dataRootTupleRoot, _currentValidatorSet, _sigs)
540
+ }
541
+
542
+ // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
543
+ //
544
+ // Solidity: function transferOwnership(address newOwner) returns()
545
+ func (_Wrappers *WrappersTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) {
546
+ return _Wrappers.contract.Transact(opts, "transferOwnership", newOwner)
547
+ }
548
+
549
+ // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
550
+ //
551
+ // Solidity: function transferOwnership(address newOwner) returns()
552
+ func (_Wrappers *WrappersSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) {
553
+ return _Wrappers.Contract.TransferOwnership(&_Wrappers.TransactOpts, newOwner)
554
+ }
555
+
556
+ // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
557
+ //
558
+ // Solidity: function transferOwnership(address newOwner) returns()
559
+ func (_Wrappers *WrappersTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) {
560
+ return _Wrappers.Contract.TransferOwnership(&_Wrappers.TransactOpts, newOwner)
561
+ }
562
+
563
+ // UpdateValidatorSet is a paid mutator transaction binding the contract method 0x05d85c13.
564
+ //
565
+ // Solidity: function updateValidatorSet(uint256 _newNonce, uint256 _oldNonce, uint256 _newPowerThreshold, bytes32 _newValidatorSetHash, (address,uint256)[] _currentValidatorSet, (uint8,bytes32,bytes32)[] _sigs) returns()
566
+ func (_Wrappers *WrappersTransactor) UpdateValidatorSet(opts *bind.TransactOpts, _newNonce *big.Int, _oldNonce *big.Int, _newPowerThreshold *big.Int, _newValidatorSetHash [32]byte, _currentValidatorSet []Validator, _sigs []Signature) (*types.Transaction, error) {
567
+ return _Wrappers.contract.Transact(opts, "updateValidatorSet", _newNonce, _oldNonce, _newPowerThreshold, _newValidatorSetHash, _currentValidatorSet, _sigs)
568
+ }
569
+
570
+ // UpdateValidatorSet is a paid mutator transaction binding the contract method 0x05d85c13.
571
+ //
572
+ // Solidity: function updateValidatorSet(uint256 _newNonce, uint256 _oldNonce, uint256 _newPowerThreshold, bytes32 _newValidatorSetHash, (address,uint256)[] _currentValidatorSet, (uint8,bytes32,bytes32)[] _sigs) returns()
573
+ func (_Wrappers *WrappersSession) UpdateValidatorSet(_newNonce *big.Int, _oldNonce *big.Int, _newPowerThreshold *big.Int, _newValidatorSetHash [32]byte, _currentValidatorSet []Validator, _sigs []Signature) (*types.Transaction, error) {
574
+ return _Wrappers.Contract.UpdateValidatorSet(&_Wrappers.TransactOpts, _newNonce, _oldNonce, _newPowerThreshold, _newValidatorSetHash, _currentValidatorSet, _sigs)
575
+ }
576
+
577
+ // UpdateValidatorSet is a paid mutator transaction binding the contract method 0x05d85c13.
578
+ //
579
+ // Solidity: function updateValidatorSet(uint256 _newNonce, uint256 _oldNonce, uint256 _newPowerThreshold, bytes32 _newValidatorSetHash, (address,uint256)[] _currentValidatorSet, (uint8,bytes32,bytes32)[] _sigs) returns()
580
+ func (_Wrappers *WrappersTransactorSession) UpdateValidatorSet(_newNonce *big.Int, _oldNonce *big.Int, _newPowerThreshold *big.Int, _newValidatorSetHash [32]byte, _currentValidatorSet []Validator, _sigs []Signature) (*types.Transaction, error) {
581
+ return _Wrappers.Contract.UpdateValidatorSet(&_Wrappers.TransactOpts, _newNonce, _oldNonce, _newPowerThreshold, _newValidatorSetHash, _currentValidatorSet, _sigs)
582
+ }
583
+
584
+ // UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286.
585
+ //
586
+ // Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns()
587
+ func (_Wrappers *WrappersTransactor) UpgradeToAndCall(opts *bind.TransactOpts, newImplementation common.Address, data []byte) (*types.Transaction, error) {
588
+ return _Wrappers.contract.Transact(opts, "upgradeToAndCall", newImplementation, data)
589
+ }
590
+
591
+ // UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286.
592
+ //
593
+ // Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns()
594
+ func (_Wrappers *WrappersSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) {
595
+ return _Wrappers.Contract.UpgradeToAndCall(&_Wrappers.TransactOpts, newImplementation, data)
596
+ }
597
+
598
+ // UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286.
599
+ //
600
+ // Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns()
601
+ func (_Wrappers *WrappersTransactorSession) UpgradeToAndCall(newImplementation common.Address, data []byte) (*types.Transaction, error) {
602
+ return _Wrappers.Contract.UpgradeToAndCall(&_Wrappers.TransactOpts, newImplementation, data)
603
+ }
604
+
605
+ // WrappersDataRootTupleRootEventIterator is returned from FilterDataRootTupleRootEvent and is used to iterate over the raw logs and unpacked data for DataRootTupleRootEvent events raised by the Wrappers contract.
606
+ type WrappersDataRootTupleRootEventIterator struct {
607
+ Event *WrappersDataRootTupleRootEvent // Event containing the contract specifics and raw log
608
+
609
+ contract *bind.BoundContract // Generic contract to use for unpacking event data
610
+ event string // Event name to use for unpacking event data
611
+
612
+ logs chan types.Log // Log channel receiving the found contract events
613
+ sub ethereum.Subscription // Subscription for errors, completion and termination
614
+ done bool // Whether the subscription completed delivering logs
615
+ fail error // Occurred error to stop iteration
616
+ }
617
+
618
+ // Next advances the iterator to the subsequent event, returning whether there
619
+ // are any more events found. In case of a retrieval or parsing error, false is
620
+ // returned and Error() can be queried for the exact failure.
621
+ func (it *WrappersDataRootTupleRootEventIterator) Next() bool {
622
+ // If the iterator failed, stop iterating
623
+ if it.fail != nil {
624
+ return false
625
+ }
626
+ // If the iterator completed, deliver directly whatever's available
627
+ if it.done {
628
+ select {
629
+ case log := <-it.logs:
630
+ it.Event = new(WrappersDataRootTupleRootEvent)
631
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
632
+ it.fail = err
633
+ return false
634
+ }
635
+ it.Event.Raw = log
636
+ return true
637
+
638
+ default:
639
+ return false
640
+ }
641
+ }
642
+ // Iterator still in progress, wait for either a data or an error event
643
+ select {
644
+ case log := <-it.logs:
645
+ it.Event = new(WrappersDataRootTupleRootEvent)
646
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
647
+ it.fail = err
648
+ return false
649
+ }
650
+ it.Event.Raw = log
651
+ return true
652
+
653
+ case err := <-it.sub.Err():
654
+ it.done = true
655
+ it.fail = err
656
+ return it.Next()
657
+ }
658
+ }
659
+
660
+ // Error returns any retrieval or parsing error occurred during filtering.
661
+ func (it *WrappersDataRootTupleRootEventIterator) Error() error {
662
+ return it.fail
663
+ }
664
+
665
+ // Close terminates the iteration process, releasing any pending underlying
666
+ // resources.
667
+ func (it *WrappersDataRootTupleRootEventIterator) Close() error {
668
+ it.sub.Unsubscribe()
669
+ return nil
670
+ }
671
+
672
+ // WrappersDataRootTupleRootEvent represents a DataRootTupleRootEvent event raised by the Wrappers contract.
673
+ type WrappersDataRootTupleRootEvent struct {
674
+ Nonce *big.Int
675
+ DataRootTupleRoot [32]byte
676
+ Raw types.Log // Blockchain specific contextual infos
677
+ }
678
+
679
+ // FilterDataRootTupleRootEvent is a free log retrieval operation binding the contract event 0x6614d037bde4905e31ca5ff05de61964c267f28b0320ed49e59f7d99752e1c4f.
680
+ //
681
+ // Solidity: event DataRootTupleRootEvent(uint256 indexed nonce, bytes32 dataRootTupleRoot)
682
+ func (_Wrappers *WrappersFilterer) FilterDataRootTupleRootEvent(opts *bind.FilterOpts, nonce []*big.Int) (*WrappersDataRootTupleRootEventIterator, error) {
683
+
684
+ var nonceRule []interface{}
685
+ for _, nonceItem := range nonce {
686
+ nonceRule = append(nonceRule, nonceItem)
687
+ }
688
+
689
+ logs, sub, err := _Wrappers.contract.FilterLogs(opts, "DataRootTupleRootEvent", nonceRule)
690
+ if err != nil {
691
+ return nil, err
692
+ }
693
+ return &WrappersDataRootTupleRootEventIterator{contract: _Wrappers.contract, event: "DataRootTupleRootEvent", logs: logs, sub: sub}, nil
694
+ }
695
+
696
+ // WatchDataRootTupleRootEvent is a free log subscription operation binding the contract event 0x6614d037bde4905e31ca5ff05de61964c267f28b0320ed49e59f7d99752e1c4f.
697
+ //
698
+ // Solidity: event DataRootTupleRootEvent(uint256 indexed nonce, bytes32 dataRootTupleRoot)
699
+ func (_Wrappers *WrappersFilterer) WatchDataRootTupleRootEvent(opts *bind.WatchOpts, sink chan<- *WrappersDataRootTupleRootEvent, nonce []*big.Int) (event.Subscription, error) {
700
+
701
+ var nonceRule []interface{}
702
+ for _, nonceItem := range nonce {
703
+ nonceRule = append(nonceRule, nonceItem)
704
+ }
705
+
706
+ logs, sub, err := _Wrappers.contract.WatchLogs(opts, "DataRootTupleRootEvent", nonceRule)
707
+ if err != nil {
708
+ return nil, err
709
+ }
710
+ return event.NewSubscription(func(quit <-chan struct{}) error {
711
+ defer sub.Unsubscribe()
712
+ for {
713
+ select {
714
+ case log := <-logs:
715
+ // New log arrived, parse the event and forward to the user
716
+ event := new(WrappersDataRootTupleRootEvent)
717
+ if err := _Wrappers.contract.UnpackLog(event, "DataRootTupleRootEvent", log); err != nil {
718
+ return err
719
+ }
720
+ event.Raw = log
721
+
722
+ select {
723
+ case sink <- event:
724
+ case err := <-sub.Err():
725
+ return err
726
+ case <-quit:
727
+ return nil
728
+ }
729
+ case err := <-sub.Err():
730
+ return err
731
+ case <-quit:
732
+ return nil
733
+ }
734
+ }
735
+ }), nil
736
+ }
737
+
738
+ // ParseDataRootTupleRootEvent is a log parse operation binding the contract event 0x6614d037bde4905e31ca5ff05de61964c267f28b0320ed49e59f7d99752e1c4f.
739
+ //
740
+ // Solidity: event DataRootTupleRootEvent(uint256 indexed nonce, bytes32 dataRootTupleRoot)
741
+ func (_Wrappers *WrappersFilterer) ParseDataRootTupleRootEvent(log types.Log) (*WrappersDataRootTupleRootEvent, error) {
742
+ event := new(WrappersDataRootTupleRootEvent)
743
+ if err := _Wrappers.contract.UnpackLog(event, "DataRootTupleRootEvent", log); err != nil {
744
+ return nil, err
745
+ }
746
+ event.Raw = log
747
+ return event, nil
748
+ }
749
+
750
+ // WrappersInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the Wrappers contract.
751
+ type WrappersInitializedIterator struct {
752
+ Event *WrappersInitialized // Event containing the contract specifics and raw log
753
+
754
+ contract *bind.BoundContract // Generic contract to use for unpacking event data
755
+ event string // Event name to use for unpacking event data
756
+
757
+ logs chan types.Log // Log channel receiving the found contract events
758
+ sub ethereum.Subscription // Subscription for errors, completion and termination
759
+ done bool // Whether the subscription completed delivering logs
760
+ fail error // Occurred error to stop iteration
761
+ }
762
+
763
+ // Next advances the iterator to the subsequent event, returning whether there
764
+ // are any more events found. In case of a retrieval or parsing error, false is
765
+ // returned and Error() can be queried for the exact failure.
766
+ func (it *WrappersInitializedIterator) Next() bool {
767
+ // If the iterator failed, stop iterating
768
+ if it.fail != nil {
769
+ return false
770
+ }
771
+ // If the iterator completed, deliver directly whatever's available
772
+ if it.done {
773
+ select {
774
+ case log := <-it.logs:
775
+ it.Event = new(WrappersInitialized)
776
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
777
+ it.fail = err
778
+ return false
779
+ }
780
+ it.Event.Raw = log
781
+ return true
782
+
783
+ default:
784
+ return false
785
+ }
786
+ }
787
+ // Iterator still in progress, wait for either a data or an error event
788
+ select {
789
+ case log := <-it.logs:
790
+ it.Event = new(WrappersInitialized)
791
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
792
+ it.fail = err
793
+ return false
794
+ }
795
+ it.Event.Raw = log
796
+ return true
797
+
798
+ case err := <-it.sub.Err():
799
+ it.done = true
800
+ it.fail = err
801
+ return it.Next()
802
+ }
803
+ }
804
+
805
+ // Error returns any retrieval or parsing error occurred during filtering.
806
+ func (it *WrappersInitializedIterator) Error() error {
807
+ return it.fail
808
+ }
809
+
810
+ // Close terminates the iteration process, releasing any pending underlying
811
+ // resources.
812
+ func (it *WrappersInitializedIterator) Close() error {
813
+ it.sub.Unsubscribe()
814
+ return nil
815
+ }
816
+
817
+ // WrappersInitialized represents a Initialized event raised by the Wrappers contract.
818
+ type WrappersInitialized struct {
819
+ Version uint64
820
+ Raw types.Log // Blockchain specific contextual infos
821
+ }
822
+
823
+ // FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2.
824
+ //
825
+ // Solidity: event Initialized(uint64 version)
826
+ func (_Wrappers *WrappersFilterer) FilterInitialized(opts *bind.FilterOpts) (*WrappersInitializedIterator, error) {
827
+
828
+ logs, sub, err := _Wrappers.contract.FilterLogs(opts, "Initialized")
829
+ if err != nil {
830
+ return nil, err
831
+ }
832
+ return &WrappersInitializedIterator{contract: _Wrappers.contract, event: "Initialized", logs: logs, sub: sub}, nil
833
+ }
834
+
835
+ // WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2.
836
+ //
837
+ // Solidity: event Initialized(uint64 version)
838
+ func (_Wrappers *WrappersFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *WrappersInitialized) (event.Subscription, error) {
839
+
840
+ logs, sub, err := _Wrappers.contract.WatchLogs(opts, "Initialized")
841
+ if err != nil {
842
+ return nil, err
843
+ }
844
+ return event.NewSubscription(func(quit <-chan struct{}) error {
845
+ defer sub.Unsubscribe()
846
+ for {
847
+ select {
848
+ case log := <-logs:
849
+ // New log arrived, parse the event and forward to the user
850
+ event := new(WrappersInitialized)
851
+ if err := _Wrappers.contract.UnpackLog(event, "Initialized", log); err != nil {
852
+ return err
853
+ }
854
+ event.Raw = log
855
+
856
+ select {
857
+ case sink <- event:
858
+ case err := <-sub.Err():
859
+ return err
860
+ case <-quit:
861
+ return nil
862
+ }
863
+ case err := <-sub.Err():
864
+ return err
865
+ case <-quit:
866
+ return nil
867
+ }
868
+ }
869
+ }), nil
870
+ }
871
+
872
+ // ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2.
873
+ //
874
+ // Solidity: event Initialized(uint64 version)
875
+ func (_Wrappers *WrappersFilterer) ParseInitialized(log types.Log) (*WrappersInitialized, error) {
876
+ event := new(WrappersInitialized)
877
+ if err := _Wrappers.contract.UnpackLog(event, "Initialized", log); err != nil {
878
+ return nil, err
879
+ }
880
+ event.Raw = log
881
+ return event, nil
882
+ }
883
+
884
+ // WrappersOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the Wrappers contract.
885
+ type WrappersOwnershipTransferredIterator struct {
886
+ Event *WrappersOwnershipTransferred // Event containing the contract specifics and raw log
887
+
888
+ contract *bind.BoundContract // Generic contract to use for unpacking event data
889
+ event string // Event name to use for unpacking event data
890
+
891
+ logs chan types.Log // Log channel receiving the found contract events
892
+ sub ethereum.Subscription // Subscription for errors, completion and termination
893
+ done bool // Whether the subscription completed delivering logs
894
+ fail error // Occurred error to stop iteration
895
+ }
896
+
897
+ // Next advances the iterator to the subsequent event, returning whether there
898
+ // are any more events found. In case of a retrieval or parsing error, false is
899
+ // returned and Error() can be queried for the exact failure.
900
+ func (it *WrappersOwnershipTransferredIterator) Next() bool {
901
+ // If the iterator failed, stop iterating
902
+ if it.fail != nil {
903
+ return false
904
+ }
905
+ // If the iterator completed, deliver directly whatever's available
906
+ if it.done {
907
+ select {
908
+ case log := <-it.logs:
909
+ it.Event = new(WrappersOwnershipTransferred)
910
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
911
+ it.fail = err
912
+ return false
913
+ }
914
+ it.Event.Raw = log
915
+ return true
916
+
917
+ default:
918
+ return false
919
+ }
920
+ }
921
+ // Iterator still in progress, wait for either a data or an error event
922
+ select {
923
+ case log := <-it.logs:
924
+ it.Event = new(WrappersOwnershipTransferred)
925
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
926
+ it.fail = err
927
+ return false
928
+ }
929
+ it.Event.Raw = log
930
+ return true
931
+
932
+ case err := <-it.sub.Err():
933
+ it.done = true
934
+ it.fail = err
935
+ return it.Next()
936
+ }
937
+ }
938
+
939
+ // Error returns any retrieval or parsing error occurred during filtering.
940
+ func (it *WrappersOwnershipTransferredIterator) Error() error {
941
+ return it.fail
942
+ }
943
+
944
+ // Close terminates the iteration process, releasing any pending underlying
945
+ // resources.
946
+ func (it *WrappersOwnershipTransferredIterator) Close() error {
947
+ it.sub.Unsubscribe()
948
+ return nil
949
+ }
950
+
951
+ // WrappersOwnershipTransferred represents a OwnershipTransferred event raised by the Wrappers contract.
952
+ type WrappersOwnershipTransferred struct {
953
+ PreviousOwner common.Address
954
+ NewOwner common.Address
955
+ Raw types.Log // Blockchain specific contextual infos
956
+ }
957
+
958
+ // FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
959
+ //
960
+ // Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
961
+ func (_Wrappers *WrappersFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*WrappersOwnershipTransferredIterator, error) {
962
+
963
+ var previousOwnerRule []interface{}
964
+ for _, previousOwnerItem := range previousOwner {
965
+ previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
966
+ }
967
+ var newOwnerRule []interface{}
968
+ for _, newOwnerItem := range newOwner {
969
+ newOwnerRule = append(newOwnerRule, newOwnerItem)
970
+ }
971
+
972
+ logs, sub, err := _Wrappers.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule)
973
+ if err != nil {
974
+ return nil, err
975
+ }
976
+ return &WrappersOwnershipTransferredIterator{contract: _Wrappers.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
977
+ }
978
+
979
+ // WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
980
+ //
981
+ // Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
982
+ func (_Wrappers *WrappersFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *WrappersOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) {
983
+
984
+ var previousOwnerRule []interface{}
985
+ for _, previousOwnerItem := range previousOwner {
986
+ previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
987
+ }
988
+ var newOwnerRule []interface{}
989
+ for _, newOwnerItem := range newOwner {
990
+ newOwnerRule = append(newOwnerRule, newOwnerItem)
991
+ }
992
+
993
+ logs, sub, err := _Wrappers.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule)
994
+ if err != nil {
995
+ return nil, err
996
+ }
997
+ return event.NewSubscription(func(quit <-chan struct{}) error {
998
+ defer sub.Unsubscribe()
999
+ for {
1000
+ select {
1001
+ case log := <-logs:
1002
+ // New log arrived, parse the event and forward to the user
1003
+ event := new(WrappersOwnershipTransferred)
1004
+ if err := _Wrappers.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
1005
+ return err
1006
+ }
1007
+ event.Raw = log
1008
+
1009
+ select {
1010
+ case sink <- event:
1011
+ case err := <-sub.Err():
1012
+ return err
1013
+ case <-quit:
1014
+ return nil
1015
+ }
1016
+ case err := <-sub.Err():
1017
+ return err
1018
+ case <-quit:
1019
+ return nil
1020
+ }
1021
+ }
1022
+ }), nil
1023
+ }
1024
+
1025
+ // ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
1026
+ //
1027
+ // Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
1028
+ func (_Wrappers *WrappersFilterer) ParseOwnershipTransferred(log types.Log) (*WrappersOwnershipTransferred, error) {
1029
+ event := new(WrappersOwnershipTransferred)
1030
+ if err := _Wrappers.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
1031
+ return nil, err
1032
+ }
1033
+ event.Raw = log
1034
+ return event, nil
1035
+ }
1036
+
1037
+ // WrappersUpgradedIterator is returned from FilterUpgraded and is used to iterate over the raw logs and unpacked data for Upgraded events raised by the Wrappers contract.
1038
+ type WrappersUpgradedIterator struct {
1039
+ Event *WrappersUpgraded // Event containing the contract specifics and raw log
1040
+
1041
+ contract *bind.BoundContract // Generic contract to use for unpacking event data
1042
+ event string // Event name to use for unpacking event data
1043
+
1044
+ logs chan types.Log // Log channel receiving the found contract events
1045
+ sub ethereum.Subscription // Subscription for errors, completion and termination
1046
+ done bool // Whether the subscription completed delivering logs
1047
+ fail error // Occurred error to stop iteration
1048
+ }
1049
+
1050
+ // Next advances the iterator to the subsequent event, returning whether there
1051
+ // are any more events found. In case of a retrieval or parsing error, false is
1052
+ // returned and Error() can be queried for the exact failure.
1053
+ func (it *WrappersUpgradedIterator) Next() bool {
1054
+ // If the iterator failed, stop iterating
1055
+ if it.fail != nil {
1056
+ return false
1057
+ }
1058
+ // If the iterator completed, deliver directly whatever's available
1059
+ if it.done {
1060
+ select {
1061
+ case log := <-it.logs:
1062
+ it.Event = new(WrappersUpgraded)
1063
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
1064
+ it.fail = err
1065
+ return false
1066
+ }
1067
+ it.Event.Raw = log
1068
+ return true
1069
+
1070
+ default:
1071
+ return false
1072
+ }
1073
+ }
1074
+ // Iterator still in progress, wait for either a data or an error event
1075
+ select {
1076
+ case log := <-it.logs:
1077
+ it.Event = new(WrappersUpgraded)
1078
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
1079
+ it.fail = err
1080
+ return false
1081
+ }
1082
+ it.Event.Raw = log
1083
+ return true
1084
+
1085
+ case err := <-it.sub.Err():
1086
+ it.done = true
1087
+ it.fail = err
1088
+ return it.Next()
1089
+ }
1090
+ }
1091
+
1092
+ // Error returns any retrieval or parsing error occurred during filtering.
1093
+ func (it *WrappersUpgradedIterator) Error() error {
1094
+ return it.fail
1095
+ }
1096
+
1097
+ // Close terminates the iteration process, releasing any pending underlying
1098
+ // resources.
1099
+ func (it *WrappersUpgradedIterator) Close() error {
1100
+ it.sub.Unsubscribe()
1101
+ return nil
1102
+ }
1103
+
1104
+ // WrappersUpgraded represents a Upgraded event raised by the Wrappers contract.
1105
+ type WrappersUpgraded struct {
1106
+ Implementation common.Address
1107
+ Raw types.Log // Blockchain specific contextual infos
1108
+ }
1109
+
1110
+ // FilterUpgraded is a free log retrieval operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b.
1111
+ //
1112
+ // Solidity: event Upgraded(address indexed implementation)
1113
+ func (_Wrappers *WrappersFilterer) FilterUpgraded(opts *bind.FilterOpts, implementation []common.Address) (*WrappersUpgradedIterator, error) {
1114
+
1115
+ var implementationRule []interface{}
1116
+ for _, implementationItem := range implementation {
1117
+ implementationRule = append(implementationRule, implementationItem)
1118
+ }
1119
+
1120
+ logs, sub, err := _Wrappers.contract.FilterLogs(opts, "Upgraded", implementationRule)
1121
+ if err != nil {
1122
+ return nil, err
1123
+ }
1124
+ return &WrappersUpgradedIterator{contract: _Wrappers.contract, event: "Upgraded", logs: logs, sub: sub}, nil
1125
+ }
1126
+
1127
+ // WatchUpgraded is a free log subscription operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b.
1128
+ //
1129
+ // Solidity: event Upgraded(address indexed implementation)
1130
+ func (_Wrappers *WrappersFilterer) WatchUpgraded(opts *bind.WatchOpts, sink chan<- *WrappersUpgraded, implementation []common.Address) (event.Subscription, error) {
1131
+
1132
+ var implementationRule []interface{}
1133
+ for _, implementationItem := range implementation {
1134
+ implementationRule = append(implementationRule, implementationItem)
1135
+ }
1136
+
1137
+ logs, sub, err := _Wrappers.contract.WatchLogs(opts, "Upgraded", implementationRule)
1138
+ if err != nil {
1139
+ return nil, err
1140
+ }
1141
+ return event.NewSubscription(func(quit <-chan struct{}) error {
1142
+ defer sub.Unsubscribe()
1143
+ for {
1144
+ select {
1145
+ case log := <-logs:
1146
+ // New log arrived, parse the event and forward to the user
1147
+ event := new(WrappersUpgraded)
1148
+ if err := _Wrappers.contract.UnpackLog(event, "Upgraded", log); err != nil {
1149
+ return err
1150
+ }
1151
+ event.Raw = log
1152
+
1153
+ select {
1154
+ case sink <- event:
1155
+ case err := <-sub.Err():
1156
+ return err
1157
+ case <-quit:
1158
+ return nil
1159
+ }
1160
+ case err := <-sub.Err():
1161
+ return err
1162
+ case <-quit:
1163
+ return nil
1164
+ }
1165
+ }
1166
+ }), nil
1167
+ }
1168
+
1169
+ // ParseUpgraded is a log parse operation binding the contract event 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b.
1170
+ //
1171
+ // Solidity: event Upgraded(address indexed implementation)
1172
+ func (_Wrappers *WrappersFilterer) ParseUpgraded(log types.Log) (*WrappersUpgraded, error) {
1173
+ event := new(WrappersUpgraded)
1174
+ if err := _Wrappers.contract.UnpackLog(event, "Upgraded", log); err != nil {
1175
+ return nil, err
1176
+ }
1177
+ event.Raw = log
1178
+ return event, nil
1179
+ }
1180
+
1181
+ // WrappersValidatorSetUpdatedEventIterator is returned from FilterValidatorSetUpdatedEvent and is used to iterate over the raw logs and unpacked data for ValidatorSetUpdatedEvent events raised by the Wrappers contract.
1182
+ type WrappersValidatorSetUpdatedEventIterator struct {
1183
+ Event *WrappersValidatorSetUpdatedEvent // Event containing the contract specifics and raw log
1184
+
1185
+ contract *bind.BoundContract // Generic contract to use for unpacking event data
1186
+ event string // Event name to use for unpacking event data
1187
+
1188
+ logs chan types.Log // Log channel receiving the found contract events
1189
+ sub ethereum.Subscription // Subscription for errors, completion and termination
1190
+ done bool // Whether the subscription completed delivering logs
1191
+ fail error // Occurred error to stop iteration
1192
+ }
1193
+
1194
+ // Next advances the iterator to the subsequent event, returning whether there
1195
+ // are any more events found. In case of a retrieval or parsing error, false is
1196
+ // returned and Error() can be queried for the exact failure.
1197
+ func (it *WrappersValidatorSetUpdatedEventIterator) Next() bool {
1198
+ // If the iterator failed, stop iterating
1199
+ if it.fail != nil {
1200
+ return false
1201
+ }
1202
+ // If the iterator completed, deliver directly whatever's available
1203
+ if it.done {
1204
+ select {
1205
+ case log := <-it.logs:
1206
+ it.Event = new(WrappersValidatorSetUpdatedEvent)
1207
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
1208
+ it.fail = err
1209
+ return false
1210
+ }
1211
+ it.Event.Raw = log
1212
+ return true
1213
+
1214
+ default:
1215
+ return false
1216
+ }
1217
+ }
1218
+ // Iterator still in progress, wait for either a data or an error event
1219
+ select {
1220
+ case log := <-it.logs:
1221
+ it.Event = new(WrappersValidatorSetUpdatedEvent)
1222
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
1223
+ it.fail = err
1224
+ return false
1225
+ }
1226
+ it.Event.Raw = log
1227
+ return true
1228
+
1229
+ case err := <-it.sub.Err():
1230
+ it.done = true
1231
+ it.fail = err
1232
+ return it.Next()
1233
+ }
1234
+ }
1235
+
1236
+ // Error returns any retrieval or parsing error occurred during filtering.
1237
+ func (it *WrappersValidatorSetUpdatedEventIterator) Error() error {
1238
+ return it.fail
1239
+ }
1240
+
1241
+ // Close terminates the iteration process, releasing any pending underlying
1242
+ // resources.
1243
+ func (it *WrappersValidatorSetUpdatedEventIterator) Close() error {
1244
+ it.sub.Unsubscribe()
1245
+ return nil
1246
+ }
1247
+
1248
+ // WrappersValidatorSetUpdatedEvent represents a ValidatorSetUpdatedEvent event raised by the Wrappers contract.
1249
+ type WrappersValidatorSetUpdatedEvent struct {
1250
+ Nonce *big.Int
1251
+ PowerThreshold *big.Int
1252
+ ValidatorSetHash [32]byte
1253
+ Raw types.Log // Blockchain specific contextual infos
1254
+ }
1255
+
1256
+ // FilterValidatorSetUpdatedEvent is a free log retrieval operation binding the contract event 0xe55fb3cbbfe29b13c7f8a35ef23127e7df9ab88df16bac166ad254a20f02414c.
1257
+ //
1258
+ // Solidity: event ValidatorSetUpdatedEvent(uint256 indexed nonce, uint256 powerThreshold, bytes32 validatorSetHash)
1259
+ func (_Wrappers *WrappersFilterer) FilterValidatorSetUpdatedEvent(opts *bind.FilterOpts, nonce []*big.Int) (*WrappersValidatorSetUpdatedEventIterator, error) {
1260
+
1261
+ var nonceRule []interface{}
1262
+ for _, nonceItem := range nonce {
1263
+ nonceRule = append(nonceRule, nonceItem)
1264
+ }
1265
+
1266
+ logs, sub, err := _Wrappers.contract.FilterLogs(opts, "ValidatorSetUpdatedEvent", nonceRule)
1267
+ if err != nil {
1268
+ return nil, err
1269
+ }
1270
+ return &WrappersValidatorSetUpdatedEventIterator{contract: _Wrappers.contract, event: "ValidatorSetUpdatedEvent", logs: logs, sub: sub}, nil
1271
+ }
1272
+
1273
+ // WatchValidatorSetUpdatedEvent is a free log subscription operation binding the contract event 0xe55fb3cbbfe29b13c7f8a35ef23127e7df9ab88df16bac166ad254a20f02414c.
1274
+ //
1275
+ // Solidity: event ValidatorSetUpdatedEvent(uint256 indexed nonce, uint256 powerThreshold, bytes32 validatorSetHash)
1276
+ func (_Wrappers *WrappersFilterer) WatchValidatorSetUpdatedEvent(opts *bind.WatchOpts, sink chan<- *WrappersValidatorSetUpdatedEvent, nonce []*big.Int) (event.Subscription, error) {
1277
+
1278
+ var nonceRule []interface{}
1279
+ for _, nonceItem := range nonce {
1280
+ nonceRule = append(nonceRule, nonceItem)
1281
+ }
1282
+
1283
+ logs, sub, err := _Wrappers.contract.WatchLogs(opts, "ValidatorSetUpdatedEvent", nonceRule)
1284
+ if err != nil {
1285
+ return nil, err
1286
+ }
1287
+ return event.NewSubscription(func(quit <-chan struct{}) error {
1288
+ defer sub.Unsubscribe()
1289
+ for {
1290
+ select {
1291
+ case log := <-logs:
1292
+ // New log arrived, parse the event and forward to the user
1293
+ event := new(WrappersValidatorSetUpdatedEvent)
1294
+ if err := _Wrappers.contract.UnpackLog(event, "ValidatorSetUpdatedEvent", log); err != nil {
1295
+ return err
1296
+ }
1297
+ event.Raw = log
1298
+
1299
+ select {
1300
+ case sink <- event:
1301
+ case err := <-sub.Err():
1302
+ return err
1303
+ case <-quit:
1304
+ return nil
1305
+ }
1306
+ case err := <-sub.Err():
1307
+ return err
1308
+ case <-quit:
1309
+ return nil
1310
+ }
1311
+ }
1312
+ }), nil
1313
+ }
1314
+
1315
+ // ParseValidatorSetUpdatedEvent is a log parse operation binding the contract event 0xe55fb3cbbfe29b13c7f8a35ef23127e7df9ab88df16bac166ad254a20f02414c.
1316
+ //
1317
+ // Solidity: event ValidatorSetUpdatedEvent(uint256 indexed nonce, uint256 powerThreshold, bytes32 validatorSetHash)
1318
+ func (_Wrappers *WrappersFilterer) ParseValidatorSetUpdatedEvent(log types.Log) (*WrappersValidatorSetUpdatedEvent, error) {
1319
+ event := new(WrappersValidatorSetUpdatedEvent)
1320
+ if err := _Wrappers.contract.UnpackLog(event, "ValidatorSetUpdatedEvent", log); err != nil {
1321
+ return nil, err
1322
+ }
1323
+ event.Raw = log
1324
+ return event, nil
1325
+ }