diff --git a/Dockerfile b/Dockerfile index 9b70e9e8a0..32c91fc55a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,33 +1,21 @@ -# Support setting various labels on the final image -ARG COMMIT="" -ARG VERSION="" -ARG BUILDNUM="" +FROM golang:1.23-alpine AS builder -# Build Geth in a stock Go builder container -FROM golang:1.24-alpine AS builder - -RUN apk add --no-cache gcc musl-dev linux-headers git - -# Get dependencies - will also be cached if we won't change go.mod/go.sum -COPY go.mod /go-ethereum/ -COPY go.sum /go-ethereum/ -RUN cd /go-ethereum && go mod download +RUN apk add --no-cache make gcc musl-dev linux-headers git ADD . /go-ethereum -RUN cd /go-ethereum && go run build/ci.go install -static ./cmd/geth +RUN cd /go-ethereum && make XDC -# Pull Geth into a second stage deploy alpine container FROM alpine:latest -RUN apk add --no-cache ca-certificates -COPY --from=builder /go-ethereum/build/bin/geth /usr/local/bin/ +WORKDIR /xdc -EXPOSE 8545 8546 30303 30303/udp -ENTRYPOINT ["geth"] +COPY --from=builder /go-ethereum/build/bin/XDC /usr/local/bin/XDC -# Add some metadata labels to help programmatic image consumption -ARG COMMIT="" -ARG VERSION="" -ARG BUILDNUM="" +RUN chmod +x /usr/local/bin/XDC -LABEL commit="$COMMIT" version="$VERSION" buildnum="$BUILDNUM" +EXPOSE 8545 +EXPOSE 30303 + +ENTRYPOINT ["/usr/local/bin/XDC"] + +CMD ["--help"] diff --git a/Dockerfile.bootnode b/Dockerfile.bootnode new file mode 100644 index 0000000000..e745bc45a2 --- /dev/null +++ b/Dockerfile.bootnode @@ -0,0 +1,24 @@ +FROM golang:1.23-alpine AS builder + +RUN apk add --no-cache make gcc musl-dev linux-headers + +ADD . /go-ethereum +RUN cd /go-ethereum && make bootnode + +RUN chmod +x /go-ethereum/build/bin/bootnode + +FROM alpine:latest + +LABEL maintainer="xdc@xinfin.org" + +WORKDIR /xdc + +COPY --from=builder /go-ethereum/build/bin/bootnode /usr/local/bin/bootnode + +COPY docker/bootnode ./ + +EXPOSE 30301 + +ENTRYPOINT ["./entrypoint.sh"] + +CMD ["-verbosity", "6", "-nodekey", "bootnode.key", "--addr", ":30301"] diff --git a/Dockerfile.node b/Dockerfile.node new file mode 100644 index 0000000000..d2e0b48dab --- /dev/null +++ b/Dockerfile.node @@ -0,0 +1,37 @@ +FROM golang:1.23-alpine AS builder + +RUN apk add --no-cache make gcc musl-dev linux-headers git + +ADD . /go-ethereum + +RUN cd /go-ethereum \ + && make XDC \ + && chmod +x /go-ethereum/build/bin/XDC + +FROM alpine:latest + +WORKDIR /xdc + +COPY --from=builder /go-ethereum/build/bin/XDC /usr/local/bin/XDC + +ENV IDENTITY '' +ENV PASSWORD '' +ENV PRIVATE_KEY '' +ENV BOOTNODES '' +ENV EXTIP '' +ENV VERBOSITY 3 +ENV SYNC_MODE 'full' +ENV NETWORK_ID '50' +ENV WS_SECRET '' +ENV NETSTATS_HOST 'netstats-server' +ENV NETSTATS_PORT '3000' +ENV ANNOUNCE_TXS '' + +RUN apk add --no-cache ca-certificates + +COPY docker/XDPoSChain ./ +COPY genesis/ ./ + +EXPOSE 8545 8546 30303 30303/udp + +ENTRYPOINT ["./entrypoint.sh"] diff --git a/common/constants.go b/common/constants.go new file mode 100644 index 0000000000..2d08922d32 --- /dev/null +++ b/common/constants.go @@ -0,0 +1,23 @@ +// Notice: this file only saves const variables for all network. +// Please run the following commands after modify this file: +// cp common/constants.go common/constants/constants.go.testnet +// cp common/constants.go common/constants/constants.go.devnet +// cp common/constants.go common/constants/constants.go.local + +package common + +// const variables for all network (not redeclared in types.go) +const ( + MaxMasternodes = 18 + LimitPenaltyEpoch = 4 + LimitPenaltyEpochV2 = 0 + LimitThresholdNonceInQueue = 10 + DefaultMinGasPrice = 250000000 + RangeReturnSigner = 150 + MinimunMinerBlockPerEpoch = 1 + BlocksPerYearTest = uint64(200000) + BlocksPerYear = uint64(15768000) + OneYear = uint64(365 * 86400) + LiquidateLendingTradeBlock = uint64(100) + LimitTimeFinality = uint64(30) // limit in 30 block +) diff --git a/common/sort/slice.go b/common/sort/slice.go new file mode 100644 index 0000000000..a158c93a66 --- /dev/null +++ b/common/sort/slice.go @@ -0,0 +1,190 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sort + +import "reflect" + +// any is an alias for interface{} and is equivalent to interface{} in all ways. +type any = interface{} + +// lessSwap is a pair of Less and Swap function for use with the +// auto-generated func-optimized variant of sort.go in +// zfuncversion.go. +type lessSwap struct { + Less func(i, j int) bool + Swap func(i, j int) +} + +// Slice sorts the slice x given the provided less function. +// It panics if x is not a slice. +// +// The sort is not guaranteed to be stable: equal elements +// may be reversed from their original order. +// For a stable sort, use SliceStable. +// +// The less function must satisfy the same requirements as +// the Interface type's Less method. +func Slice(x any, less func(i, j int) bool) { + rv := reflect.ValueOf(x) + swap := reflect.Swapper(x) + length := rv.Len() + quickSort_func(lessSwap{less, swap}, 0, length, maxDepth(length)) +} + +// maxDepth returns a threshold at which quicksort should switch +// to heapsort. It returns 2*ceil(lg(n+1)). +func maxDepth(n int) int { + var depth int + for i := n; i > 0; i >>= 1 { + depth++ + } + return depth * 2 +} + +// Auto-generated variant of sort.go:quickSort +func quickSort_func(data lessSwap, a, b, maxDepth int) { + for b-a > 12 { + if maxDepth == 0 { + heapSort_func(data, a, b) + return + } + maxDepth-- + mlo, mhi := doPivot_func(data, a, b) + if mlo-a < b-mhi { + quickSort_func(data, a, mlo, maxDepth) + a = mhi + } else { + quickSort_func(data, mhi, b, maxDepth) + b = mlo + } + } + if b-a > 1 { + for i := a + 6; i < b; i++ { + if data.Less(i, i-6) { + data.Swap(i, i-6) + } + } + insertionSort_func(data, a, b) + } +} + +// Auto-generated variant of sort.go:heapSort +func heapSort_func(data lessSwap, a, b int) { + first := a + lo := 0 + hi := b - a + for i := (hi - 1) / 2; i >= 0; i-- { + siftDown_func(data, i, hi, first) + } + for i := hi - 1; i >= 0; i-- { + data.Swap(first, first+i) + siftDown_func(data, lo, i, first) + } +} + +// Auto-generated variant of sort.go:doPivot +func doPivot_func(data lessSwap, lo, hi int) (midlo, midhi int) { + m := int(uint(lo+hi) >> 1) + if hi-lo > 40 { + s := (hi - lo) / 8 + medianOfThree_func(data, lo, lo+s, lo+2*s) + medianOfThree_func(data, m, m-s, m+s) + medianOfThree_func(data, hi-1, hi-1-s, hi-1-2*s) + } + medianOfThree_func(data, lo, m, hi-1) + pivot := lo + a, c := lo+1, hi-1 + for ; a < c && data.Less(a, pivot); a++ { + } + b := a + for { + for ; b < c && !data.Less(pivot, b); b++ { + } + for ; b < c && data.Less(pivot, c-1); c-- { + } + if b >= c { + break + } + data.Swap(b, c-1) + b++ + c-- + } + protect := hi-c < 5 + if !protect && hi-c < (hi-lo)/4 { + dups := 0 + if !data.Less(pivot, hi-1) { + data.Swap(c, hi-1) + c++ + dups++ + } + if !data.Less(b-1, pivot) { + b-- + dups++ + } + if !data.Less(m, pivot) { + data.Swap(m, b-1) + b-- + dups++ + } + protect = dups > 1 + } + if protect { + for { + for ; a < b && !data.Less(b-1, pivot); b-- { + } + for ; a < b && data.Less(a, pivot); a++ { + } + if a >= b { + break + } + data.Swap(a, b-1) + a++ + b-- + } + } + data.Swap(pivot, b-1) + return b - 1, c +} + +// Auto-generated variant of sort.go:insertionSort +func insertionSort_func(data lessSwap, a, b int) { + for i := a + 1; i < b; i++ { + for j := i; j > a && data.Less(j, j-1); j-- { + data.Swap(j, j-1) + } + } +} + +// Auto-generated variant of sort.go:siftDown +func siftDown_func(data lessSwap, lo, hi, first int) { + root := lo + for { + child := 2*root + 1 + if child >= hi { + break + } + if child+1 < hi && data.Less(first+child, first+child+1) { + child++ + } + if !data.Less(first+root, first+child) { + return + } + data.Swap(first+root, first+child) + root = child + } +} + +// Auto-generated variant of sort.go:medianOfThree +func medianOfThree_func(data lessSwap, m1, m0, m2 int) { + if data.Less(m1, m0) { + data.Swap(m1, m0) + } + if data.Less(m2, m1) { + data.Swap(m2, m1) + if data.Less(m1, m0) { + data.Swap(m1, m0) + } + } +} diff --git a/contracts/XDCx/XDCxListing.go b/contracts/XDCx/XDCxListing.go new file mode 100644 index 0000000000..dd93903e99 --- /dev/null +++ b/contracts/XDCx/XDCxListing.go @@ -0,0 +1,40 @@ +package XDCx + +import ( + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/XDCx/contract" +) + +type XDCXListing struct { + *contract.XDCXListingSession + contractBackend bind.ContractBackend +} + +func NewMyXDCXListing(transactOpts *bind.TransactOpts, contractAddr common.Address, contractBackend bind.ContractBackend) (*XDCXListing, error) { + smartContract, err := contract.NewXDCXListing(contractAddr, contractBackend) + if err != nil { + return nil, err + } + + return &XDCXListing{ + &contract.XDCXListingSession{ + Contract: smartContract, + TransactOpts: *transactOpts, + }, + contractBackend, + }, nil +} + +func DeployXDCXListing(transactOpts *bind.TransactOpts, contractBackend bind.ContractBackend) (common.Address, *XDCXListing, error) { + contractAddr, _, _, err := contract.DeployXDCXListing(transactOpts, contractBackend) + if err != nil { + return contractAddr, nil, err + } + smartContract, err := NewMyXDCXListing(transactOpts, contractAddr, contractBackend) + if err != nil { + return contractAddr, nil, err + } + + return contractAddr, smartContract, nil +} diff --git a/contracts/XDCx/contract/LendingRegistration.go b/contracts/XDCx/contract/LendingRegistration.go new file mode 100644 index 0000000000..cc58779483 --- /dev/null +++ b/contracts/XDCx/contract/LendingRegistration.go @@ -0,0 +1,1327 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contract + +import ( + "math/big" + "strings" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" +) + +// LAbstractRegistrationABI is the input ABI used to generate the binding from. +const LAbstractRegistrationABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"RESIGN_REQUESTS\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"getRelayerByCoinbase\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"address[]\"},{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]" + +// LAbstractRegistrationBin is the compiled bytecode used for deploying new contracts. +const LAbstractRegistrationBin = `0x` + +// DeployLAbstractRegistration deploys a new Ethereum contract, binding an instance of LAbstractRegistration to it. +func DeployLAbstractRegistration(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *LAbstractRegistration, error) { + parsed, err := abi.JSON(strings.NewReader(LAbstractRegistrationABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(LAbstractRegistrationBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &LAbstractRegistration{LAbstractRegistrationCaller: LAbstractRegistrationCaller{contract: contract}, LAbstractRegistrationTransactor: LAbstractRegistrationTransactor{contract: contract}, LAbstractRegistrationFilterer: LAbstractRegistrationFilterer{contract: contract}}, nil +} + +// LAbstractRegistration is an auto generated Go binding around an Ethereum contract. +type LAbstractRegistration struct { + LAbstractRegistrationCaller // Read-only binding to the contract + LAbstractRegistrationTransactor // Write-only binding to the contract + LAbstractRegistrationFilterer // Log filterer for contract events +} + +// LAbstractRegistrationCaller is an auto generated read-only Go binding around an Ethereum contract. +type LAbstractRegistrationCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LAbstractRegistrationTransactor is an auto generated write-only Go binding around an Ethereum contract. +type LAbstractRegistrationTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LAbstractRegistrationFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type LAbstractRegistrationFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LAbstractRegistrationSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type LAbstractRegistrationSession struct { + Contract *LAbstractRegistration // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// LAbstractRegistrationCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type LAbstractRegistrationCallerSession struct { + Contract *LAbstractRegistrationCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// LAbstractRegistrationTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type LAbstractRegistrationTransactorSession struct { + Contract *LAbstractRegistrationTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// LAbstractRegistrationRaw is an auto generated low-level Go binding around an Ethereum contract. +type LAbstractRegistrationRaw struct { + Contract *LAbstractRegistration // Generic contract binding to access the raw methods on +} + +// LAbstractRegistrationCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type LAbstractRegistrationCallerRaw struct { + Contract *LAbstractRegistrationCaller // Generic read-only contract binding to access the raw methods on +} + +// LAbstractRegistrationTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type LAbstractRegistrationTransactorRaw struct { + Contract *LAbstractRegistrationTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewLAbstractRegistration creates a new instance of LAbstractRegistration, bound to a specific deployed contract. +func NewLAbstractRegistration(address common.Address, backend bind.ContractBackend) (*LAbstractRegistration, error) { + contract, err := bindLAbstractRegistration(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &LAbstractRegistration{LAbstractRegistrationCaller: LAbstractRegistrationCaller{contract: contract}, LAbstractRegistrationTransactor: LAbstractRegistrationTransactor{contract: contract}, LAbstractRegistrationFilterer: LAbstractRegistrationFilterer{contract: contract}}, nil +} + +// NewLAbstractRegistrationCaller creates a new read-only instance of LAbstractRegistration, bound to a specific deployed contract. +func NewLAbstractRegistrationCaller(address common.Address, caller bind.ContractCaller) (*LAbstractRegistrationCaller, error) { + contract, err := bindLAbstractRegistration(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &LAbstractRegistrationCaller{contract: contract}, nil +} + +// NewLAbstractRegistrationTransactor creates a new write-only instance of LAbstractRegistration, bound to a specific deployed contract. +func NewLAbstractRegistrationTransactor(address common.Address, transactor bind.ContractTransactor) (*LAbstractRegistrationTransactor, error) { + contract, err := bindLAbstractRegistration(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &LAbstractRegistrationTransactor{contract: contract}, nil +} + +// NewLAbstractRegistrationFilterer creates a new log filterer instance of LAbstractRegistration, bound to a specific deployed contract. +func NewLAbstractRegistrationFilterer(address common.Address, filterer bind.ContractFilterer) (*LAbstractRegistrationFilterer, error) { + contract, err := bindLAbstractRegistration(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &LAbstractRegistrationFilterer{contract: contract}, nil +} + +// bindLAbstractRegistration binds a generic wrapper to an already deployed contract. +func bindLAbstractRegistration(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(LAbstractRegistrationABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_LAbstractRegistration *LAbstractRegistrationRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _LAbstractRegistration.Contract.LAbstractRegistrationCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_LAbstractRegistration *LAbstractRegistrationRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _LAbstractRegistration.Contract.LAbstractRegistrationTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_LAbstractRegistration *LAbstractRegistrationRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _LAbstractRegistration.Contract.LAbstractRegistrationTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_LAbstractRegistration *LAbstractRegistrationCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _LAbstractRegistration.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_LAbstractRegistration *LAbstractRegistrationTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _LAbstractRegistration.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_LAbstractRegistration *LAbstractRegistrationTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _LAbstractRegistration.Contract.contract.Transact(opts, method, params...) +} + +// RESIGNREQUESTS is a free data retrieval call binding the contract method 0x500f99f7. +// +// Solidity: function RESIGN_REQUESTS( address) constant returns(uint256) +func (_LAbstractRegistration *LAbstractRegistrationCaller) RESIGNREQUESTS(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _LAbstractRegistration.contract.Call(opts, out, "RESIGN_REQUESTS", arg0) + return *ret0, err +} + +// RESIGNREQUESTS is a free data retrieval call binding the contract method 0x500f99f7. +// +// Solidity: function RESIGN_REQUESTS( address) constant returns(uint256) +func (_LAbstractRegistration *LAbstractRegistrationSession) RESIGNREQUESTS(arg0 common.Address) (*big.Int, error) { + return _LAbstractRegistration.Contract.RESIGNREQUESTS(&_LAbstractRegistration.CallOpts, arg0) +} + +// RESIGNREQUESTS is a free data retrieval call binding the contract method 0x500f99f7. +// +// Solidity: function RESIGN_REQUESTS( address) constant returns(uint256) +func (_LAbstractRegistration *LAbstractRegistrationCallerSession) RESIGNREQUESTS(arg0 common.Address) (*big.Int, error) { + return _LAbstractRegistration.Contract.RESIGNREQUESTS(&_LAbstractRegistration.CallOpts, arg0) +} + +// GetRelayerByCoinbase is a free data retrieval call binding the contract method 0x540105c7. +// +// Solidity: function getRelayerByCoinbase( address) constant returns(uint256, address, uint256, uint16, address[], address[]) +func (_LAbstractRegistration *LAbstractRegistrationCaller) GetRelayerByCoinbase(opts *bind.CallOpts, arg0 common.Address) (*big.Int, common.Address, *big.Int, uint16, []common.Address, []common.Address, error) { + var ( + ret0 = new(*big.Int) + ret1 = new(common.Address) + ret2 = new(*big.Int) + ret3 = new(uint16) + ret4 = new([]common.Address) + ret5 = new([]common.Address) + ) + out := &[]interface{}{ + ret0, + ret1, + ret2, + ret3, + ret4, + ret5, + } + err := _LAbstractRegistration.contract.Call(opts, out, "getRelayerByCoinbase", arg0) + return *ret0, *ret1, *ret2, *ret3, *ret4, *ret5, err +} + +// GetRelayerByCoinbase is a free data retrieval call binding the contract method 0x540105c7. +// +// Solidity: function getRelayerByCoinbase( address) constant returns(uint256, address, uint256, uint16, address[], address[]) +func (_LAbstractRegistration *LAbstractRegistrationSession) GetRelayerByCoinbase(arg0 common.Address) (*big.Int, common.Address, *big.Int, uint16, []common.Address, []common.Address, error) { + return _LAbstractRegistration.Contract.GetRelayerByCoinbase(&_LAbstractRegistration.CallOpts, arg0) +} + +// GetRelayerByCoinbase is a free data retrieval call binding the contract method 0x540105c7. +// +// Solidity: function getRelayerByCoinbase( address) constant returns(uint256, address, uint256, uint16, address[], address[]) +func (_LAbstractRegistration *LAbstractRegistrationCallerSession) GetRelayerByCoinbase(arg0 common.Address) (*big.Int, common.Address, *big.Int, uint16, []common.Address, []common.Address, error) { + return _LAbstractRegistration.Contract.GetRelayerByCoinbase(&_LAbstractRegistration.CallOpts, arg0) +} + +// LAbstractXDCXListingABI is the input ABI used to generate the binding from. +const LAbstractXDCXListingABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"getTokenStatus\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]" + +// LAbstractXDCXListingBin is the compiled bytecode used for deploying new contracts. +const LAbstractXDCXListingBin = `0x` + +// DeployLAbstractXDCXListing deploys a new Ethereum contract, binding an instance of LAbstractXDCXListing to it. +func DeployLAbstractXDCXListing(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *LAbstractXDCXListing, error) { + parsed, err := abi.JSON(strings.NewReader(LAbstractXDCXListingABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(LAbstractXDCXListingBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &LAbstractXDCXListing{LAbstractXDCXListingCaller: LAbstractXDCXListingCaller{contract: contract}, LAbstractXDCXListingTransactor: LAbstractXDCXListingTransactor{contract: contract}, LAbstractXDCXListingFilterer: LAbstractXDCXListingFilterer{contract: contract}}, nil +} + +// LAbstractXDCXListing is an auto generated Go binding around an Ethereum contract. +type LAbstractXDCXListing struct { + LAbstractXDCXListingCaller // Read-only binding to the contract + LAbstractXDCXListingTransactor // Write-only binding to the contract + LAbstractXDCXListingFilterer // Log filterer for contract events +} + +// LAbstractXDCXListingCaller is an auto generated read-only Go binding around an Ethereum contract. +type LAbstractXDCXListingCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LAbstractXDCXListingTransactor is an auto generated write-only Go binding around an Ethereum contract. +type LAbstractXDCXListingTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LAbstractXDCXListingFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type LAbstractXDCXListingFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LAbstractXDCXListingSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type LAbstractXDCXListingSession struct { + Contract *LAbstractXDCXListing // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// LAbstractXDCXListingCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type LAbstractXDCXListingCallerSession struct { + Contract *LAbstractXDCXListingCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// LAbstractXDCXListingTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type LAbstractXDCXListingTransactorSession struct { + Contract *LAbstractXDCXListingTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// LAbstractXDCXListingRaw is an auto generated low-level Go binding around an Ethereum contract. +type LAbstractXDCXListingRaw struct { + Contract *LAbstractXDCXListing // Generic contract binding to access the raw methods on +} + +// LAbstractXDCXListingCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type LAbstractXDCXListingCallerRaw struct { + Contract *LAbstractXDCXListingCaller // Generic read-only contract binding to access the raw methods on +} + +// LAbstractXDCXListingTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type LAbstractXDCXListingTransactorRaw struct { + Contract *LAbstractXDCXListingTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewLAbstractXDCXListing creates a new instance of LAbstractXDCXListing, bound to a specific deployed contract. +func NewLAbstractXDCXListing(address common.Address, backend bind.ContractBackend) (*LAbstractXDCXListing, error) { + contract, err := bindLAbstractXDCXListing(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &LAbstractXDCXListing{LAbstractXDCXListingCaller: LAbstractXDCXListingCaller{contract: contract}, LAbstractXDCXListingTransactor: LAbstractXDCXListingTransactor{contract: contract}, LAbstractXDCXListingFilterer: LAbstractXDCXListingFilterer{contract: contract}}, nil +} + +// NewLAbstractXDCXListingCaller creates a new read-only instance of LAbstractXDCXListing, bound to a specific deployed contract. +func NewLAbstractXDCXListingCaller(address common.Address, caller bind.ContractCaller) (*LAbstractXDCXListingCaller, error) { + contract, err := bindLAbstractXDCXListing(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &LAbstractXDCXListingCaller{contract: contract}, nil +} + +// NewLAbstractXDCXListingTransactor creates a new write-only instance of LAbstractXDCXListing, bound to a specific deployed contract. +func NewLAbstractXDCXListingTransactor(address common.Address, transactor bind.ContractTransactor) (*LAbstractXDCXListingTransactor, error) { + contract, err := bindLAbstractXDCXListing(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &LAbstractXDCXListingTransactor{contract: contract}, nil +} + +// NewLAbstractXDCXListingFilterer creates a new log filterer instance of LAbstractXDCXListing, bound to a specific deployed contract. +func NewLAbstractXDCXListingFilterer(address common.Address, filterer bind.ContractFilterer) (*LAbstractXDCXListingFilterer, error) { + contract, err := bindLAbstractXDCXListing(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &LAbstractXDCXListingFilterer{contract: contract}, nil +} + +// bindLAbstractXDCXListing binds a generic wrapper to an already deployed contract. +func bindLAbstractXDCXListing(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(LAbstractXDCXListingABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_LAbstractXDCXListing *LAbstractXDCXListingRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _LAbstractXDCXListing.Contract.LAbstractXDCXListingCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_LAbstractXDCXListing *LAbstractXDCXListingRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _LAbstractXDCXListing.Contract.LAbstractXDCXListingTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_LAbstractXDCXListing *LAbstractXDCXListingRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _LAbstractXDCXListing.Contract.LAbstractXDCXListingTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_LAbstractXDCXListing *LAbstractXDCXListingCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _LAbstractXDCXListing.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_LAbstractXDCXListing *LAbstractXDCXListingTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _LAbstractXDCXListing.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_LAbstractXDCXListing *LAbstractXDCXListingTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _LAbstractXDCXListing.Contract.contract.Transact(opts, method, params...) +} + +// GetTokenStatus is a free data retrieval call binding the contract method 0xa3ff31b5. +// +// Solidity: function getTokenStatus( address) constant returns(bool) +func (_LAbstractXDCXListing *LAbstractXDCXListingCaller) GetTokenStatus(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var ( + ret0 = new(bool) + ) + out := &[]interface{}{ + ret0, + } + err := _LAbstractXDCXListing.contract.Call(opts, out, "getTokenStatus", arg0) + return *ret0, err +} + +// GetTokenStatus is a free data retrieval call binding the contract method 0xa3ff31b5. +// +// Solidity: function getTokenStatus( address) constant returns(bool) +func (_LAbstractXDCXListing *LAbstractXDCXListingSession) GetTokenStatus(arg0 common.Address) (bool, error) { + return _LAbstractXDCXListing.Contract.GetTokenStatus(&_LAbstractXDCXListing.CallOpts, arg0) +} + +// GetTokenStatus is a free data retrieval call binding the contract method 0xa3ff31b5. +// +// Solidity: function getTokenStatus( address) constant returns(bool) +func (_LAbstractXDCXListing *LAbstractXDCXListingCallerSession) GetTokenStatus(arg0 common.Address) (bool, error) { + return _LAbstractXDCXListing.Contract.GetTokenStatus(&_LAbstractXDCXListing.CallOpts, arg0) +} + +// LAbstractTokenTRC21ABI is the input ABI used to generate the binding from. +const LAbstractTokenTRC21ABI = "[{\"constant\":true,\"inputs\":[],\"name\":\"issuer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]" + +// LAbstractTokenTRC21Bin is the compiled bytecode used for deploying new contracts. +const LAbstractTokenTRC21Bin = `0x` + +// DeployLAbstractTokenTRC21 deploys a new Ethereum contract, binding an instance of LAbstractTokenTRC21 to it. +func DeployLAbstractTokenTRC21(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *LAbstractTokenTRC21, error) { + parsed, err := abi.JSON(strings.NewReader(LAbstractTokenTRC21ABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(LAbstractTokenTRC21Bin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &LAbstractTokenTRC21{LAbstractTokenTRC21Caller: LAbstractTokenTRC21Caller{contract: contract}, LAbstractTokenTRC21Transactor: LAbstractTokenTRC21Transactor{contract: contract}, LAbstractTokenTRC21Filterer: LAbstractTokenTRC21Filterer{contract: contract}}, nil +} + +// LAbstractTokenTRC21 is an auto generated Go binding around an Ethereum contract. +type LAbstractTokenTRC21 struct { + LAbstractTokenTRC21Caller // Read-only binding to the contract + LAbstractTokenTRC21Transactor // Write-only binding to the contract + LAbstractTokenTRC21Filterer // Log filterer for contract events +} + +// LAbstractTokenTRC21Caller is an auto generated read-only Go binding around an Ethereum contract. +type LAbstractTokenTRC21Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LAbstractTokenTRC21Transactor is an auto generated write-only Go binding around an Ethereum contract. +type LAbstractTokenTRC21Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LAbstractTokenTRC21Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type LAbstractTokenTRC21Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LAbstractTokenTRC21Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type LAbstractTokenTRC21Session struct { + Contract *LAbstractTokenTRC21 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// LAbstractTokenTRC21CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type LAbstractTokenTRC21CallerSession struct { + Contract *LAbstractTokenTRC21Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// LAbstractTokenTRC21TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type LAbstractTokenTRC21TransactorSession struct { + Contract *LAbstractTokenTRC21Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// LAbstractTokenTRC21Raw is an auto generated low-level Go binding around an Ethereum contract. +type LAbstractTokenTRC21Raw struct { + Contract *LAbstractTokenTRC21 // Generic contract binding to access the raw methods on +} + +// LAbstractTokenTRC21CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type LAbstractTokenTRC21CallerRaw struct { + Contract *LAbstractTokenTRC21Caller // Generic read-only contract binding to access the raw methods on +} + +// LAbstractTokenTRC21TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type LAbstractTokenTRC21TransactorRaw struct { + Contract *LAbstractTokenTRC21Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewLAbstractTokenTRC21 creates a new instance of LAbstractTokenTRC21, bound to a specific deployed contract. +func NewLAbstractTokenTRC21(address common.Address, backend bind.ContractBackend) (*LAbstractTokenTRC21, error) { + contract, err := bindLAbstractTokenTRC21(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &LAbstractTokenTRC21{LAbstractTokenTRC21Caller: LAbstractTokenTRC21Caller{contract: contract}, LAbstractTokenTRC21Transactor: LAbstractTokenTRC21Transactor{contract: contract}, LAbstractTokenTRC21Filterer: LAbstractTokenTRC21Filterer{contract: contract}}, nil +} + +// NewLAbstractTokenTRC21Caller creates a new read-only instance of LAbstractTokenTRC21, bound to a specific deployed contract. +func NewLAbstractTokenTRC21Caller(address common.Address, caller bind.ContractCaller) (*LAbstractTokenTRC21Caller, error) { + contract, err := bindLAbstractTokenTRC21(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &LAbstractTokenTRC21Caller{contract: contract}, nil +} + +// NewLAbstractTokenTRC21Transactor creates a new write-only instance of LAbstractTokenTRC21, bound to a specific deployed contract. +func NewLAbstractTokenTRC21Transactor(address common.Address, transactor bind.ContractTransactor) (*LAbstractTokenTRC21Transactor, error) { + contract, err := bindLAbstractTokenTRC21(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &LAbstractTokenTRC21Transactor{contract: contract}, nil +} + +// NewLAbstractTokenTRC21Filterer creates a new log filterer instance of LAbstractTokenTRC21, bound to a specific deployed contract. +func NewLAbstractTokenTRC21Filterer(address common.Address, filterer bind.ContractFilterer) (*LAbstractTokenTRC21Filterer, error) { + contract, err := bindLAbstractTokenTRC21(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &LAbstractTokenTRC21Filterer{contract: contract}, nil +} + +// bindLAbstractTokenTRC21 binds a generic wrapper to an already deployed contract. +func bindLAbstractTokenTRC21(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(LAbstractTokenTRC21ABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_LAbstractTokenTRC21 *LAbstractTokenTRC21Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _LAbstractTokenTRC21.Contract.LAbstractTokenTRC21Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_LAbstractTokenTRC21 *LAbstractTokenTRC21Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _LAbstractTokenTRC21.Contract.LAbstractTokenTRC21Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_LAbstractTokenTRC21 *LAbstractTokenTRC21Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _LAbstractTokenTRC21.Contract.LAbstractTokenTRC21Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_LAbstractTokenTRC21 *LAbstractTokenTRC21CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _LAbstractTokenTRC21.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_LAbstractTokenTRC21 *LAbstractTokenTRC21TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _LAbstractTokenTRC21.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_LAbstractTokenTRC21 *LAbstractTokenTRC21TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _LAbstractTokenTRC21.Contract.contract.Transact(opts, method, params...) +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_LAbstractTokenTRC21 *LAbstractTokenTRC21Caller) Issuer(opts *bind.CallOpts) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _LAbstractTokenTRC21.contract.Call(opts, out, "issuer") + return *ret0, err +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_LAbstractTokenTRC21 *LAbstractTokenTRC21Session) Issuer() (common.Address, error) { + return _LAbstractTokenTRC21.Contract.Issuer(&_LAbstractTokenTRC21.CallOpts) +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_LAbstractTokenTRC21 *LAbstractTokenTRC21CallerSession) Issuer() (common.Address, error) { + return _LAbstractTokenTRC21.Contract.Issuer(&_LAbstractTokenTRC21.CallOpts) +} + +// LendingABI is the input ABI used to generate the binding from. +const LendingABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"COLLATERALS\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ORACLE_PRICE_FEEDER\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"term\",\"type\":\"uint256\"}],\"name\":\"addTerm\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"LENDINGRELAYER_LIST\",\"outputs\":[{\"name\":\"_tradeFee\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"Relayer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"XDCXListing\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"coinbase\",\"type\":\"address\"},{\"name\":\"tradeFee\",\"type\":\"uint16\"},{\"name\":\"baseTokens\",\"type\":\"address[]\"},{\"name\":\"terms\",\"type\":\"uint256[]\"},{\"name\":\"collaterals\",\"type\":\"address[]\"}],\"name\":\"update\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MODERATOR\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"},{\"name\":\"depositRate\",\"type\":\"uint256\"},{\"name\":\"liquidationRate\",\"type\":\"uint256\"},{\"name\":\"recallRate\",\"type\":\"uint256\"}],\"name\":\"addILOCollateral\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"coinbase\",\"type\":\"address\"},{\"name\":\"tradeFee\",\"type\":\"uint16\"}],\"name\":\"updateFee\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"moderator\",\"type\":\"address\"}],\"name\":\"changeModerator\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"TERMS\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"BASES\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"COLLATERAL_LIST\",\"outputs\":[{\"name\":\"_depositRate\",\"type\":\"uint256\"},{\"name\":\"_liquidationRate\",\"type\":\"uint256\"},{\"name\":\"_recallRate\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"addBaseToken\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"},{\"name\":\"lendingToken\",\"type\":\"address\"},{\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"setCollateralPrice\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"ILO_COLLATERALS\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"feeder\",\"type\":\"address\"}],\"name\":\"changeOraclePriceFeeder\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"},{\"name\":\"depositRate\",\"type\":\"uint256\"},{\"name\":\"liquidationRate\",\"type\":\"uint256\"},{\"name\":\"recallRate\",\"type\":\"uint256\"}],\"name\":\"addCollateral\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"},{\"name\":\"lendingToken\",\"type\":\"address\"}],\"name\":\"getCollateralPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"coinbase\",\"type\":\"address\"}],\"name\":\"getLendingRelayerByCoinbase\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"address[]\"},{\"name\":\"\",\"type\":\"uint256[]\"},{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"r\",\"type\":\"address\"},{\"name\":\"t\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}]" + +// LendingBin is the compiled bytecode used for deploying new contracts. +const LendingBin = `0x608060405234801561001057600080fd5b506040516040806124e183398101604052805160209091015160068054600160a060020a0319908116600160a060020a03948516179091556008805482169390921692909217905560098054339083168117909155600780549092161790556124638061007e6000396000f3006080604052600436106101035763ffffffff60e060020a6000350416630811f05a81146101085780630c4c2cbb1461013c5780630c655955146101515780630faf292c1461016b578063264949d8146101a357806329a4ddec146101b85780632ddada4c146101cd57806334b4e625146102aa5780633b874827146102bf5780633ea2391f146102e9578063466429211461031157806356327f57146103325780636d1dc42a1461035c578063822507011461037457806383e280d9146103b3578063acb8cd92146103d4578063b8687ec4146103fe578063c38f473f14610416578063e5eecf6814610437578063f2dbd07014610461578063fe824700146104a1575b600080fd5b34801561011457600080fd5b506101206004356105af565b60408051600160a060020a039092168252519081900360200190f35b34801561014857600080fd5b506101206105d7565b34801561015d57600080fd5b506101696004356105e6565b005b34801561017757600080fd5b5061018c600160a060020a0360043516610728565b6040805161ffff9092168252519081900360200190f35b3480156101af57600080fd5b5061012061073e565b3480156101c457600080fd5b5061012061074d565b3480156101d957600080fd5b506040805160206004604435818101358381028086018501909652808552610169958335600160a060020a0316956024803561ffff1696369695606495939492019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750506040805187358901803560208181028481018201909552818452989b9a99890198929750908201955093508392508501908490808284375094975061075c9650505050505050565b3480156102b657600080fd5b50610120610e9b565b3480156102cb57600080fd5b50610169600160a060020a0360043516602435604435606435610eaa565b3480156102f557600080fd5b50610169600160a060020a036004351661ffff60243516611313565b34801561031d57600080fd5b50610169600160a060020a0360043516611664565b34801561033e57600080fd5b5061034a6004356116eb565b60408051918252519081900360200190f35b34801561036857600080fd5b5061012060043561170a565b34801561038057600080fd5b50610395600160a060020a0360043516611718565b60408051938452602084019290925282820152519081900360600190f35b3480156103bf57600080fd5b50610169600160a060020a0360043516611738565b3480156103e057600080fd5b50610169600160a060020a0360043581169060243516604435611930565b34801561040a57600080fd5b50610120600435611d11565b34801561042257600080fd5b50610169600160a060020a0360043516611d1f565b34801561044357600080fd5b50610169600160a060020a0360043516602435604435606435611db8565b34801561046d57600080fd5b50610488600160a060020a03600435811690602435166120f2565b6040805192835260208301919091528051918290030190f35b3480156104ad57600080fd5b506104c2600160a060020a0360043516612129565b604051808561ffff1661ffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015610518578181015183820152602001610500565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561055757818101518382015260200161053f565b50505050905001848103825285818151815260200191508051906020019060200280838360005b8381101561059657818101518382015260200161057e565b5050505090500197505050505050505060405180910390f35b60028054829081106105bd57fe5b600091825260209091200154600160a060020a0316905081565b600954600160a060020a031681565b600754600160a060020a03163314610636576040805160e560020a62461bcd02815260206004820152600f60248201526000805160206123f8833981519152604482015290519081900360640190fd5b603c81101561068f576040805160e560020a62461bcd02815260206004820152600c60248201527f496e76616c6964207465726d0000000000000000000000000000000000000000604482015290519081900360640190fd5b6106e960048054806020026020016040519081016040528092919081815260200182805480156106de57602002820191906000526020600020905b8154815260200190600101908083116106ca575b505050505082612272565b151561072557600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018190555b50565b60006020819052908152604090205461ffff1681565b600654600160a060020a031681565b600854600160a060020a031681565b600654604080517f540105c7000000000000000000000000000000000000000000000000000000008152600160a060020a03888116600483015291516000938493849391169163540105c791602480820192869290919082900301818387803b1580156107c857600080fd5b505af11580156107dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260c081101561080557600080fd5b81516020830151604084015160608501516080860180519496939592949193928301929164010000000081111561083b57600080fd5b8201602081018481111561084e57600080fd5b815185602082028301116401000000008211171561086b57600080fd5b5050929190602001805164010000000081111561088757600080fd5b8201602081018481111561089a57600080fd5b81518560208202830111640100000000821117156108b757600080fd5b50979b505050600160a060020a038a163314965061092695505050505050576040805160e560020a62461bcd02815260206004820152601660248201527f52656c61796572206f776e657220726571756972656400000000000000000000604482015290519081900360640190fd5b600654604080517f500f99f7000000000000000000000000000000000000000000000000000000008152600160a060020a038b811660048301529151919092169163500f99f79160248083019260209291908290030181600087803b15801561098e57600080fd5b505af11580156109a2573d6000803e3d6000fd5b505050506040513d60208110156109b857600080fd5b505115610a0f576040805160e560020a62461bcd02815260206004820152601960248201527f52656c6179657220726571756972656420746f20636c6f736500000000000000604482015290519081900360640190fd5b60008761ffff1610158015610a2957506103e88761ffff16105b1515610a7f576040805160e560020a62461bcd02815260206004820152601160248201527f496e76616c696420747261646520466565000000000000000000000000000000604482015290519081900360640190fd5b8451865114610ad8576040805160e560020a62461bcd02815260206004820152601960248201527f4e6f742076616c6964206e756d626572206f66207465726d7300000000000000604482015290519081900360640190fd5b8351865114610b31576040805160e560020a62461bcd02815260206004820152601f60248201527f4e6f742076616c6964206e756d626572206f6620636f6c6c61746572616c7300604482015290519081900360640190fd5b5060009050805b8551811015610c2057610bbc6003805480602002602001604051908101604052809291908181526020018280548015610b9a57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610b7c575b50505050508783815181101515610bad57fe5b906020019060200201516122bb565b9150600182151514610c18576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c6964206c656e64696e6720746f6b656e0000000000000000000000604482015290519081900360640190fd5b600101610b38565b5060005b8451811015610d0257610c9e6004805480602002602001604051908101604052809291908181526020018280548015610c7c57602002820191906000526020600020905b815481526020019060010190808311610c68575b50505050508683815181101515610c8f57fe5b90602001906020020151612272565b9150600182151514610cfa576040805160e560020a62461bcd02815260206004820152600c60248201527f496e76616c6964207465726d0000000000000000000000000000000000000000604482015290519081900360640190fd5b600101610c24565b5060005b8351811015610df0578351600090859083908110610d2057fe5b60209081029091010151600160a060020a031614610de857610da46005805480602002602001604051908101604052809291908181526020018280548015610d9157602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610d73575b50505050508583815181101515610bad57fe5b1515610de8576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612418833981519152604482015290519081900360640190fd5b600101610d06565b6040805160808101825261ffff898116825260208083018a81528385018a905260608401899052600160a060020a038d166000908152808352949094208351815461ffff191693169290921782559251805192939192610e56926001850192019061230a565b5060408201518051610e7291600284019160209091019061236f565b5060608201518051610e8e91600384019160209091019061230a565b5050505050505050505050565b600754600160a060020a031681565b60008060648510158015610ebe5750606484115b1515610f14576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c696420726174657300000000000000000000000000000000000000604482015290519081900360640190fd5b838511610f6b576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c6964206465706f7369742072617465730000000000000000000000604482015290519081900360640190fd5b848311610fc2576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c696420726563616c6c207261746573000000000000000000000000604482015290519081900360640190fd5b611026600280548060200260200160405190810160405280929190818152602001828054801561101b57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610ffd575b5050505050876122bb565b1561107b576040805160e560020a62461bcd02815260206004820152601660248201527f496e76616c696420494c4f20636f6c6c61746572616c00000000000000000000604482015290519081900360640190fd5b6008546040805160e060020a63a3ff31b5028152600160a060020a0389811660048301529151919092169163a3ff31b59160248083019260209291908290030181600087803b1580156110cd57600080fd5b505af11580156110e1573d6000803e3d6000fd5b505050506040513d60208110156110f757600080fd5b50519150811515611140576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612418833981519152604482015290519081900360640190fd5b85905033600160a060020a031681600160a060020a0316631d1438486040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561118b57600080fd5b505af115801561119f573d6000803e3d6000fd5b505050506040513d60208110156111b557600080fd5b5051600160a060020a031614611215576040805160e560020a62461bcd02815260206004820152601560248201527f526571756972656420746f6b656e206973737565720000000000000000000000604482015290519081900360640190fd5b604080516060810182528681526020808201878152828401878152600160a060020a038b1660009081526001808552908690209451855591519184019190915551600290920191909155600580548351818402810184019094528084526112b9939283018282801561101b57602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610ffd575050505050876122bb565b151561130b57600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0018054600160a060020a031916600160a060020a0388161790555b505050505050565b600654604080517f540105c7000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301529151600093929092169163540105c791602480820192869290919082900301818387803b15801561137d57600080fd5b505af1158015611391573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260c08110156113ba57600080fd5b8151602083015160408401516060850151608086018051949693959294919392830192916401000000008111156113f057600080fd5b8201602081018481111561140357600080fd5b815185602082028301116401000000008211171561142057600080fd5b5050929190602001805164010000000081111561143c57600080fd5b8201602081018481111561144f57600080fd5b815185602082028301116401000000008211171561146c57600080fd5b509799505050600160a060020a038816331496506114db95505050505050576040805160e560020a62461bcd02815260206004820152601660248201527f52656c61796572206f776e657220726571756972656400000000000000000000604482015290519081900360640190fd5b600654604080517f500f99f7000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301529151919092169163500f99f79160248083019260209291908290030181600087803b15801561154357600080fd5b505af1158015611557573d6000803e3d6000fd5b505050506040513d602081101561156d57600080fd5b5051156115c4576040805160e560020a62461bcd02815260206004820152601960248201527f52656c6179657220726571756972656420746f20636c6f736500000000000000604482015290519081900360640190fd5b60008261ffff16101580156115de57506103e88261ffff16105b1515611634576040805160e560020a62461bcd02815260206004820152601160248201527f496e76616c696420747261646520466565000000000000000000000000000000604482015290519081900360640190fd5b50600160a060020a03919091166000908152602081905260409020805461ffff191661ffff909216919091179055565b600754600160a060020a031633146116b4576040805160e560020a62461bcd02815260206004820152600f60248201526000805160206123f8833981519152604482015290519081900360640190fd5b600160a060020a03811615156116c957600080fd5b60078054600160a060020a031916600160a060020a0392909216919091179055565b60048054829081106116f957fe5b600091825260209091200154905081565b60038054829081106105bd57fe5b600160208190526000918252604090912080549181015460029091015483565b600754600090600160a060020a0316331461178b576040805160e560020a62461bcd02815260206004820152600f60248201526000805160206123f8833981519152604482015290519081900360640190fd5b6008546040805160e060020a63a3ff31b5028152600160a060020a0385811660048301529151919092169163a3ff31b59160248083019260209291908290030181600087803b1580156117dd57600080fd5b505af11580156117f1573d6000803e3d6000fd5b505050506040513d602081101561180757600080fd5b50518061181d5750600160a060020a0382166001145b9050801515611876576040805160e560020a62461bcd02815260206004820152601260248201527f496e76616c6964206261736520746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b6118da60038054806020026020016040519081016040528092919081815260200182805480156118cf57602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116118b1575b5050505050836122bb565b151561192c57600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b018054600160a060020a031916600160a060020a0384161790555b5050565b6008546040805160e060020a63a3ff31b5028152600160a060020a03868116600483015291516000938493169163a3ff31b591602480830192602092919082900301818787803b15801561198357600080fd5b505af1158015611997573d6000803e3d6000fd5b505050506040513d60208110156119ad57600080fd5b5051806119c35750600160a060020a0385166001145b9150811515611a0a576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612418833981519152604482015290519081900360640190fd5b611a6e6003805480602002602001604051908101604052809291908181526020018280548015611a6357602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611a45575b5050505050856122bb565b1515611ac4576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c6964206c656e64696e6720746f6b656e0000000000000000000000604482015290519081900360640190fd5b600160a060020a03851660009081526001602052604090205460641115611b23576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612418833981519152604482015290519081900360640190fd5b611b876002805480602002602001604051908101604052809291908181526020018280548015611b7c57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611b5e575b5050505050866122bb565b15611bf357600954600160a060020a03163314611bee576040805160e560020a62461bcd02815260206004820152601c60248201527f4f7261636c652050726963652046656564657220726571756972656400000000604482015290519081900360640190fd5b611cc8565b84905033600160a060020a031681600160a060020a0316631d1438486040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611c3e57600080fd5b505af1158015611c52573d6000803e3d6000fd5b505050506040513d6020811015611c6857600080fd5b5051600160a060020a031614611cc8576040805160e560020a62461bcd02815260206004820152601560248201527f526571756972656420746f6b656e206973737565720000000000000000000000604482015290519081900360640190fd5b5050604080518082018252918252436020808401918252600160a060020a0395861660009081526001808352848220969097168152600390950190529220905181559051910155565b60058054829081106105bd57fe5b600954600160a060020a03163314611d81576040805160e560020a62461bcd02815260206004820152601960248201527f4f7261636c6520707269636520666565646572206f6e6c792e00000000000000604482015290519081900360640190fd5b600160a060020a0381161515611d9657600080fd5b60098054600160a060020a031916600160a060020a0392909216919091179055565b600754600090600160a060020a03163314611e0b576040805160e560020a62461bcd02815260206004820152600f60248201526000805160206123f8833981519152604482015290519081900360640190fd5b60648410158015611e1c5750606483115b1515611e72576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c696420726174657300000000000000000000000000000000000000604482015290519081900360640190fd5b828411611ec9576040805160e560020a62461bcd02815260206004820152601560248201527f496e76616c6964206465706f7369742072617465730000000000000000000000604482015290519081900360640190fd5b838211611f20576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c696420726563616c6c207261746573000000000000000000000000604482015290519081900360640190fd5b6008546040805160e060020a63a3ff31b5028152600160a060020a0388811660048301529151919092169163a3ff31b59160248083019260209291908290030181600087803b158015611f7257600080fd5b505af1158015611f86573d6000803e3d6000fd5b505050506040513d6020811015611f9c57600080fd5b505180611fb25750600160a060020a0385166001145b9050801515611ff9576040805160e560020a62461bcd0281526020600482015260126024820152600080516020612418833981519152604482015290519081900360640190fd5b604080516060810182528581526020808201868152828401868152600160a060020a038a16600090815260018085529086902094518555915191840191909155516002928301558154835181830281018301909452808452612099939291830182828015611b7c57602002820191906000526020600020908154600160a060020a03168152600190910190602001808311611b5e575050505050866122bb565b15156120eb57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace018054600160a060020a031916600160a060020a0387161790555b5050505050565b600160a060020a03918216600090815260016020818152604080842094909516835260039093019092529190912080549101549091565b600160a060020a03811660009081526020818152604080832080546001820180548451818702810187019095528085526060958695869561ffff9095169460028101936003909101928591908301828280156121ae57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311612190575b505050505092508180548060200260200160405190810160405280929190818152602001828054801561220057602002820191906000526020600020905b8154815260200190600101908083116121ec575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561225c57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161223e575b5050505050905093509350935093509193509193565b6000805b83518110156122af5782848281518110151561228e57fe5b9060200190602002015114156122a757600191506122b4565b600101612276565b600091505b5092915050565b6000805b83518110156122af5782600160a060020a031684828151811015156122e057fe5b90602001906020020151600160a060020a0316141561230257600191506122b4565b6001016122bf565b82805482825590600052602060002090810192821561235f579160200282015b8281111561235f5782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019061232a565b5061236b9291506123b6565b5090565b8280548282559060005260206000209081019282156123aa579160200282015b828111156123aa57825182559160200191906001019061238f565b5061236b9291506123dd565b6123da91905b8082111561236b578054600160a060020a03191681556001016123bc565b90565b6123da91905b8082111561236b57600081556001016123e356004d6f64657261746f72206f6e6c792e0000000000000000000000000000000000496e76616c696420636f6c6c61746572616c0000000000000000000000000000a165627a7a72305820c96a7844fbc99f6cd5124b4b98c05fdfa83bae82c294c9ecae7cce94364056950029` + +// DeployLending deploys a new Ethereum contract, binding an instance of Lending to it. +func DeployLending(auth *bind.TransactOpts, backend bind.ContractBackend, r common.Address, t common.Address) (common.Address, *types.Transaction, *Lending, error) { + parsed, err := abi.JSON(strings.NewReader(LendingABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(LendingBin), backend, r, t) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Lending{LendingCaller: LendingCaller{contract: contract}, LendingTransactor: LendingTransactor{contract: contract}, LendingFilterer: LendingFilterer{contract: contract}}, nil +} + +// Lending is an auto generated Go binding around an Ethereum contract. +type Lending struct { + LendingCaller // Read-only binding to the contract + LendingTransactor // Write-only binding to the contract + LendingFilterer // Log filterer for contract events +} + +// LendingCaller is an auto generated read-only Go binding around an Ethereum contract. +type LendingCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LendingTransactor is an auto generated write-only Go binding around an Ethereum contract. +type LendingTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LendingFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type LendingFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// LendingSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type LendingSession struct { + Contract *Lending // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// LendingCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type LendingCallerSession struct { + Contract *LendingCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// LendingTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type LendingTransactorSession struct { + Contract *LendingTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// LendingRaw is an auto generated low-level Go binding around an Ethereum contract. +type LendingRaw struct { + Contract *Lending // Generic contract binding to access the raw methods on +} + +// LendingCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type LendingCallerRaw struct { + Contract *LendingCaller // Generic read-only contract binding to access the raw methods on +} + +// LendingTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type LendingTransactorRaw struct { + Contract *LendingTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewLending creates a new instance of Lending, bound to a specific deployed contract. +func NewLending(address common.Address, backend bind.ContractBackend) (*Lending, error) { + contract, err := bindLending(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Lending{LendingCaller: LendingCaller{contract: contract}, LendingTransactor: LendingTransactor{contract: contract}, LendingFilterer: LendingFilterer{contract: contract}}, nil +} + +// NewLendingCaller creates a new read-only instance of Lending, bound to a specific deployed contract. +func NewLendingCaller(address common.Address, caller bind.ContractCaller) (*LendingCaller, error) { + contract, err := bindLending(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &LendingCaller{contract: contract}, nil +} + +// NewLendingTransactor creates a new write-only instance of Lending, bound to a specific deployed contract. +func NewLendingTransactor(address common.Address, transactor bind.ContractTransactor) (*LendingTransactor, error) { + contract, err := bindLending(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &LendingTransactor{contract: contract}, nil +} + +// NewLendingFilterer creates a new log filterer instance of Lending, bound to a specific deployed contract. +func NewLendingFilterer(address common.Address, filterer bind.ContractFilterer) (*LendingFilterer, error) { + contract, err := bindLending(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &LendingFilterer{contract: contract}, nil +} + +// bindLending binds a generic wrapper to an already deployed contract. +func bindLending(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(LendingABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Lending *LendingRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Lending.Contract.LendingCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Lending *LendingRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Lending.Contract.LendingTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Lending *LendingRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Lending.Contract.LendingTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Lending *LendingCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Lending.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Lending *LendingTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Lending.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Lending *LendingTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Lending.Contract.contract.Transact(opts, method, params...) +} + +// BASES is a free data retrieval call binding the contract method 0x6d1dc42a. +// +// Solidity: function BASES( uint256) constant returns(address) +func (_Lending *LendingCaller) BASES(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _Lending.contract.Call(opts, out, "BASES", arg0) + return *ret0, err +} + +// BASES is a free data retrieval call binding the contract method 0x6d1dc42a. +// +// Solidity: function BASES( uint256) constant returns(address) +func (_Lending *LendingSession) BASES(arg0 *big.Int) (common.Address, error) { + return _Lending.Contract.BASES(&_Lending.CallOpts, arg0) +} + +// BASES is a free data retrieval call binding the contract method 0x6d1dc42a. +// +// Solidity: function BASES( uint256) constant returns(address) +func (_Lending *LendingCallerSession) BASES(arg0 *big.Int) (common.Address, error) { + return _Lending.Contract.BASES(&_Lending.CallOpts, arg0) +} + +// COLLATERALS is a free data retrieval call binding the contract method 0x0811f05a. +// +// Solidity: function COLLATERALS( uint256) constant returns(address) +func (_Lending *LendingCaller) COLLATERALS(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _Lending.contract.Call(opts, out, "COLLATERALS", arg0) + return *ret0, err +} + +// COLLATERALS is a free data retrieval call binding the contract method 0x0811f05a. +// +// Solidity: function COLLATERALS( uint256) constant returns(address) +func (_Lending *LendingSession) COLLATERALS(arg0 *big.Int) (common.Address, error) { + return _Lending.Contract.COLLATERALS(&_Lending.CallOpts, arg0) +} + +// COLLATERALS is a free data retrieval call binding the contract method 0x0811f05a. +// +// Solidity: function COLLATERALS( uint256) constant returns(address) +func (_Lending *LendingCallerSession) COLLATERALS(arg0 *big.Int) (common.Address, error) { + return _Lending.Contract.COLLATERALS(&_Lending.CallOpts, arg0) +} + +// COLLATERALLIST is a free data retrieval call binding the contract method 0x82250701. +// +// Solidity: function COLLATERAL_LIST( address) constant returns(_depositRate uint256, _liquidationRate uint256, _recallRate uint256) +func (_Lending *LendingCaller) COLLATERALLIST(opts *bind.CallOpts, arg0 common.Address) (struct { + DepositRate *big.Int + LiquidationRate *big.Int + RecallRate *big.Int +}, error) { + ret := new(struct { + DepositRate *big.Int + LiquidationRate *big.Int + RecallRate *big.Int + }) + out := &[]interface{}{ + ret, + } + err := _Lending.contract.Call(opts, out, "COLLATERAL_LIST", arg0) + return *ret, err +} + +// COLLATERALLIST is a free data retrieval call binding the contract method 0x82250701. +// +// Solidity: function COLLATERAL_LIST( address) constant returns(_depositRate uint256, _liquidationRate uint256, _recallRate uint256) +func (_Lending *LendingSession) COLLATERALLIST(arg0 common.Address) (struct { + DepositRate *big.Int + LiquidationRate *big.Int + RecallRate *big.Int +}, error) { + return _Lending.Contract.COLLATERALLIST(&_Lending.CallOpts, arg0) +} + +// COLLATERALLIST is a free data retrieval call binding the contract method 0x82250701. +// +// Solidity: function COLLATERAL_LIST( address) constant returns(_depositRate uint256, _liquidationRate uint256, _recallRate uint256) +func (_Lending *LendingCallerSession) COLLATERALLIST(arg0 common.Address) (struct { + DepositRate *big.Int + LiquidationRate *big.Int + RecallRate *big.Int +}, error) { + return _Lending.Contract.COLLATERALLIST(&_Lending.CallOpts, arg0) +} + +// ILOCOLLATERALS is a free data retrieval call binding the contract method 0xb8687ec4. +// +// Solidity: function ILO_COLLATERALS( uint256) constant returns(address) +func (_Lending *LendingCaller) ILOCOLLATERALS(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _Lending.contract.Call(opts, out, "ILO_COLLATERALS", arg0) + return *ret0, err +} + +// ILOCOLLATERALS is a free data retrieval call binding the contract method 0xb8687ec4. +// +// Solidity: function ILO_COLLATERALS( uint256) constant returns(address) +func (_Lending *LendingSession) ILOCOLLATERALS(arg0 *big.Int) (common.Address, error) { + return _Lending.Contract.ILOCOLLATERALS(&_Lending.CallOpts, arg0) +} + +// ILOCOLLATERALS is a free data retrieval call binding the contract method 0xb8687ec4. +// +// Solidity: function ILO_COLLATERALS( uint256) constant returns(address) +func (_Lending *LendingCallerSession) ILOCOLLATERALS(arg0 *big.Int) (common.Address, error) { + return _Lending.Contract.ILOCOLLATERALS(&_Lending.CallOpts, arg0) +} + +// LENDINGRELAYERLIST is a free data retrieval call binding the contract method 0x0faf292c. +// +// Solidity: function LENDINGRELAYER_LIST( address) constant returns(_tradeFee uint16) +func (_Lending *LendingCaller) LENDINGRELAYERLIST(opts *bind.CallOpts, arg0 common.Address) (uint16, error) { + var ( + ret0 = new(uint16) + ) + out := &[]interface{}{ + ret0, + } + err := _Lending.contract.Call(opts, out, "LENDINGRELAYER_LIST", arg0) + return *ret0, err +} + +// LENDINGRELAYERLIST is a free data retrieval call binding the contract method 0x0faf292c. +// +// Solidity: function LENDINGRELAYER_LIST( address) constant returns(_tradeFee uint16) +func (_Lending *LendingSession) LENDINGRELAYERLIST(arg0 common.Address) (uint16, error) { + return _Lending.Contract.LENDINGRELAYERLIST(&_Lending.CallOpts, arg0) +} + +// LENDINGRELAYERLIST is a free data retrieval call binding the contract method 0x0faf292c. +// +// Solidity: function LENDINGRELAYER_LIST( address) constant returns(_tradeFee uint16) +func (_Lending *LendingCallerSession) LENDINGRELAYERLIST(arg0 common.Address) (uint16, error) { + return _Lending.Contract.LENDINGRELAYERLIST(&_Lending.CallOpts, arg0) +} + +// MODERATOR is a free data retrieval call binding the contract method 0x34b4e625. +// +// Solidity: function MODERATOR() constant returns(address) +func (_Lending *LendingCaller) MODERATOR(opts *bind.CallOpts) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _Lending.contract.Call(opts, out, "MODERATOR") + return *ret0, err +} + +// MODERATOR is a free data retrieval call binding the contract method 0x34b4e625. +// +// Solidity: function MODERATOR() constant returns(address) +func (_Lending *LendingSession) MODERATOR() (common.Address, error) { + return _Lending.Contract.MODERATOR(&_Lending.CallOpts) +} + +// MODERATOR is a free data retrieval call binding the contract method 0x34b4e625. +// +// Solidity: function MODERATOR() constant returns(address) +func (_Lending *LendingCallerSession) MODERATOR() (common.Address, error) { + return _Lending.Contract.MODERATOR(&_Lending.CallOpts) +} + +// ORACLEPRICEFEEDER is a free data retrieval call binding the contract method 0x0c4c2cbb. +// +// Solidity: function ORACLE_PRICE_FEEDER() constant returns(address) +func (_Lending *LendingCaller) ORACLEPRICEFEEDER(opts *bind.CallOpts) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _Lending.contract.Call(opts, out, "ORACLE_PRICE_FEEDER") + return *ret0, err +} + +// ORACLEPRICEFEEDER is a free data retrieval call binding the contract method 0x0c4c2cbb. +// +// Solidity: function ORACLE_PRICE_FEEDER() constant returns(address) +func (_Lending *LendingSession) ORACLEPRICEFEEDER() (common.Address, error) { + return _Lending.Contract.ORACLEPRICEFEEDER(&_Lending.CallOpts) +} + +// ORACLEPRICEFEEDER is a free data retrieval call binding the contract method 0x0c4c2cbb. +// +// Solidity: function ORACLE_PRICE_FEEDER() constant returns(address) +func (_Lending *LendingCallerSession) ORACLEPRICEFEEDER() (common.Address, error) { + return _Lending.Contract.ORACLEPRICEFEEDER(&_Lending.CallOpts) +} + +// Relayer is a free data retrieval call binding the contract method 0x264949d8. +// +// Solidity: function Relayer() constant returns(address) +func (_Lending *LendingCaller) Relayer(opts *bind.CallOpts) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _Lending.contract.Call(opts, out, "Relayer") + return *ret0, err +} + +// Relayer is a free data retrieval call binding the contract method 0x264949d8. +// +// Solidity: function Relayer() constant returns(address) +func (_Lending *LendingSession) Relayer() (common.Address, error) { + return _Lending.Contract.Relayer(&_Lending.CallOpts) +} + +// Relayer is a free data retrieval call binding the contract method 0x264949d8. +// +// Solidity: function Relayer() constant returns(address) +func (_Lending *LendingCallerSession) Relayer() (common.Address, error) { + return _Lending.Contract.Relayer(&_Lending.CallOpts) +} + +// TERMS is a free data retrieval call binding the contract method 0x56327f57. +// +// Solidity: function TERMS( uint256) constant returns(uint256) +func (_Lending *LendingCaller) TERMS(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _Lending.contract.Call(opts, out, "TERMS", arg0) + return *ret0, err +} + +// TERMS is a free data retrieval call binding the contract method 0x56327f57. +// +// Solidity: function TERMS( uint256) constant returns(uint256) +func (_Lending *LendingSession) TERMS(arg0 *big.Int) (*big.Int, error) { + return _Lending.Contract.TERMS(&_Lending.CallOpts, arg0) +} + +// TERMS is a free data retrieval call binding the contract method 0x56327f57. +// +// Solidity: function TERMS( uint256) constant returns(uint256) +func (_Lending *LendingCallerSession) TERMS(arg0 *big.Int) (*big.Int, error) { + return _Lending.Contract.TERMS(&_Lending.CallOpts, arg0) +} + +// XDCXListing is a free data retrieval call binding the contract method 0x29a4ddec. +// +// Solidity: function XDCXListing() constant returns(address) +func (_Lending *LendingCaller) XDCXListing(opts *bind.CallOpts) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _Lending.contract.Call(opts, out, "XDCXListing") + return *ret0, err +} + +// XDCXListing is a free data retrieval call binding the contract method 0x29a4ddec. +// +// Solidity: function XDCXListing() constant returns(address) +func (_Lending *LendingSession) XDCXListing() (common.Address, error) { + return _Lending.Contract.XDCXListing(&_Lending.CallOpts) +} + +// XDCXListing is a free data retrieval call binding the contract method 0x29a4ddec. +// +// Solidity: function XDCXListing() constant returns(address) +func (_Lending *LendingCallerSession) XDCXListing() (common.Address, error) { + return _Lending.Contract.XDCXListing(&_Lending.CallOpts) +} + +// GetCollateralPrice is a free data retrieval call binding the contract method 0xf2dbd070. +// +// Solidity: function getCollateralPrice(token address, lendingToken address) constant returns(uint256, uint256) +func (_Lending *LendingCaller) GetCollateralPrice(opts *bind.CallOpts, token common.Address, lendingToken common.Address) (*big.Int, *big.Int, error) { + var ( + ret0 = new(*big.Int) + ret1 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + ret1, + } + err := _Lending.contract.Call(opts, out, "getCollateralPrice", token, lendingToken) + return *ret0, *ret1, err +} + +// GetCollateralPrice is a free data retrieval call binding the contract method 0xf2dbd070. +// +// Solidity: function getCollateralPrice(token address, lendingToken address) constant returns(uint256, uint256) +func (_Lending *LendingSession) GetCollateralPrice(token common.Address, lendingToken common.Address) (*big.Int, *big.Int, error) { + return _Lending.Contract.GetCollateralPrice(&_Lending.CallOpts, token, lendingToken) +} + +// GetCollateralPrice is a free data retrieval call binding the contract method 0xf2dbd070. +// +// Solidity: function getCollateralPrice(token address, lendingToken address) constant returns(uint256, uint256) +func (_Lending *LendingCallerSession) GetCollateralPrice(token common.Address, lendingToken common.Address) (*big.Int, *big.Int, error) { + return _Lending.Contract.GetCollateralPrice(&_Lending.CallOpts, token, lendingToken) +} + +// GetLendingRelayerByCoinbase is a free data retrieval call binding the contract method 0xfe824700. +// +// Solidity: function getLendingRelayerByCoinbase(coinbase address) constant returns(uint16, address[], uint256[], address[]) +func (_Lending *LendingCaller) GetLendingRelayerByCoinbase(opts *bind.CallOpts, coinbase common.Address) (uint16, []common.Address, []*big.Int, []common.Address, error) { + var ( + ret0 = new(uint16) + ret1 = new([]common.Address) + ret2 = new([]*big.Int) + ret3 = new([]common.Address) + ) + out := &[]interface{}{ + ret0, + ret1, + ret2, + ret3, + } + err := _Lending.contract.Call(opts, out, "getLendingRelayerByCoinbase", coinbase) + return *ret0, *ret1, *ret2, *ret3, err +} + +// GetLendingRelayerByCoinbase is a free data retrieval call binding the contract method 0xfe824700. +// +// Solidity: function getLendingRelayerByCoinbase(coinbase address) constant returns(uint16, address[], uint256[], address[]) +func (_Lending *LendingSession) GetLendingRelayerByCoinbase(coinbase common.Address) (uint16, []common.Address, []*big.Int, []common.Address, error) { + return _Lending.Contract.GetLendingRelayerByCoinbase(&_Lending.CallOpts, coinbase) +} + +// GetLendingRelayerByCoinbase is a free data retrieval call binding the contract method 0xfe824700. +// +// Solidity: function getLendingRelayerByCoinbase(coinbase address) constant returns(uint16, address[], uint256[], address[]) +func (_Lending *LendingCallerSession) GetLendingRelayerByCoinbase(coinbase common.Address) (uint16, []common.Address, []*big.Int, []common.Address, error) { + return _Lending.Contract.GetLendingRelayerByCoinbase(&_Lending.CallOpts, coinbase) +} + +// AddBaseToken is a paid mutator transaction binding the contract method 0x83e280d9. +// +// Solidity: function addBaseToken(token address) returns() +func (_Lending *LendingTransactor) AddBaseToken(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _Lending.contract.Transact(opts, "addBaseToken", token) +} + +// AddBaseToken is a paid mutator transaction binding the contract method 0x83e280d9. +// +// Solidity: function addBaseToken(token address) returns() +func (_Lending *LendingSession) AddBaseToken(token common.Address) (*types.Transaction, error) { + return _Lending.Contract.AddBaseToken(&_Lending.TransactOpts, token) +} + +// AddBaseToken is a paid mutator transaction binding the contract method 0x83e280d9. +// +// Solidity: function addBaseToken(token address) returns() +func (_Lending *LendingTransactorSession) AddBaseToken(token common.Address) (*types.Transaction, error) { + return _Lending.Contract.AddBaseToken(&_Lending.TransactOpts, token) +} + +// AddCollateral is a paid mutator transaction binding the contract method 0xe5eecf68. +// +// Solidity: function addCollateral(token address, depositRate uint256, liquidationRate uint256, recallRate uint256) returns() +func (_Lending *LendingTransactor) AddCollateral(opts *bind.TransactOpts, token common.Address, depositRate *big.Int, liquidationRate *big.Int, recallRate *big.Int) (*types.Transaction, error) { + return _Lending.contract.Transact(opts, "addCollateral", token, depositRate, liquidationRate, recallRate) +} + +// AddCollateral is a paid mutator transaction binding the contract method 0xe5eecf68. +// +// Solidity: function addCollateral(token address, depositRate uint256, liquidationRate uint256, recallRate uint256) returns() +func (_Lending *LendingSession) AddCollateral(token common.Address, depositRate *big.Int, liquidationRate *big.Int, recallRate *big.Int) (*types.Transaction, error) { + return _Lending.Contract.AddCollateral(&_Lending.TransactOpts, token, depositRate, liquidationRate, recallRate) +} + +// AddCollateral is a paid mutator transaction binding the contract method 0xe5eecf68. +// +// Solidity: function addCollateral(token address, depositRate uint256, liquidationRate uint256, recallRate uint256) returns() +func (_Lending *LendingTransactorSession) AddCollateral(token common.Address, depositRate *big.Int, liquidationRate *big.Int, recallRate *big.Int) (*types.Transaction, error) { + return _Lending.Contract.AddCollateral(&_Lending.TransactOpts, token, depositRate, liquidationRate, recallRate) +} + +// AddILOCollateral is a paid mutator transaction binding the contract method 0x3b874827. +// +// Solidity: function addILOCollateral(token address, depositRate uint256, liquidationRate uint256, recallRate uint256) returns() +func (_Lending *LendingTransactor) AddILOCollateral(opts *bind.TransactOpts, token common.Address, depositRate *big.Int, liquidationRate *big.Int, recallRate *big.Int) (*types.Transaction, error) { + return _Lending.contract.Transact(opts, "addILOCollateral", token, depositRate, liquidationRate, recallRate) +} + +// AddILOCollateral is a paid mutator transaction binding the contract method 0x3b874827. +// +// Solidity: function addILOCollateral(token address, depositRate uint256, liquidationRate uint256, recallRate uint256) returns() +func (_Lending *LendingSession) AddILOCollateral(token common.Address, depositRate *big.Int, liquidationRate *big.Int, recallRate *big.Int) (*types.Transaction, error) { + return _Lending.Contract.AddILOCollateral(&_Lending.TransactOpts, token, depositRate, liquidationRate, recallRate) +} + +// AddILOCollateral is a paid mutator transaction binding the contract method 0x3b874827. +// +// Solidity: function addILOCollateral(token address, depositRate uint256, liquidationRate uint256, recallRate uint256) returns() +func (_Lending *LendingTransactorSession) AddILOCollateral(token common.Address, depositRate *big.Int, liquidationRate *big.Int, recallRate *big.Int) (*types.Transaction, error) { + return _Lending.Contract.AddILOCollateral(&_Lending.TransactOpts, token, depositRate, liquidationRate, recallRate) +} + +// AddTerm is a paid mutator transaction binding the contract method 0x0c655955. +// +// Solidity: function addTerm(term uint256) returns() +func (_Lending *LendingTransactor) AddTerm(opts *bind.TransactOpts, term *big.Int) (*types.Transaction, error) { + return _Lending.contract.Transact(opts, "addTerm", term) +} + +// AddTerm is a paid mutator transaction binding the contract method 0x0c655955. +// +// Solidity: function addTerm(term uint256) returns() +func (_Lending *LendingSession) AddTerm(term *big.Int) (*types.Transaction, error) { + return _Lending.Contract.AddTerm(&_Lending.TransactOpts, term) +} + +// AddTerm is a paid mutator transaction binding the contract method 0x0c655955. +// +// Solidity: function addTerm(term uint256) returns() +func (_Lending *LendingTransactorSession) AddTerm(term *big.Int) (*types.Transaction, error) { + return _Lending.Contract.AddTerm(&_Lending.TransactOpts, term) +} + +// ChangeModerator is a paid mutator transaction binding the contract method 0x46642921. +// +// Solidity: function changeModerator(moderator address) returns() +func (_Lending *LendingTransactor) ChangeModerator(opts *bind.TransactOpts, moderator common.Address) (*types.Transaction, error) { + return _Lending.contract.Transact(opts, "changeModerator", moderator) +} + +// ChangeModerator is a paid mutator transaction binding the contract method 0x46642921. +// +// Solidity: function changeModerator(moderator address) returns() +func (_Lending *LendingSession) ChangeModerator(moderator common.Address) (*types.Transaction, error) { + return _Lending.Contract.ChangeModerator(&_Lending.TransactOpts, moderator) +} + +// ChangeModerator is a paid mutator transaction binding the contract method 0x46642921. +// +// Solidity: function changeModerator(moderator address) returns() +func (_Lending *LendingTransactorSession) ChangeModerator(moderator common.Address) (*types.Transaction, error) { + return _Lending.Contract.ChangeModerator(&_Lending.TransactOpts, moderator) +} + +// ChangeOraclePriceFeeder is a paid mutator transaction binding the contract method 0xc38f473f. +// +// Solidity: function changeOraclePriceFeeder(feeder address) returns() +func (_Lending *LendingTransactor) ChangeOraclePriceFeeder(opts *bind.TransactOpts, feeder common.Address) (*types.Transaction, error) { + return _Lending.contract.Transact(opts, "changeOraclePriceFeeder", feeder) +} + +// ChangeOraclePriceFeeder is a paid mutator transaction binding the contract method 0xc38f473f. +// +// Solidity: function changeOraclePriceFeeder(feeder address) returns() +func (_Lending *LendingSession) ChangeOraclePriceFeeder(feeder common.Address) (*types.Transaction, error) { + return _Lending.Contract.ChangeOraclePriceFeeder(&_Lending.TransactOpts, feeder) +} + +// ChangeOraclePriceFeeder is a paid mutator transaction binding the contract method 0xc38f473f. +// +// Solidity: function changeOraclePriceFeeder(feeder address) returns() +func (_Lending *LendingTransactorSession) ChangeOraclePriceFeeder(feeder common.Address) (*types.Transaction, error) { + return _Lending.Contract.ChangeOraclePriceFeeder(&_Lending.TransactOpts, feeder) +} + +// SetCollateralPrice is a paid mutator transaction binding the contract method 0xacb8cd92. +// +// Solidity: function setCollateralPrice(token address, lendingToken address, price uint256) returns() +func (_Lending *LendingTransactor) SetCollateralPrice(opts *bind.TransactOpts, token common.Address, lendingToken common.Address, price *big.Int) (*types.Transaction, error) { + return _Lending.contract.Transact(opts, "setCollateralPrice", token, lendingToken, price) +} + +// SetCollateralPrice is a paid mutator transaction binding the contract method 0xacb8cd92. +// +// Solidity: function setCollateralPrice(token address, lendingToken address, price uint256) returns() +func (_Lending *LendingSession) SetCollateralPrice(token common.Address, lendingToken common.Address, price *big.Int) (*types.Transaction, error) { + return _Lending.Contract.SetCollateralPrice(&_Lending.TransactOpts, token, lendingToken, price) +} + +// SetCollateralPrice is a paid mutator transaction binding the contract method 0xacb8cd92. +// +// Solidity: function setCollateralPrice(token address, lendingToken address, price uint256) returns() +func (_Lending *LendingTransactorSession) SetCollateralPrice(token common.Address, lendingToken common.Address, price *big.Int) (*types.Transaction, error) { + return _Lending.Contract.SetCollateralPrice(&_Lending.TransactOpts, token, lendingToken, price) +} + +// Update is a paid mutator transaction binding the contract method 0x2ddada4c. +// +// Solidity: function update(coinbase address, tradeFee uint16, baseTokens address[], terms uint256[], collaterals address[]) returns() +func (_Lending *LendingTransactor) Update(opts *bind.TransactOpts, coinbase common.Address, tradeFee uint16, baseTokens []common.Address, terms []*big.Int, collaterals []common.Address) (*types.Transaction, error) { + return _Lending.contract.Transact(opts, "update", coinbase, tradeFee, baseTokens, terms, collaterals) +} + +// Update is a paid mutator transaction binding the contract method 0x2ddada4c. +// +// Solidity: function update(coinbase address, tradeFee uint16, baseTokens address[], terms uint256[], collaterals address[]) returns() +func (_Lending *LendingSession) Update(coinbase common.Address, tradeFee uint16, baseTokens []common.Address, terms []*big.Int, collaterals []common.Address) (*types.Transaction, error) { + return _Lending.Contract.Update(&_Lending.TransactOpts, coinbase, tradeFee, baseTokens, terms, collaterals) +} + +// Update is a paid mutator transaction binding the contract method 0x2ddada4c. +// +// Solidity: function update(coinbase address, tradeFee uint16, baseTokens address[], terms uint256[], collaterals address[]) returns() +func (_Lending *LendingTransactorSession) Update(coinbase common.Address, tradeFee uint16, baseTokens []common.Address, terms []*big.Int, collaterals []common.Address) (*types.Transaction, error) { + return _Lending.Contract.Update(&_Lending.TransactOpts, coinbase, tradeFee, baseTokens, terms, collaterals) +} + +// UpdateFee is a paid mutator transaction binding the contract method 0x3ea2391f. +// +// Solidity: function updateFee(coinbase address, tradeFee uint16) returns() +func (_Lending *LendingTransactor) UpdateFee(opts *bind.TransactOpts, coinbase common.Address, tradeFee uint16) (*types.Transaction, error) { + return _Lending.contract.Transact(opts, "updateFee", coinbase, tradeFee) +} + +// UpdateFee is a paid mutator transaction binding the contract method 0x3ea2391f. +// +// Solidity: function updateFee(coinbase address, tradeFee uint16) returns() +func (_Lending *LendingSession) UpdateFee(coinbase common.Address, tradeFee uint16) (*types.Transaction, error) { + return _Lending.Contract.UpdateFee(&_Lending.TransactOpts, coinbase, tradeFee) +} + +// UpdateFee is a paid mutator transaction binding the contract method 0x3ea2391f. +// +// Solidity: function updateFee(coinbase address, tradeFee uint16) returns() +func (_Lending *LendingTransactorSession) UpdateFee(coinbase common.Address, tradeFee uint16) (*types.Transaction, error) { + return _Lending.Contract.UpdateFee(&_Lending.TransactOpts, coinbase, tradeFee) +} diff --git a/contracts/XDCx/contract/Registration.go b/contracts/XDCx/contract/Registration.go new file mode 100644 index 0000000000..9109707160 --- /dev/null +++ b/contracts/XDCx/contract/Registration.go @@ -0,0 +1,2275 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contract + +import ( + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// AbstractXDCXListingABI is the input ABI used to generate the binding from. +const AbstractXDCXListingABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"getTokenStatus\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]" + +// AbstractXDCXListingBin is the compiled bytecode used for deploying new contracts. +const AbstractXDCXListingBin = `0x` + +// DeployAbstractXDCXListing deploys a new Ethereum contract, binding an instance of AbstractXDCXListing to it. +func DeployAbstractXDCXListing(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *AbstractXDCXListing, error) { + parsed, err := abi.JSON(strings.NewReader(AbstractXDCXListingABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(AbstractXDCXListingBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &AbstractXDCXListing{AbstractXDCXListingCaller: AbstractXDCXListingCaller{contract: contract}, AbstractXDCXListingTransactor: AbstractXDCXListingTransactor{contract: contract}, AbstractXDCXListingFilterer: AbstractXDCXListingFilterer{contract: contract}}, nil +} + +// AbstractXDCXListing is an auto generated Go binding around an Ethereum contract. +type AbstractXDCXListing struct { + AbstractXDCXListingCaller // Read-only binding to the contract + AbstractXDCXListingTransactor // Write-only binding to the contract + AbstractXDCXListingFilterer // Log filterer for contract events +} + +// AbstractXDCXListingCaller is an auto generated read-only Go binding around an Ethereum contract. +type AbstractXDCXListingCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AbstractXDCXListingTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AbstractXDCXListingTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AbstractXDCXListingFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AbstractXDCXListingFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AbstractXDCXListingSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AbstractXDCXListingSession struct { + Contract *AbstractXDCXListing // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AbstractXDCXListingCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AbstractXDCXListingCallerSession struct { + Contract *AbstractXDCXListingCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AbstractXDCXListingTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AbstractXDCXListingTransactorSession struct { + Contract *AbstractXDCXListingTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AbstractXDCXListingRaw is an auto generated low-level Go binding around an Ethereum contract. +type AbstractXDCXListingRaw struct { + Contract *AbstractXDCXListing // Generic contract binding to access the raw methods on +} + +// AbstractXDCXListingCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AbstractXDCXListingCallerRaw struct { + Contract *AbstractXDCXListingCaller // Generic read-only contract binding to access the raw methods on +} + +// AbstractXDCXListingTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AbstractXDCXListingTransactorRaw struct { + Contract *AbstractXDCXListingTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewAbstractXDCXListing creates a new instance of AbstractXDCXListing, bound to a specific deployed contract. +func NewAbstractXDCXListing(address common.Address, backend bind.ContractBackend) (*AbstractXDCXListing, error) { + contract, err := bindAbstractXDCXListing(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &AbstractXDCXListing{AbstractXDCXListingCaller: AbstractXDCXListingCaller{contract: contract}, AbstractXDCXListingTransactor: AbstractXDCXListingTransactor{contract: contract}, AbstractXDCXListingFilterer: AbstractXDCXListingFilterer{contract: contract}}, nil +} + +// NewAbstractXDCXListingCaller creates a new read-only instance of AbstractXDCXListing, bound to a specific deployed contract. +func NewAbstractXDCXListingCaller(address common.Address, caller bind.ContractCaller) (*AbstractXDCXListingCaller, error) { + contract, err := bindAbstractXDCXListing(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AbstractXDCXListingCaller{contract: contract}, nil +} + +// NewAbstractXDCXListingTransactor creates a new write-only instance of AbstractXDCXListing, bound to a specific deployed contract. +func NewAbstractXDCXListingTransactor(address common.Address, transactor bind.ContractTransactor) (*AbstractXDCXListingTransactor, error) { + contract, err := bindAbstractXDCXListing(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AbstractXDCXListingTransactor{contract: contract}, nil +} + +// NewAbstractXDCXListingFilterer creates a new log filterer instance of AbstractXDCXListing, bound to a specific deployed contract. +func NewAbstractXDCXListingFilterer(address common.Address, filterer bind.ContractFilterer) (*AbstractXDCXListingFilterer, error) { + contract, err := bindAbstractXDCXListing(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AbstractXDCXListingFilterer{contract: contract}, nil +} + +// bindAbstractXDCXListing binds a generic wrapper to an already deployed contract. +func bindAbstractXDCXListing(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(AbstractXDCXListingABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AbstractXDCXListing *AbstractXDCXListingRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AbstractXDCXListing.Contract.AbstractXDCXListingCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AbstractXDCXListing *AbstractXDCXListingRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbstractXDCXListing.Contract.AbstractXDCXListingTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AbstractXDCXListing *AbstractXDCXListingRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AbstractXDCXListing.Contract.AbstractXDCXListingTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AbstractXDCXListing *AbstractXDCXListingCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AbstractXDCXListing.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AbstractXDCXListing *AbstractXDCXListingTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbstractXDCXListing.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AbstractXDCXListing *AbstractXDCXListingTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AbstractXDCXListing.Contract.contract.Transact(opts, method, params...) +} + +// GetTokenStatus is a free data retrieval call binding the contract method 0xa3ff31b5. +// +// Solidity: function getTokenStatus( address) constant returns(bool) +func (_AbstractXDCXListing *AbstractXDCXListingCaller) GetTokenStatus(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var ( + ret0 = new(bool) + ) + out := &[]interface{}{ + ret0, + } + err := _AbstractXDCXListing.contract.Call(opts, out, "getTokenStatus", arg0) + return *ret0, err +} + +// GetTokenStatus is a free data retrieval call binding the contract method 0xa3ff31b5. +// +// Solidity: function getTokenStatus( address) constant returns(bool) +func (_AbstractXDCXListing *AbstractXDCXListingSession) GetTokenStatus(arg0 common.Address) (bool, error) { + return _AbstractXDCXListing.Contract.GetTokenStatus(&_AbstractXDCXListing.CallOpts, arg0) +} + +// GetTokenStatus is a free data retrieval call binding the contract method 0xa3ff31b5. +// +// Solidity: function getTokenStatus( address) constant returns(bool) +func (_AbstractXDCXListing *AbstractXDCXListingCallerSession) GetTokenStatus(arg0 common.Address) (bool, error) { + return _AbstractXDCXListing.Contract.GetTokenStatus(&_AbstractXDCXListing.CallOpts, arg0) +} + +// RelayerRegistrationABI is the input ABI used to generate the binding from. +const RelayerRegistrationABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"coinbase\",\"type\":\"address\"},{\"name\":\"fromToken\",\"type\":\"address\"},{\"name\":\"toToken\",\"type\":\"address\"}],\"name\":\"listToken\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MaximumRelayers\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"coinbase\",\"type\":\"address\"},{\"name\":\"tradeFee\",\"type\":\"uint16\"}],\"name\":\"updateFee\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"changeContractOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"RELAYER_LIST\",\"outputs\":[{\"name\":\"_deposit\",\"type\":\"uint256\"},{\"name\":\"_tradeFee\",\"type\":\"uint16\"},{\"name\":\"_index\",\"type\":\"uint256\"},{\"name\":\"_owner\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"coinbase\",\"type\":\"address\"}],\"name\":\"depositMore\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"RELAYER_COINBASES\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"RESIGN_REQUESTS\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"coinbase\",\"type\":\"address\"}],\"name\":\"getRelayerByCoinbase\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint16\"},{\"name\":\"\",\"type\":\"address[]\"},{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"coinbase\",\"type\":\"address\"},{\"name\":\"tradeFee\",\"type\":\"uint16\"},{\"name\":\"fromTokens\",\"type\":\"address[]\"},{\"name\":\"toTokens\",\"type\":\"address[]\"}],\"name\":\"update\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"maxRelayer\",\"type\":\"uint256\"},{\"name\":\"maxToken\",\"type\":\"uint256\"},{\"name\":\"minDeposit\",\"type\":\"uint256\"}],\"name\":\"reconfigure\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"coinbase\",\"type\":\"address\"}],\"name\":\"cancelSelling\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ActiveRelayerCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"coinbase\",\"type\":\"address\"},{\"name\":\"fromToken\",\"type\":\"address\"},{\"name\":\"toToken\",\"type\":\"address\"}],\"name\":\"deListToken\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"coinbase\",\"type\":\"address\"},{\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"sellRelayer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"RelayerCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"RELAYER_ON_SALE_LIST\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"coinbase\",\"type\":\"address\"}],\"name\":\"resign\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"coinbase\",\"type\":\"address\"},{\"name\":\"new_owner\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MinimumDeposit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"coinbase\",\"type\":\"address\"},{\"name\":\"tradeFee\",\"type\":\"uint16\"},{\"name\":\"fromTokens\",\"type\":\"address[]\"},{\"name\":\"toTokens\",\"type\":\"address[]\"}],\"name\":\"register\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MaximumTokenList\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"coinbase\",\"type\":\"address\"}],\"name\":\"buyRelayer\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"coinbase\",\"type\":\"address\"}],\"name\":\"refund\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CONTRACT_OWNER\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"XDCxListing\",\"type\":\"address\"},{\"name\":\"maxRelayers\",\"type\":\"uint256\"},{\"name\":\"maxTokenList\",\"type\":\"uint256\"},{\"name\":\"minDeposit\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"max_relayer\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"max_token\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"min_deposit\",\"type\":\"uint256\"}],\"name\":\"ConfigEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"deposit\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"tradeFee\",\"type\":\"uint16\"},{\"indexed\":false,\"name\":\"fromTokens\",\"type\":\"address[]\"},{\"indexed\":false,\"name\":\"toTokens\",\"type\":\"address[]\"}],\"name\":\"RegisterEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"deposit\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"tradeFee\",\"type\":\"uint16\"},{\"indexed\":false,\"name\":\"fromTokens\",\"type\":\"address[]\"},{\"indexed\":false,\"name\":\"toTokens\",\"type\":\"address[]\"}],\"name\":\"UpdateEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"coinbase\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tradeFee\",\"type\":\"uint16\"}],\"name\":\"UpdateFeeEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"deposit\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"tradeFee\",\"type\":\"uint16\"},{\"indexed\":false,\"name\":\"fromTokens\",\"type\":\"address[]\"},{\"indexed\":false,\"name\":\"toTokens\",\"type\":\"address[]\"}],\"name\":\"TransferEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"deposit_release_time\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"deposit_amount\",\"type\":\"uint256\"}],\"name\":\"ResignEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"remaining_time\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"deposit_amount\",\"type\":\"uint256\"}],\"name\":\"RefundEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"is_on_sale\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"coinbase\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"SellEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"coinbase\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"BuyEvent\",\"type\":\"event\"}]" + +// RelayerRegistrationBin is the compiled bytecode used for deploying new contracts. +const RelayerRegistrationBin = `0x608060405234801561001057600080fd5b50604051608080613d298339810160409081528151602083015191830151606090930151600a8054600160a060020a03909316600160a060020a0319938416179055600060078190556009819055600193909355600293909355600892909255805490911633179055613ca1806100886000396000f30060806040526004361061012f5763ffffffff60e060020a60003504166308764b9d81146101345780630e5c0fee146101635780633ea2391f1461018a5780633ead67b5146101b257806349ba1f70146101d35780634ce69bf5146102265780634fa339271461023a578063500f99f71461026e578063540105c71461028f57806356246b681461037f57806357ea3c41146104235780635b673b1f14610441578063735db683146104625780637aa667301461047757806387c6bbcd146104a457806387d340ab146104c8578063885b7137146104dd578063ae6e43f5146104fe578063ba45b0b81461051f578063c635a9f214610546578063c6c71aed1461055b578063cfaece12146105f2578063e699df0e14610607578063fa89401a1461061b578063fd301c491461063c575b600080fd5b34801561014057600080fd5b50610161600160a060020a0360043581169060243581169060443516610651565b005b34801561016f57600080fd5b506101786109c1565b60408051918252519081900360200190f35b34801561019657600080fd5b50610161600160a060020a036004351661ffff602435166109c7565b3480156101be57600080fd5b50610161600160a060020a0360043516610bf0565b3480156101df57600080fd5b506101f4600160a060020a0360043516610c89565b6040805194855261ffff909316602085015283830191909152600160a060020a03166060830152519081900360800190f35b610161600160a060020a0360043516610cbe565b34801561024657600080fd5b50610252600435611010565b60408051600160a060020a039092168252519081900360200190f35b34801561027a57600080fd5b50610178600160a060020a036004351661102b565b34801561029b57600080fd5b506102b0600160a060020a036004351661103d565b6040518087815260200186600160a060020a0316600160a060020a031681526020018581526020018461ffff1661ffff1681526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561032657818101518382015260200161030e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561036557818101518382015260200161034d565b505050509050019850505050505050505060405180910390f35b34801561038b57600080fd5b506040805160206004604435818101358381028086018501909652808552610161958335600160a060020a0316956024803561ffff1696369695606495939492019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506111509650505050505050565b34801561042f57600080fd5b50610161600435602435604435611595565b34801561044d57600080fd5b50610161600160a060020a0360043516611684565b34801561046e57600080fd5b50610178611850565b34801561048357600080fd5b50610161600160a060020a0360043581169060243581169060443516611856565b3480156104b057600080fd5b50610161600160a060020a0360043516602435611b79565b3480156104d457600080fd5b50610178611d30565b3480156104e957600080fd5b50610178600160a060020a0360043516611d36565b34801561050a57600080fd5b50610161600160a060020a0360043516611d48565b34801561052b57600080fd5b50610161600160a060020a0360043581169060243516611f94565b34801561055257600080fd5b506101786122dc565b6040805160206004604435818101358381028086018501909652808552610161958335600160a060020a0316956024803561ffff1696369695606495939492019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506122e29650505050505050565b3480156105fe57600080fd5b5061017861299f565b610161600160a060020a03600435166129a5565b34801561062757600080fd5b50610161600160a060020a0360043516612c5e565b34801561064857600080fd5b50610252612f7b565b600160a060020a0383811660009081526003602052604090206005015484911633146106b5576040805160e560020a62461bcd0281526020600482015260136024820152600080516020613bb6833981519152604482015290519081900360640190fd5b600160a060020a038416600090815260056020526040902054849015610727576040805160e560020a62461bcd0281526020600482015260286024820152600080516020613bd68339815191526044820152600080516020613c36833981519152606482015290519081900360840190fd5b600160a060020a038516600090815260066020526040902054859015610799576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613bf68339815191526044820152600080516020613c56833981519152606482015290519081900360840190fd5b60028054600160a060020a0388166000908152600360205260409020909101541061080e576040805160e560020a62461bcd02815260206004820152601f60248201527f457863656564696e67206e756d626572206f6620747261646520706169727300604482015290519081900360640190fd5b610819868686612f8a565b1515600114610872576040805160e560020a62461bcd02815260206004820152600c60248201527f496e76616c696420706169720000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0380871660008181526003602081815260408084206002810180546001818101835582885285882090910180548f8b16600160a060020a031991821617909155958301805480830182558189528689200180549a8f169a909716999099179095559590945283549290930154835183815261ffff90911691810182905260809381018481528554948201859052600080516020613c168339815191529693959294929392606083019060a08401908690801561095e57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610940575b505083810382528481815481526020019150805480156109a757602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610989575b5050965050505050505060405180910390a1505050505050565b60015481565b600160a060020a038281166000908152600360205260409020600501548391163314610a2b576040805160e560020a62461bcd0281526020600482015260136024820152600080516020613bb6833981519152604482015290519081900360640190fd5b600160a060020a038316600090815260056020526040902054839015610a9d576040805160e560020a62461bcd0281526020600482015260286024820152600080516020613bd68339815191526044820152600080516020613c36833981519152606482015290519081900360840190fd5b600160a060020a038416600090815260066020526040902054849015610b0f576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613bf68339815191526044820152600080516020613c56833981519152606482015290519081900360840190fd5b60008461ffff1610158015610b2957506103e88461ffff16105b1515610b7f576040805160e560020a62461bcd02815260206004820152601160248201527f496e76616c6964204d616b657220466565000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038516600081815260036020908152604091829020600101805461ffff191661ffff89811691909117918290558351948552169083015280517f5a4f79c1a68f4f5ef7148ac4f279a5a6caeb3237082c64f692e92c9e02ffc4599281900390910190a15050505050565b600054600160a060020a03163314610c52576040805160e560020a62461bcd02815260206004820152601460248201527f436f6e7472616374204f776e6572204f6e6c792e000000000000000000000000604482015290519081900360640190fd5b600160a060020a0381161515610c6757600080fd5b60008054600160a060020a031916600160a060020a0392909216919091179055565b6003602052600090815260409020805460018201546004830154600590930154919261ffff90911691600160a060020a031684565b600160a060020a038181166000908152600360205260409020600501548291163314610d22576040805160e560020a62461bcd0281526020600482015260136024820152600080516020613bb6833981519152604482015290519081900360640190fd5b600160a060020a038216600090815260056020526040902054829015610d94576040805160e560020a62461bcd0281526020600482015260286024820152600080516020613bd68339815191526044820152600080516020613c36833981519152606482015290519081900360840190fd5b600160a060020a038316600090815260066020526040902054839015610e06576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613bf68339815191526044820152600080516020613c56833981519152606482015290519081900360840190fd5b60003411610e5e576040805160e560020a62461bcd02815260206004820152601a60248201527f5472616e736665722076616c7565206d757374206265203e2030000000000000604482015290519081900360640190fd5b670de0b6b3a7640000341015610ee4576040805160e560020a62461bcd02815260206004820152603160248201527f4174206c65617374203120544f4d4f20697320726571756972656420666f722060448201527f61206465706f7369742072657175657374000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a038416600090815260036020526040902054610f0d903463ffffffff61333c16565b600160a060020a0385166000908152600360208181526040928390208481556001810154845186815261ffff9091169281018390526080948101858152600283018054968301879052600080516020613c16833981519152979694959094930192606083019060a084019086908015610faf57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610f91575b50508381038252848181548152602001915080548015610ff857602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610fda575b5050965050505050505060405180910390a150505050565b600460205260009081526040902054600160a060020a031681565b60056020526000908152604090205481565b600160a060020a03808216600090815260036020818152604080842060048101546005820154825460018401546002850180548751818a0281018a01909852808852999a8b9a8b9a8b9a60609a8b9a989094169761ffff90961695909101929184918301828280156110d857602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116110ba575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561113457602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611116575b5050505050905095509550955095509550955091939550919395565b600160a060020a0384811660009081526003602052604090206005015485911633146111b4576040805160e560020a62461bcd0281526020600482015260136024820152600080516020613bb6833981519152604482015290519081900360640190fd5b600160a060020a038516600090815260056020526040902054859015611226576040805160e560020a62461bcd0281526020600482015260286024820152600080516020613bd68339815191526044820152600080516020613c36833981519152606482015290519081900360840190fd5b600160a060020a038616600090815260066020526040902054869015611298576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613bf68339815191526044820152600080516020613c56833981519152606482015290519081900360840190fd5b60008661ffff16101580156112b257506103e88661ffff16105b1515611308576040805160e560020a62461bcd02815260206004820152601160248201527f496e76616c6964204d616b657220466565000000000000000000000000000000604482015290519081900360640190fd5b60025485511115611363576040805160e560020a62461bcd02815260206004820152601f60248201527f457863656564696e67206e756d626572206f6620747261646520706169727300604482015290519081900360640190fd5b84518451146113bc576040805160e560020a62461bcd02815260206004820152601960248201527f4e6f742076616c6964206e756d626572206f6620506169727300000000000000604482015290519081900360640190fd5b6113c68585613359565b151560011461141f576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c69642071756f746520746f6b656e73000000000000000000000000604482015290519081900360640190fd5b600160a060020a038716600090815260036020908152604090912060018101805461ffff191661ffff8a16179055865161146192600290920191880190613aee565b50600160a060020a0387166000908152600360208181526040909220865161149193919092019190870190613aee565b50600160a060020a03871660009081526003602081815260409283902080546001820154855182815261ffff9091169381018490526080958101868152600284018054978301889052600080516020613c1683398151915297939690940192606083019060a08401908690801561153157602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611513575b5050838103825284818154815260200191508054801561157a57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161155c575b5050965050505050505060405180910390a150505050505050565b600054600160a060020a031633146115f7576040805160e560020a62461bcd02815260206004820152601460248201527f436f6e7472616374204f776e6572204f6e6c792e000000000000000000000000604482015290519081900360640190fd5b60095483101561160657600080fd5b60048211801561161757506103e982105b151561162257600080fd5b612710811161163057600080fd5b600183905560028290556008819055604080518481526020810184905280820183905290517f8f6bd709a98381db4e403a67ba106d598972dad177e946f19b54777f54d939239181900360600190a1505050565b600160a060020a0381811660009081526003602052604090206005015482911633146116e8576040805160e560020a62461bcd0281526020600482015260136024820152600080516020613bb6833981519152604482015290519081900360640190fd5b600160a060020a03821660009081526005602052604090205482901561175a576040805160e560020a62461bcd0281526020600482015260286024820152600080516020613bd68339815191526044820152600080516020613c36833981519152606482015290519081900360840190fd5b600160a060020a038316600090815260066020526040812054116117ee576040805160e560020a62461bcd02815260206004820152602160248201527f52656c61796572206973206e6f742063757272656e746c7920666f722073616c60448201527f6500000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03831660008181526006602090815260408083208390558051838152918201939093528083019190915290517fdb3d5e65fcde89731529c01d62b87bab1c64471cffdd528fc1adbc1712b5d0829181900360600190a1505050565b60095481565b600160a060020a03838116600090815260036020526040902060050154606091829186911633146118bf576040805160e560020a62461bcd0281526020600482015260136024820152600080516020613bb6833981519152604482015290519081900360640190fd5b600160a060020a038616600090815260056020526040902054869015611931576040805160e560020a62461bcd0281526020600482015260286024820152600080516020613bd68339815191526044820152600080516020613c36833981519152606482015290519081900360840190fd5b600160a060020a0387166000908152600660205260409020548790156119a3576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613bf68339815191526044820152600080516020613c56833981519152606482015290519081900360840190fd5b6119ae888888613718565b945094506119bc8585613359565b1515600114611a15576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c69642071756f746520746f6b656e73000000000000000000000000604482015290519081900360640190fd5b600160a060020a03881660009081526003602090815260409091208651611a4492600290920191880190613aee565b50600160a060020a03881660009081526003602081815260409092208651611a7493919092019190870190613aee565b50600160a060020a03881660009081526003602081815260409283902080546001820154855182815261ffff9091169381018490526080958101868152600284018054978301889052600080516020613c1683398151915297939690940192606083019060a084019086908015611b1457602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611af6575b50508381038252848181548152602001915080548015611b5d57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611b3f575b5050965050505050505060405180910390a15050505050505050565b600160a060020a038281166000908152600360205260409020600501548391163314611bdd576040805160e560020a62461bcd0281526020600482015260136024820152600080516020613bb6833981519152604482015290519081900360640190fd5b600160a060020a038316600090815260056020526040902054839015611c4f576040805160e560020a62461bcd0281526020600482015260286024820152600080516020613bd68339815191526044820152600080516020613c36833981519152606482015290519081900360840190fd5b60008311611ccd576040805160e560020a62461bcd02815260206004820152602860248201527f507269636520746167206d75737420626520646966666572656e74207468616e60448201527f205a65726f283029000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03841660008181526006602090815260409182902086905581516001815290810192909252818101859052517fdb3d5e65fcde89731529c01d62b87bab1c64471cffdd528fc1adbc1712b5d0829181900360600190a150505050565b60075481565b60066020526000908152604090205481565b600160a060020a038181166000908152600360205260409020600501548291163314611dac576040805160e560020a62461bcd0281526020600482015260136024820152600080516020613bb6833981519152604482015290519081900360640190fd5b600160a060020a038216600090815260066020526040902054829015611e1e576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613bf68339815191526044820152600080516020613c56833981519152606482015290519081900360840190fd5b600160a060020a03831660009081526003602052604081205411611eb2576040805160e560020a62461bcd02815260206004820152602760248201527f4e6f2072656c61796572206173736f636961746564207769746820746869732060448201527f6164647265737300000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03831660009081526005602052604090205415611f20576040805160e560020a62461bcd02815260206004820152601860248201527f5265717565737420616c72656164792072656365697665640000000000000000604482015290519081900360640190fd5b600160a060020a03831660009081526005602090815260408083206224ea0042018155600980546000190190555460038352928190205481519384529183019190915280517f2e821a4329d6351a6b13fe0c12fd7674cd0f4a2283685a4713e1325f36415ae59281900390910190a1505050565b600160a060020a038281166000908152600360205260409020600501548391163314611ff8576040805160e560020a62461bcd0281526020600482015260136024820152600080516020613bb6833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526005602052604090205483901561206a576040805160e560020a62461bcd0281526020600482015260286024820152600080516020613bd68339815191526044820152600080516020613c36833981519152606482015290519081900360840190fd5b600160a060020a0384166000908152600660205260409020548490156120dc576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613bf68339815191526044820152600080516020613c56833981519152606482015290519081900360840190fd5b600160a060020a038416158015906120fd5750600160a060020a0384163314155b151561210857600080fd5b600160a060020a0384811660009081526003602052604090206005015416156121a1576040805160e560020a62461bcd02815260206004820152603c60248201527f4f776e65722061646472657373206d757374206e6f742062652063757272656e60448201527f746c7920757365642061732072656c617965722d636f696e6261736500000000606482015290519081900360840190fd5b600160a060020a03858116600090815260036020818152604092839020600581018054600160a060020a0319168a871617908190558154600183015486519290971680835293820181905261ffff90961694810185905260a0606082018181526002840180549284018390527fc13ab794f75ba420a1f52192a8e35a2cf2c74ae31ed94f53f47ce7712011b66298959795969094019291608083019060c08401908690801561227957602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161225b575b505083810382528481815481526020019150805480156122c257602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116122a4575b505097505050505050505060405180910390a15050505050565b60085481565b600054600160a060020a031633141561236b576040805160e560020a62461bcd02815260206004820152602f60248201527f436f6e7472616374204f776e657220697320666f7262696464656e20746f206360448201527f726561746520612052656c617965720000000000000000000000000000000000606482015290519081900360840190fd5b33600160a060020a03851614156123f2576040805160e560020a62461bcd02815260206004820152603660248201527f436f696e6261736520616e642052656c617965724f776e65722061646472657360448201527f73206d757374206e6f74206265207468652073616d6500000000000000000000606482015290519081900360840190fd5b600054600160a060020a038581169116141561247e576040805160e560020a62461bcd02815260206004820152602b60248201527f436f696e62617365206d757374206e6f742062652073616d6520617320434f4e60448201527f54524143545f4f574e4552000000000000000000000000000000000000000000606482015290519081900360840190fd5b6008543410156124d8576040805160e560020a62461bcd02815260206004820152601e60248201527f4d696e696d756d206465706f736974206e6f74207361746973666965642e0000604482015290519081900360640190fd5b60008361ffff16101580156124f257506103e88361ffff16105b1515612548576040805160e560020a62461bcd02815260206004820152601160248201527f496e76616c6964204d616b657220466565000000000000000000000000000000604482015290519081900360640190fd5b600254825111156125a3576040805160e560020a62461bcd02815260206004820152601f60248201527f457863656564696e67206e756d626572206f6620747261646520706169727300604482015290519081900360640190fd5b81518151146125fc576040805160e560020a62461bcd02815260206004820152601960248201527f4e6f742076616c6964206e756d626572206f6620506169727300000000000000604482015290519081900360640190fd5b600160a060020a0384166000908152600360205260409020541561266a576040805160e560020a62461bcd02815260206004820152601c60248201527f436f696e6261736520616c726561647920726567697374657265642e00000000604482015290519081900360640190fd5b600160a060020a038416600090815260056020526040902054156126da576040805160e560020a62461bcd0281526020600482015260286024820152600080516020613bd68339815191526044820152600080516020613c36833981519152606482015290519081900360840190fd5b60015460095410612735576040805160e560020a62461bcd02815260206004820152601b60248201527f4d6178696d756d2072656c617965727320726567697374657265640000000000604482015290519081900360640190fd5b61273f8282613359565b1515600114612798576040805160e560020a62461bcd02815260206004820152601460248201527f496e76616c69642071756f746520746f6b656e73000000000000000000000000604482015290519081900360640190fd5b6007805460009081526004602090815260408083208054600160a060020a031916600160a060020a038a16908117909155815160c08101835234815261ffff8981168286019081528285018a8152606084018a9052975460808401523360a0840152928652600385529290942084518155905160018201805461ffff19169190931617909155925180519293926128359260028501920190613aee565b5060608201518051612851916003840191602090910190613aee565b50608082810151600483015560a09283015160059092018054600160a060020a031916600160a060020a039384161790556007805460019081019091556009805482019055918716600090815260036020818152604092839020805495810154845187815261ffff9091169281018390529384018581526002820180549686018790527fcf24380d990b0bb3dd21518926bca48f81495ac131ee92655696db28c43b1b1b9893969095929094019391929091606084019184019086908015610faf57602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610f915750508381038252848181548152602001915080548015610ff857602002820191906000526020600020908154600160a060020a03168152600190910190602001808311610fda575050965050505050505060405180910390a150505050565b60025481565b600160a060020a0381166000908152600560205260408120548190839015612a19576040805160e560020a62461bcd0281526020600482015260286024820152600080516020613bd68339815191526044820152600080516020613c36833981519152606482015290519081900360840190fd5b600160a060020a03841660009081526006602052604081205493508311612ab0576040805160e560020a62461bcd02815260206004820152602160248201527f52656c61796572206973206e6f742063757272656e746c7920666f722073616c60448201527f6500000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b348314612b07576040805160e560020a62461bcd02815260206004820152601960248201527f50726963652d746167206d757374206265206d61746368656400000000000000604482015290519081900360640190fd5b600160a060020a038085166000908152600360205260409020600501541691503315801590612b3f575033600160a060020a03831614155b8015612b535750600160a060020a03821615155b1515612ba9576040805160e560020a62461bcd02815260206004820152601160248201527f41646472657373206e6f742076616c6964000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0380851660009081526003602090815260408083206005018054600160a060020a031916331790556006909152808220829055519184169185156108fc0291869190818181858888f19350505050158015612c0f573d6000803e3d6000fd5b506040805160018152600160a060020a0386166020820152348183015290517f07e248a3b3d2184a9491c3b45089a6e15aac742b9d974e691e7beb0f6e7c58c69181900360600190a150505050565b600160a060020a038181166000908152600360205260408120600501549091829182918591163314612cc8576040805160e560020a62461bcd0281526020600482015260136024820152600080516020613bb6833981519152604482015290519081900360640190fd5b600160a060020a038516600090815260066020526040902054859015612d3a576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613bf68339815191526044820152600080516020613c56833981519152606482015290519081900360840190fd5b600160a060020a03861660009081526005602052604081205411612da8576040805160e560020a62461bcd02815260206004820152601160248201527f52657175657374206e6f7420666f756e64000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0386166000908152600360209081526040808320805460049091015460059093529220549196509450421115612f1657600160a060020a038616600090815260036020526040812081815560018101805461ffff1916905590612e156002830182613b53565b612e23600383016000613b53565b506000600482810182905560059283018054600160a060020a0319908116909155600160a060020a038a811684526020948552604080852085905560078054600019908101875285885282872080548087169091558c88528388208054919095169516851790935583865260039096528085209093018990558454019093555191945033916108fc88150291889190818181858888f19350505050158015612ecf573d6000803e3d6000fd5b5060408051600181526000602082015280820187905290517ffaba1aac53309af4c1c439f38c29500d3828405ee1ca5e7641b0432d17d302509181900360600190a1612f73565b600160a060020a038616600090815260056020908152604080832054815193845242900391830191909152818101879052517ffaba1aac53309af4c1c439f38c29500d3828405ee1ca5e7641b0432d17d302509181900360600190a15b505050505050565b600054600160a060020a031681565b600160a060020a0383166000908152600360208181526040808420909201548251600190910180825280830282019092019092528291606091839182918015612fdd578160200160208202803883390190505b50600a54604080517fa3ff31b5000000000000000000000000000000000000000000000000000000008152600160a060020a038a81166004830152915193965091169163a3ff31b5916024808201926020929091908290030181600087803b15801561304857600080fd5b505af115801561305c573d6000803e3d6000fd5b505050506040513d602081101561307257600080fd5b5051806130885750600160a060020a0386166001145b915081801561313a5750600a54604080517fa3ff31b5000000000000000000000000000000000000000000000000000000008152600160a060020a038a811660048301529151919092169163a3ff31b59160248083019260209291908290030181600087803b1580156130fa57600080fd5b505af115801561310e573d6000803e3d6000fd5b505050506040513d602081101561312457600080fd5b50518061313a5750600160a060020a0387166001145b915081151561314c5760009450613331565b600160a060020a0387166001148061316d5750600160a060020a0386166001145b1561317b5760019450613331565b5060005b600160a060020a0388166000908152600360208190526040909120015481101561331357600160a060020a038816600090815260036020819052604090912001805460019190839081106131cf57fe5b600091825260209091200154600160a060020a0316141561325957600160a060020a038816600090815260036020526040902060020180548290811061321157fe5b6000918252602090912001548351600160a060020a039091169084908690811061323757fe5b600160a060020a0390921660209283029091019091015260019093019261330b565b600160a060020a03881660009081526003602052604090206002018054600191908390811061328457fe5b600091825260209091200154600160a060020a0316141561330b57600160a060020a0388166000908152600360208190526040909120018054829081106132c757fe5b6000918252602090912001548351600160a060020a03909116908490869081106132ed57fe5b600160a060020a039092166020928302909101909101526001909301925b60010161317f565b61331d8387613a95565b151561332c5760009450613331565b600194505b505050509392505050565b60008282018381101561334e57600080fd5b8091505b5092915050565b60008060006060806000806000809650600095508951604051908082528060200260200182016040528015613398578160200160208202803883390190505b50945089516040519080825280602002602001820160405280156133c6578160200160208202803883390190505b509350600092505b88518310156136c257600a548951600160a060020a039091169063a3ff31b5908b90869081106133fa57fe5b906020019060200201516040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561344f57600080fd5b505af1158015613463573d6000803e3d6000fd5b505050506040513d602081101561347957600080fd5b5051806134a7575088516001908a908590811061349257fe5b90602001906020020151600160a060020a0316145b91508180156135815750600a548a51600160a060020a039091169063a3ff31b5908c90869081106134d457fe5b906020019060200201516040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561352957600080fd5b505af115801561353d573d6000803e3d6000fd5b505050506040513d602081101561355357600080fd5b505180613581575089516001908b908590811061356c57fe5b90602001906020020151600160a060020a0316145b9150811515613593576000975061370b565b88516001908a90859081106135a457fe5b90602001906020020151600160a060020a031614156136055789838151811015156135cb57fe5b9060200190602002015185888151811015156135e357fe5b600160a060020a039092166020928302909101909101526001909601956136b7565b89516001908b908590811061361657fe5b90602001906020020151600160a060020a0316141561367357888381518110151561363d57fe5b90602001906020020151858881518110151561365557fe5b600160a060020a039092166020928302909101909101526001909601955b888381518110151561368157fe5b90602001906020020151848781518110151561369957fe5b600160a060020a039092166020928302909101909101526001909501945b6001909201916133ce565b5060005b85811015613706576136ef8585838151811015156136e057fe5b90602001906020020151613a95565b15156136fe576000975061370b565b6001016136c6565b600197505b5050505050505092915050565b6060806060806000806060806000600360008d600160a060020a0316600160a060020a031681526020019081526020016000206003018054905060405190808252806020026020018201604052801561377b578160200160208202803883390190505b50600160a060020a038d16600090815260036020818152604092839020909101548251818152818302810190920190925291985080156137c5578160200160208202803883390190505b50955060009450600093505b600160a060020a038c166000908152600360208190526040909120015484101561395c57600160a060020a038c81166000908152600360208190526040909120018054918c16918690811061382257fe5b600091825260209091200154600160a060020a03161415806138835750600160a060020a038c811660009081526003602052604090206002018054918d16918690811061386b57fe5b600091825260209091200154600160a060020a031614155b1561395157600160a060020a038c1660009081526003602052604090206002018054859081106138af57fe5b6000918252602090912001548751600160a060020a03909116908890879081106138d557fe5b600160a060020a039283166020918202909201810191909152908d166000908152600391829052604090200180548590811061390d57fe5b6000918252602090912001548651600160a060020a039091169087908790811061393357fe5b600160a060020a039092166020928302909101909101526001909401935b6001909301926137d1565b600160a060020a038c16600090815260036020819052604090912001548514613a7f5760018651036040519080825280602002602001820160405280156139ad578160200160208202803883390190505b50925060018651036040519080825280602002602001820160405280156139de578160200160208202803883390190505b509150600090505b6001865103811015613a74578681815181101515613a0057fe5b906020019060200201518382815181101515613a1857fe5b600160a060020a039092166020928302909101909101528551869082908110613a3d57fe5b906020019060200201518282815181101515613a5557fe5b600160a060020a039092166020928302909101909101526001016139e6565b828298509850613a86565b8686985098505b50505050505050935093915050565b6000805b8351811015613ae45782600160a060020a03168482815181101515613aba57fe5b90602001906020020151600160a060020a03161415613adc5760019150613352565b600101613a99565b5060009392505050565b828054828255906000526020600020908101928215613b43579160200282015b82811115613b435782518254600160a060020a031916600160a060020a03909116178255602090920191600190910190613b0e565b50613b4f929150613b74565b5090565b5080546000825590600052602060002090810190613b719190613b9b565b50565b613b9891905b80821115613b4f578054600160a060020a0319168155600101613b7a565b90565b613b9891905b80821115613b4f5760008155600101613ba1560052656c61796572204f776e6572204f6e6c792e000000000000000000000000005468652072656c6179657220686173206265656e2072657175657374656420745468652072656c61796572206d757374206265206e6f742063757272656e746ccaa8c94daf6ecfd00518cea95158f5273730574cca907eb0cd47e50732314c4f6f20636c6f73652e0000000000000000000000000000000000000000000000007920666f722053616c6500000000000000000000000000000000000000000000a165627a7a723058207d9c49eecfd59b2ae9911da7296be4a9f5e5d938cbf3dfb6327f454bc1c46a4f0029` + +// DeployRelayerRegistration deploys a new Ethereum contract, binding an instance of RelayerRegistration to it. +func DeployRelayerRegistration(auth *bind.TransactOpts, backend bind.ContractBackend, XDCxListing common.Address, maxRelayers *big.Int, maxTokenList *big.Int, minDeposit *big.Int) (common.Address, *types.Transaction, *RelayerRegistration, error) { + parsed, err := abi.JSON(strings.NewReader(RelayerRegistrationABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(RelayerRegistrationBin), backend, XDCxListing, maxRelayers, maxTokenList, minDeposit) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &RelayerRegistration{RelayerRegistrationCaller: RelayerRegistrationCaller{contract: contract}, RelayerRegistrationTransactor: RelayerRegistrationTransactor{contract: contract}, RelayerRegistrationFilterer: RelayerRegistrationFilterer{contract: contract}}, nil +} + +// RelayerRegistration is an auto generated Go binding around an Ethereum contract. +type RelayerRegistration struct { + RelayerRegistrationCaller // Read-only binding to the contract + RelayerRegistrationTransactor // Write-only binding to the contract + RelayerRegistrationFilterer // Log filterer for contract events +} + +// RelayerRegistrationCaller is an auto generated read-only Go binding around an Ethereum contract. +type RelayerRegistrationCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// RelayerRegistrationTransactor is an auto generated write-only Go binding around an Ethereum contract. +type RelayerRegistrationTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// RelayerRegistrationFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type RelayerRegistrationFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// RelayerRegistrationSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type RelayerRegistrationSession struct { + Contract *RelayerRegistration // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// RelayerRegistrationCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type RelayerRegistrationCallerSession struct { + Contract *RelayerRegistrationCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// RelayerRegistrationTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type RelayerRegistrationTransactorSession struct { + Contract *RelayerRegistrationTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// RelayerRegistrationRaw is an auto generated low-level Go binding around an Ethereum contract. +type RelayerRegistrationRaw struct { + Contract *RelayerRegistration // Generic contract binding to access the raw methods on +} + +// RelayerRegistrationCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type RelayerRegistrationCallerRaw struct { + Contract *RelayerRegistrationCaller // Generic read-only contract binding to access the raw methods on +} + +// RelayerRegistrationTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type RelayerRegistrationTransactorRaw struct { + Contract *RelayerRegistrationTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewRelayerRegistration creates a new instance of RelayerRegistration, bound to a specific deployed contract. +func NewRelayerRegistration(address common.Address, backend bind.ContractBackend) (*RelayerRegistration, error) { + contract, err := bindRelayerRegistration(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &RelayerRegistration{RelayerRegistrationCaller: RelayerRegistrationCaller{contract: contract}, RelayerRegistrationTransactor: RelayerRegistrationTransactor{contract: contract}, RelayerRegistrationFilterer: RelayerRegistrationFilterer{contract: contract}}, nil +} + +// NewRelayerRegistrationCaller creates a new read-only instance of RelayerRegistration, bound to a specific deployed contract. +func NewRelayerRegistrationCaller(address common.Address, caller bind.ContractCaller) (*RelayerRegistrationCaller, error) { + contract, err := bindRelayerRegistration(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &RelayerRegistrationCaller{contract: contract}, nil +} + +// NewRelayerRegistrationTransactor creates a new write-only instance of RelayerRegistration, bound to a specific deployed contract. +func NewRelayerRegistrationTransactor(address common.Address, transactor bind.ContractTransactor) (*RelayerRegistrationTransactor, error) { + contract, err := bindRelayerRegistration(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &RelayerRegistrationTransactor{contract: contract}, nil +} + +// NewRelayerRegistrationFilterer creates a new log filterer instance of RelayerRegistration, bound to a specific deployed contract. +func NewRelayerRegistrationFilterer(address common.Address, filterer bind.ContractFilterer) (*RelayerRegistrationFilterer, error) { + contract, err := bindRelayerRegistration(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &RelayerRegistrationFilterer{contract: contract}, nil +} + +// bindRelayerRegistration binds a generic wrapper to an already deployed contract. +func bindRelayerRegistration(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(RelayerRegistrationABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_RelayerRegistration *RelayerRegistrationRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _RelayerRegistration.Contract.RelayerRegistrationCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_RelayerRegistration *RelayerRegistrationRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RelayerRegistration.Contract.RelayerRegistrationTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_RelayerRegistration *RelayerRegistrationRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _RelayerRegistration.Contract.RelayerRegistrationTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_RelayerRegistration *RelayerRegistrationCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _RelayerRegistration.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_RelayerRegistration *RelayerRegistrationTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RelayerRegistration.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_RelayerRegistration *RelayerRegistrationTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _RelayerRegistration.Contract.contract.Transact(opts, method, params...) +} + +// ActiveRelayerCount is a free data retrieval call binding the contract method 0x735db683. +// +// Solidity: function ActiveRelayerCount() constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationCaller) ActiveRelayerCount(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _RelayerRegistration.contract.Call(opts, out, "ActiveRelayerCount") + return *ret0, err +} + +// ActiveRelayerCount is a free data retrieval call binding the contract method 0x735db683. +// +// Solidity: function ActiveRelayerCount() constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationSession) ActiveRelayerCount() (*big.Int, error) { + return _RelayerRegistration.Contract.ActiveRelayerCount(&_RelayerRegistration.CallOpts) +} + +// ActiveRelayerCount is a free data retrieval call binding the contract method 0x735db683. +// +// Solidity: function ActiveRelayerCount() constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationCallerSession) ActiveRelayerCount() (*big.Int, error) { + return _RelayerRegistration.Contract.ActiveRelayerCount(&_RelayerRegistration.CallOpts) +} + +// CONTRACTOWNER is a free data retrieval call binding the contract method 0xfd301c49. +// +// Solidity: function CONTRACT_OWNER() constant returns(address) +func (_RelayerRegistration *RelayerRegistrationCaller) CONTRACTOWNER(opts *bind.CallOpts) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _RelayerRegistration.contract.Call(opts, out, "CONTRACT_OWNER") + return *ret0, err +} + +// CONTRACTOWNER is a free data retrieval call binding the contract method 0xfd301c49. +// +// Solidity: function CONTRACT_OWNER() constant returns(address) +func (_RelayerRegistration *RelayerRegistrationSession) CONTRACTOWNER() (common.Address, error) { + return _RelayerRegistration.Contract.CONTRACTOWNER(&_RelayerRegistration.CallOpts) +} + +// CONTRACTOWNER is a free data retrieval call binding the contract method 0xfd301c49. +// +// Solidity: function CONTRACT_OWNER() constant returns(address) +func (_RelayerRegistration *RelayerRegistrationCallerSession) CONTRACTOWNER() (common.Address, error) { + return _RelayerRegistration.Contract.CONTRACTOWNER(&_RelayerRegistration.CallOpts) +} + +// MaximumRelayers is a free data retrieval call binding the contract method 0x0e5c0fee. +// +// Solidity: function MaximumRelayers() constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationCaller) MaximumRelayers(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _RelayerRegistration.contract.Call(opts, out, "MaximumRelayers") + return *ret0, err +} + +// MaximumRelayers is a free data retrieval call binding the contract method 0x0e5c0fee. +// +// Solidity: function MaximumRelayers() constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationSession) MaximumRelayers() (*big.Int, error) { + return _RelayerRegistration.Contract.MaximumRelayers(&_RelayerRegistration.CallOpts) +} + +// MaximumRelayers is a free data retrieval call binding the contract method 0x0e5c0fee. +// +// Solidity: function MaximumRelayers() constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationCallerSession) MaximumRelayers() (*big.Int, error) { + return _RelayerRegistration.Contract.MaximumRelayers(&_RelayerRegistration.CallOpts) +} + +// MaximumTokenList is a free data retrieval call binding the contract method 0xcfaece12. +// +// Solidity: function MaximumTokenList() constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationCaller) MaximumTokenList(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _RelayerRegistration.contract.Call(opts, out, "MaximumTokenList") + return *ret0, err +} + +// MaximumTokenList is a free data retrieval call binding the contract method 0xcfaece12. +// +// Solidity: function MaximumTokenList() constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationSession) MaximumTokenList() (*big.Int, error) { + return _RelayerRegistration.Contract.MaximumTokenList(&_RelayerRegistration.CallOpts) +} + +// MaximumTokenList is a free data retrieval call binding the contract method 0xcfaece12. +// +// Solidity: function MaximumTokenList() constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationCallerSession) MaximumTokenList() (*big.Int, error) { + return _RelayerRegistration.Contract.MaximumTokenList(&_RelayerRegistration.CallOpts) +} + +// MinimumDeposit is a free data retrieval call binding the contract method 0xc635a9f2. +// +// Solidity: function MinimumDeposit() constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationCaller) MinimumDeposit(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _RelayerRegistration.contract.Call(opts, out, "MinimumDeposit") + return *ret0, err +} + +// MinimumDeposit is a free data retrieval call binding the contract method 0xc635a9f2. +// +// Solidity: function MinimumDeposit() constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationSession) MinimumDeposit() (*big.Int, error) { + return _RelayerRegistration.Contract.MinimumDeposit(&_RelayerRegistration.CallOpts) +} + +// MinimumDeposit is a free data retrieval call binding the contract method 0xc635a9f2. +// +// Solidity: function MinimumDeposit() constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationCallerSession) MinimumDeposit() (*big.Int, error) { + return _RelayerRegistration.Contract.MinimumDeposit(&_RelayerRegistration.CallOpts) +} + +// RELAYERCOINBASES is a free data retrieval call binding the contract method 0x4fa33927. +// +// Solidity: function RELAYER_COINBASES( uint256) constant returns(address) +func (_RelayerRegistration *RelayerRegistrationCaller) RELAYERCOINBASES(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _RelayerRegistration.contract.Call(opts, out, "RELAYER_COINBASES", arg0) + return *ret0, err +} + +// RELAYERCOINBASES is a free data retrieval call binding the contract method 0x4fa33927. +// +// Solidity: function RELAYER_COINBASES( uint256) constant returns(address) +func (_RelayerRegistration *RelayerRegistrationSession) RELAYERCOINBASES(arg0 *big.Int) (common.Address, error) { + return _RelayerRegistration.Contract.RELAYERCOINBASES(&_RelayerRegistration.CallOpts, arg0) +} + +// RELAYERCOINBASES is a free data retrieval call binding the contract method 0x4fa33927. +// +// Solidity: function RELAYER_COINBASES( uint256) constant returns(address) +func (_RelayerRegistration *RelayerRegistrationCallerSession) RELAYERCOINBASES(arg0 *big.Int) (common.Address, error) { + return _RelayerRegistration.Contract.RELAYERCOINBASES(&_RelayerRegistration.CallOpts, arg0) +} + +// RELAYERLIST is a free data retrieval call binding the contract method 0x49ba1f70. +// +// Solidity: function RELAYER_LIST( address) constant returns(_deposit uint256, _tradeFee uint16, _index uint256, _owner address) +func (_RelayerRegistration *RelayerRegistrationCaller) RELAYERLIST(opts *bind.CallOpts, arg0 common.Address) (struct { + Deposit *big.Int + TradeFee uint16 + Index *big.Int + Owner common.Address +}, error) { + ret := new(struct { + Deposit *big.Int + TradeFee uint16 + Index *big.Int + Owner common.Address + }) + out := &[]interface{}{ + ret, + } + err := _RelayerRegistration.contract.Call(opts, out, "RELAYER_LIST", arg0) + return *ret, err +} + +// RELAYERLIST is a free data retrieval call binding the contract method 0x49ba1f70. +// +// Solidity: function RELAYER_LIST( address) constant returns(_deposit uint256, _tradeFee uint16, _index uint256, _owner address) +func (_RelayerRegistration *RelayerRegistrationSession) RELAYERLIST(arg0 common.Address) (struct { + Deposit *big.Int + TradeFee uint16 + Index *big.Int + Owner common.Address +}, error) { + return _RelayerRegistration.Contract.RELAYERLIST(&_RelayerRegistration.CallOpts, arg0) +} + +// RELAYERLIST is a free data retrieval call binding the contract method 0x49ba1f70. +// +// Solidity: function RELAYER_LIST( address) constant returns(_deposit uint256, _tradeFee uint16, _index uint256, _owner address) +func (_RelayerRegistration *RelayerRegistrationCallerSession) RELAYERLIST(arg0 common.Address) (struct { + Deposit *big.Int + TradeFee uint16 + Index *big.Int + Owner common.Address +}, error) { + return _RelayerRegistration.Contract.RELAYERLIST(&_RelayerRegistration.CallOpts, arg0) +} + +// RELAYERONSALELIST is a free data retrieval call binding the contract method 0x885b7137. +// +// Solidity: function RELAYER_ON_SALE_LIST( address) constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationCaller) RELAYERONSALELIST(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _RelayerRegistration.contract.Call(opts, out, "RELAYER_ON_SALE_LIST", arg0) + return *ret0, err +} + +// RELAYERONSALELIST is a free data retrieval call binding the contract method 0x885b7137. +// +// Solidity: function RELAYER_ON_SALE_LIST( address) constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationSession) RELAYERONSALELIST(arg0 common.Address) (*big.Int, error) { + return _RelayerRegistration.Contract.RELAYERONSALELIST(&_RelayerRegistration.CallOpts, arg0) +} + +// RELAYERONSALELIST is a free data retrieval call binding the contract method 0x885b7137. +// +// Solidity: function RELAYER_ON_SALE_LIST( address) constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationCallerSession) RELAYERONSALELIST(arg0 common.Address) (*big.Int, error) { + return _RelayerRegistration.Contract.RELAYERONSALELIST(&_RelayerRegistration.CallOpts, arg0) +} + +// RESIGNREQUESTS is a free data retrieval call binding the contract method 0x500f99f7. +// +// Solidity: function RESIGN_REQUESTS( address) constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationCaller) RESIGNREQUESTS(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _RelayerRegistration.contract.Call(opts, out, "RESIGN_REQUESTS", arg0) + return *ret0, err +} + +// RESIGNREQUESTS is a free data retrieval call binding the contract method 0x500f99f7. +// +// Solidity: function RESIGN_REQUESTS( address) constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationSession) RESIGNREQUESTS(arg0 common.Address) (*big.Int, error) { + return _RelayerRegistration.Contract.RESIGNREQUESTS(&_RelayerRegistration.CallOpts, arg0) +} + +// RESIGNREQUESTS is a free data retrieval call binding the contract method 0x500f99f7. +// +// Solidity: function RESIGN_REQUESTS( address) constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationCallerSession) RESIGNREQUESTS(arg0 common.Address) (*big.Int, error) { + return _RelayerRegistration.Contract.RESIGNREQUESTS(&_RelayerRegistration.CallOpts, arg0) +} + +// RelayerCount is a free data retrieval call binding the contract method 0x87d340ab. +// +// Solidity: function RelayerCount() constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationCaller) RelayerCount(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _RelayerRegistration.contract.Call(opts, out, "RelayerCount") + return *ret0, err +} + +// RelayerCount is a free data retrieval call binding the contract method 0x87d340ab. +// +// Solidity: function RelayerCount() constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationSession) RelayerCount() (*big.Int, error) { + return _RelayerRegistration.Contract.RelayerCount(&_RelayerRegistration.CallOpts) +} + +// RelayerCount is a free data retrieval call binding the contract method 0x87d340ab. +// +// Solidity: function RelayerCount() constant returns(uint256) +func (_RelayerRegistration *RelayerRegistrationCallerSession) RelayerCount() (*big.Int, error) { + return _RelayerRegistration.Contract.RelayerCount(&_RelayerRegistration.CallOpts) +} + +// GetRelayerByCoinbase is a free data retrieval call binding the contract method 0x540105c7. +// +// Solidity: function getRelayerByCoinbase(coinbase address) constant returns(uint256, address, uint256, uint16, address[], address[]) +func (_RelayerRegistration *RelayerRegistrationCaller) GetRelayerByCoinbase(opts *bind.CallOpts, coinbase common.Address) (*big.Int, common.Address, *big.Int, uint16, []common.Address, []common.Address, error) { + var ( + ret0 = new(*big.Int) + ret1 = new(common.Address) + ret2 = new(*big.Int) + ret3 = new(uint16) + ret4 = new([]common.Address) + ret5 = new([]common.Address) + ) + out := &[]interface{}{ + ret0, + ret1, + ret2, + ret3, + ret4, + ret5, + } + err := _RelayerRegistration.contract.Call(opts, out, "getRelayerByCoinbase", coinbase) + return *ret0, *ret1, *ret2, *ret3, *ret4, *ret5, err +} + +// GetRelayerByCoinbase is a free data retrieval call binding the contract method 0x540105c7. +// +// Solidity: function getRelayerByCoinbase(coinbase address) constant returns(uint256, address, uint256, uint16, address[], address[]) +func (_RelayerRegistration *RelayerRegistrationSession) GetRelayerByCoinbase(coinbase common.Address) (*big.Int, common.Address, *big.Int, uint16, []common.Address, []common.Address, error) { + return _RelayerRegistration.Contract.GetRelayerByCoinbase(&_RelayerRegistration.CallOpts, coinbase) +} + +// GetRelayerByCoinbase is a free data retrieval call binding the contract method 0x540105c7. +// +// Solidity: function getRelayerByCoinbase(coinbase address) constant returns(uint256, address, uint256, uint16, address[], address[]) +func (_RelayerRegistration *RelayerRegistrationCallerSession) GetRelayerByCoinbase(coinbase common.Address) (*big.Int, common.Address, *big.Int, uint16, []common.Address, []common.Address, error) { + return _RelayerRegistration.Contract.GetRelayerByCoinbase(&_RelayerRegistration.CallOpts, coinbase) +} + +// BuyRelayer is a paid mutator transaction binding the contract method 0xe699df0e. +// +// Solidity: function buyRelayer(coinbase address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactor) BuyRelayer(opts *bind.TransactOpts, coinbase common.Address) (*types.Transaction, error) { + return _RelayerRegistration.contract.Transact(opts, "buyRelayer", coinbase) +} + +// BuyRelayer is a paid mutator transaction binding the contract method 0xe699df0e. +// +// Solidity: function buyRelayer(coinbase address) returns() +func (_RelayerRegistration *RelayerRegistrationSession) BuyRelayer(coinbase common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.BuyRelayer(&_RelayerRegistration.TransactOpts, coinbase) +} + +// BuyRelayer is a paid mutator transaction binding the contract method 0xe699df0e. +// +// Solidity: function buyRelayer(coinbase address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactorSession) BuyRelayer(coinbase common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.BuyRelayer(&_RelayerRegistration.TransactOpts, coinbase) +} + +// CancelSelling is a paid mutator transaction binding the contract method 0x5b673b1f. +// +// Solidity: function cancelSelling(coinbase address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactor) CancelSelling(opts *bind.TransactOpts, coinbase common.Address) (*types.Transaction, error) { + return _RelayerRegistration.contract.Transact(opts, "cancelSelling", coinbase) +} + +// CancelSelling is a paid mutator transaction binding the contract method 0x5b673b1f. +// +// Solidity: function cancelSelling(coinbase address) returns() +func (_RelayerRegistration *RelayerRegistrationSession) CancelSelling(coinbase common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.CancelSelling(&_RelayerRegistration.TransactOpts, coinbase) +} + +// CancelSelling is a paid mutator transaction binding the contract method 0x5b673b1f. +// +// Solidity: function cancelSelling(coinbase address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactorSession) CancelSelling(coinbase common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.CancelSelling(&_RelayerRegistration.TransactOpts, coinbase) +} + +// ChangeContractOwner is a paid mutator transaction binding the contract method 0x3ead67b5. +// +// Solidity: function changeContractOwner(owner address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactor) ChangeContractOwner(opts *bind.TransactOpts, owner common.Address) (*types.Transaction, error) { + return _RelayerRegistration.contract.Transact(opts, "changeContractOwner", owner) +} + +// ChangeContractOwner is a paid mutator transaction binding the contract method 0x3ead67b5. +// +// Solidity: function changeContractOwner(owner address) returns() +func (_RelayerRegistration *RelayerRegistrationSession) ChangeContractOwner(owner common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.ChangeContractOwner(&_RelayerRegistration.TransactOpts, owner) +} + +// ChangeContractOwner is a paid mutator transaction binding the contract method 0x3ead67b5. +// +// Solidity: function changeContractOwner(owner address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactorSession) ChangeContractOwner(owner common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.ChangeContractOwner(&_RelayerRegistration.TransactOpts, owner) +} + +// DeListToken is a paid mutator transaction binding the contract method 0x7aa66730. +// +// Solidity: function deListToken(coinbase address, fromToken address, toToken address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactor) DeListToken(opts *bind.TransactOpts, coinbase common.Address, fromToken common.Address, toToken common.Address) (*types.Transaction, error) { + return _RelayerRegistration.contract.Transact(opts, "deListToken", coinbase, fromToken, toToken) +} + +// DeListToken is a paid mutator transaction binding the contract method 0x7aa66730. +// +// Solidity: function deListToken(coinbase address, fromToken address, toToken address) returns() +func (_RelayerRegistration *RelayerRegistrationSession) DeListToken(coinbase common.Address, fromToken common.Address, toToken common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.DeListToken(&_RelayerRegistration.TransactOpts, coinbase, fromToken, toToken) +} + +// DeListToken is a paid mutator transaction binding the contract method 0x7aa66730. +// +// Solidity: function deListToken(coinbase address, fromToken address, toToken address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactorSession) DeListToken(coinbase common.Address, fromToken common.Address, toToken common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.DeListToken(&_RelayerRegistration.TransactOpts, coinbase, fromToken, toToken) +} + +// DepositMore is a paid mutator transaction binding the contract method 0x4ce69bf5. +// +// Solidity: function depositMore(coinbase address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactor) DepositMore(opts *bind.TransactOpts, coinbase common.Address) (*types.Transaction, error) { + return _RelayerRegistration.contract.Transact(opts, "depositMore", coinbase) +} + +// DepositMore is a paid mutator transaction binding the contract method 0x4ce69bf5. +// +// Solidity: function depositMore(coinbase address) returns() +func (_RelayerRegistration *RelayerRegistrationSession) DepositMore(coinbase common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.DepositMore(&_RelayerRegistration.TransactOpts, coinbase) +} + +// DepositMore is a paid mutator transaction binding the contract method 0x4ce69bf5. +// +// Solidity: function depositMore(coinbase address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactorSession) DepositMore(coinbase common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.DepositMore(&_RelayerRegistration.TransactOpts, coinbase) +} + +// ListToken is a paid mutator transaction binding the contract method 0x08764b9d. +// +// Solidity: function listToken(coinbase address, fromToken address, toToken address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactor) ListToken(opts *bind.TransactOpts, coinbase common.Address, fromToken common.Address, toToken common.Address) (*types.Transaction, error) { + return _RelayerRegistration.contract.Transact(opts, "listToken", coinbase, fromToken, toToken) +} + +// ListToken is a paid mutator transaction binding the contract method 0x08764b9d. +// +// Solidity: function listToken(coinbase address, fromToken address, toToken address) returns() +func (_RelayerRegistration *RelayerRegistrationSession) ListToken(coinbase common.Address, fromToken common.Address, toToken common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.ListToken(&_RelayerRegistration.TransactOpts, coinbase, fromToken, toToken) +} + +// ListToken is a paid mutator transaction binding the contract method 0x08764b9d. +// +// Solidity: function listToken(coinbase address, fromToken address, toToken address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactorSession) ListToken(coinbase common.Address, fromToken common.Address, toToken common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.ListToken(&_RelayerRegistration.TransactOpts, coinbase, fromToken, toToken) +} + +// Reconfigure is a paid mutator transaction binding the contract method 0x57ea3c41. +// +// Solidity: function reconfigure(maxRelayer uint256, maxToken uint256, minDeposit uint256) returns() +func (_RelayerRegistration *RelayerRegistrationTransactor) Reconfigure(opts *bind.TransactOpts, maxRelayer *big.Int, maxToken *big.Int, minDeposit *big.Int) (*types.Transaction, error) { + return _RelayerRegistration.contract.Transact(opts, "reconfigure", maxRelayer, maxToken, minDeposit) +} + +// Reconfigure is a paid mutator transaction binding the contract method 0x57ea3c41. +// +// Solidity: function reconfigure(maxRelayer uint256, maxToken uint256, minDeposit uint256) returns() +func (_RelayerRegistration *RelayerRegistrationSession) Reconfigure(maxRelayer *big.Int, maxToken *big.Int, minDeposit *big.Int) (*types.Transaction, error) { + return _RelayerRegistration.Contract.Reconfigure(&_RelayerRegistration.TransactOpts, maxRelayer, maxToken, minDeposit) +} + +// Reconfigure is a paid mutator transaction binding the contract method 0x57ea3c41. +// +// Solidity: function reconfigure(maxRelayer uint256, maxToken uint256, minDeposit uint256) returns() +func (_RelayerRegistration *RelayerRegistrationTransactorSession) Reconfigure(maxRelayer *big.Int, maxToken *big.Int, minDeposit *big.Int) (*types.Transaction, error) { + return _RelayerRegistration.Contract.Reconfigure(&_RelayerRegistration.TransactOpts, maxRelayer, maxToken, minDeposit) +} + +// Refund is a paid mutator transaction binding the contract method 0xfa89401a. +// +// Solidity: function refund(coinbase address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactor) Refund(opts *bind.TransactOpts, coinbase common.Address) (*types.Transaction, error) { + return _RelayerRegistration.contract.Transact(opts, "refund", coinbase) +} + +// Refund is a paid mutator transaction binding the contract method 0xfa89401a. +// +// Solidity: function refund(coinbase address) returns() +func (_RelayerRegistration *RelayerRegistrationSession) Refund(coinbase common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.Refund(&_RelayerRegistration.TransactOpts, coinbase) +} + +// Refund is a paid mutator transaction binding the contract method 0xfa89401a. +// +// Solidity: function refund(coinbase address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactorSession) Refund(coinbase common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.Refund(&_RelayerRegistration.TransactOpts, coinbase) +} + +// Register is a paid mutator transaction binding the contract method 0xc6c71aed. +// +// Solidity: function register(coinbase address, tradeFee uint16, fromTokens address[], toTokens address[]) returns() +func (_RelayerRegistration *RelayerRegistrationTransactor) Register(opts *bind.TransactOpts, coinbase common.Address, tradeFee uint16, fromTokens []common.Address, toTokens []common.Address) (*types.Transaction, error) { + return _RelayerRegistration.contract.Transact(opts, "register", coinbase, tradeFee, fromTokens, toTokens) +} + +// Register is a paid mutator transaction binding the contract method 0xc6c71aed. +// +// Solidity: function register(coinbase address, tradeFee uint16, fromTokens address[], toTokens address[]) returns() +func (_RelayerRegistration *RelayerRegistrationSession) Register(coinbase common.Address, tradeFee uint16, fromTokens []common.Address, toTokens []common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.Register(&_RelayerRegistration.TransactOpts, coinbase, tradeFee, fromTokens, toTokens) +} + +// Register is a paid mutator transaction binding the contract method 0xc6c71aed. +// +// Solidity: function register(coinbase address, tradeFee uint16, fromTokens address[], toTokens address[]) returns() +func (_RelayerRegistration *RelayerRegistrationTransactorSession) Register(coinbase common.Address, tradeFee uint16, fromTokens []common.Address, toTokens []common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.Register(&_RelayerRegistration.TransactOpts, coinbase, tradeFee, fromTokens, toTokens) +} + +// Resign is a paid mutator transaction binding the contract method 0xae6e43f5. +// +// Solidity: function resign(coinbase address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactor) Resign(opts *bind.TransactOpts, coinbase common.Address) (*types.Transaction, error) { + return _RelayerRegistration.contract.Transact(opts, "resign", coinbase) +} + +// Resign is a paid mutator transaction binding the contract method 0xae6e43f5. +// +// Solidity: function resign(coinbase address) returns() +func (_RelayerRegistration *RelayerRegistrationSession) Resign(coinbase common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.Resign(&_RelayerRegistration.TransactOpts, coinbase) +} + +// Resign is a paid mutator transaction binding the contract method 0xae6e43f5. +// +// Solidity: function resign(coinbase address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactorSession) Resign(coinbase common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.Resign(&_RelayerRegistration.TransactOpts, coinbase) +} + +// SellRelayer is a paid mutator transaction binding the contract method 0x87c6bbcd. +// +// Solidity: function sellRelayer(coinbase address, price uint256) returns() +func (_RelayerRegistration *RelayerRegistrationTransactor) SellRelayer(opts *bind.TransactOpts, coinbase common.Address, price *big.Int) (*types.Transaction, error) { + return _RelayerRegistration.contract.Transact(opts, "sellRelayer", coinbase, price) +} + +// SellRelayer is a paid mutator transaction binding the contract method 0x87c6bbcd. +// +// Solidity: function sellRelayer(coinbase address, price uint256) returns() +func (_RelayerRegistration *RelayerRegistrationSession) SellRelayer(coinbase common.Address, price *big.Int) (*types.Transaction, error) { + return _RelayerRegistration.Contract.SellRelayer(&_RelayerRegistration.TransactOpts, coinbase, price) +} + +// SellRelayer is a paid mutator transaction binding the contract method 0x87c6bbcd. +// +// Solidity: function sellRelayer(coinbase address, price uint256) returns() +func (_RelayerRegistration *RelayerRegistrationTransactorSession) SellRelayer(coinbase common.Address, price *big.Int) (*types.Transaction, error) { + return _RelayerRegistration.Contract.SellRelayer(&_RelayerRegistration.TransactOpts, coinbase, price) +} + +// Transfer is a paid mutator transaction binding the contract method 0xba45b0b8. +// +// Solidity: function transfer(coinbase address, new_owner address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactor) Transfer(opts *bind.TransactOpts, coinbase common.Address, new_owner common.Address) (*types.Transaction, error) { + return _RelayerRegistration.contract.Transact(opts, "transfer", coinbase, new_owner) +} + +// Transfer is a paid mutator transaction binding the contract method 0xba45b0b8. +// +// Solidity: function transfer(coinbase address, new_owner address) returns() +func (_RelayerRegistration *RelayerRegistrationSession) Transfer(coinbase common.Address, new_owner common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.Transfer(&_RelayerRegistration.TransactOpts, coinbase, new_owner) +} + +// Transfer is a paid mutator transaction binding the contract method 0xba45b0b8. +// +// Solidity: function transfer(coinbase address, new_owner address) returns() +func (_RelayerRegistration *RelayerRegistrationTransactorSession) Transfer(coinbase common.Address, new_owner common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.Transfer(&_RelayerRegistration.TransactOpts, coinbase, new_owner) +} + +// Update is a paid mutator transaction binding the contract method 0x56246b68. +// +// Solidity: function update(coinbase address, tradeFee uint16, fromTokens address[], toTokens address[]) returns() +func (_RelayerRegistration *RelayerRegistrationTransactor) Update(opts *bind.TransactOpts, coinbase common.Address, tradeFee uint16, fromTokens []common.Address, toTokens []common.Address) (*types.Transaction, error) { + return _RelayerRegistration.contract.Transact(opts, "update", coinbase, tradeFee, fromTokens, toTokens) +} + +// Update is a paid mutator transaction binding the contract method 0x56246b68. +// +// Solidity: function update(coinbase address, tradeFee uint16, fromTokens address[], toTokens address[]) returns() +func (_RelayerRegistration *RelayerRegistrationSession) Update(coinbase common.Address, tradeFee uint16, fromTokens []common.Address, toTokens []common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.Update(&_RelayerRegistration.TransactOpts, coinbase, tradeFee, fromTokens, toTokens) +} + +// Update is a paid mutator transaction binding the contract method 0x56246b68. +// +// Solidity: function update(coinbase address, tradeFee uint16, fromTokens address[], toTokens address[]) returns() +func (_RelayerRegistration *RelayerRegistrationTransactorSession) Update(coinbase common.Address, tradeFee uint16, fromTokens []common.Address, toTokens []common.Address) (*types.Transaction, error) { + return _RelayerRegistration.Contract.Update(&_RelayerRegistration.TransactOpts, coinbase, tradeFee, fromTokens, toTokens) +} + +// UpdateFee is a paid mutator transaction binding the contract method 0x3ea2391f. +// +// Solidity: function updateFee(coinbase address, tradeFee uint16) returns() +func (_RelayerRegistration *RelayerRegistrationTransactor) UpdateFee(opts *bind.TransactOpts, coinbase common.Address, tradeFee uint16) (*types.Transaction, error) { + return _RelayerRegistration.contract.Transact(opts, "updateFee", coinbase, tradeFee) +} + +// UpdateFee is a paid mutator transaction binding the contract method 0x3ea2391f. +// +// Solidity: function updateFee(coinbase address, tradeFee uint16) returns() +func (_RelayerRegistration *RelayerRegistrationSession) UpdateFee(coinbase common.Address, tradeFee uint16) (*types.Transaction, error) { + return _RelayerRegistration.Contract.UpdateFee(&_RelayerRegistration.TransactOpts, coinbase, tradeFee) +} + +// UpdateFee is a paid mutator transaction binding the contract method 0x3ea2391f. +// +// Solidity: function updateFee(coinbase address, tradeFee uint16) returns() +func (_RelayerRegistration *RelayerRegistrationTransactorSession) UpdateFee(coinbase common.Address, tradeFee uint16) (*types.Transaction, error) { + return _RelayerRegistration.Contract.UpdateFee(&_RelayerRegistration.TransactOpts, coinbase, tradeFee) +} + +// RelayerRegistrationBuyEventIterator is returned from FilterBuyEvent and is used to iterate over the raw logs and unpacked data for BuyEvent events raised by the RelayerRegistration contract. +type RelayerRegistrationBuyEventIterator struct { + Event *RelayerRegistrationBuyEvent // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *RelayerRegistrationBuyEventIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationBuyEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationBuyEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *RelayerRegistrationBuyEventIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RelayerRegistrationBuyEventIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RelayerRegistrationBuyEvent represents a BuyEvent event raised by the RelayerRegistration contract. +type RelayerRegistrationBuyEvent struct { + Success bool + Coinbase common.Address + Price *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterBuyEvent is a free log retrieval operation binding the contract event 0x07e248a3b3d2184a9491c3b45089a6e15aac742b9d974e691e7beb0f6e7c58c6. +// +// Solidity: event BuyEvent(success bool, coinbase address, price uint256) +func (_RelayerRegistration *RelayerRegistrationFilterer) FilterBuyEvent(opts *bind.FilterOpts) (*RelayerRegistrationBuyEventIterator, error) { + + logs, sub, err := _RelayerRegistration.contract.FilterLogs(opts, "BuyEvent") + if err != nil { + return nil, err + } + return &RelayerRegistrationBuyEventIterator{contract: _RelayerRegistration.contract, event: "BuyEvent", logs: logs, sub: sub}, nil +} + +// WatchBuyEvent is a free log subscription operation binding the contract event 0x07e248a3b3d2184a9491c3b45089a6e15aac742b9d974e691e7beb0f6e7c58c6. +// +// Solidity: event BuyEvent(success bool, coinbase address, price uint256) +func (_RelayerRegistration *RelayerRegistrationFilterer) WatchBuyEvent(opts *bind.WatchOpts, sink chan<- *RelayerRegistrationBuyEvent) (event.Subscription, error) { + + logs, sub, err := _RelayerRegistration.contract.WatchLogs(opts, "BuyEvent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(RelayerRegistrationBuyEvent) + if err := _RelayerRegistration.contract.UnpackLog(event, "BuyEvent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// RelayerRegistrationConfigEventIterator is returned from FilterConfigEvent and is used to iterate over the raw logs and unpacked data for ConfigEvent events raised by the RelayerRegistration contract. +type RelayerRegistrationConfigEventIterator struct { + Event *RelayerRegistrationConfigEvent // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *RelayerRegistrationConfigEventIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationConfigEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationConfigEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *RelayerRegistrationConfigEventIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RelayerRegistrationConfigEventIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RelayerRegistrationConfigEvent represents a ConfigEvent event raised by the RelayerRegistration contract. +type RelayerRegistrationConfigEvent struct { + MaxRelayer *big.Int + MaxToken *big.Int + MinDeposit *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterConfigEvent is a free log retrieval operation binding the contract event 0x8f6bd709a98381db4e403a67ba106d598972dad177e946f19b54777f54d93923. +// +// Solidity: event ConfigEvent(max_relayer uint256, max_token uint256, min_deposit uint256) +func (_RelayerRegistration *RelayerRegistrationFilterer) FilterConfigEvent(opts *bind.FilterOpts) (*RelayerRegistrationConfigEventIterator, error) { + + logs, sub, err := _RelayerRegistration.contract.FilterLogs(opts, "ConfigEvent") + if err != nil { + return nil, err + } + return &RelayerRegistrationConfigEventIterator{contract: _RelayerRegistration.contract, event: "ConfigEvent", logs: logs, sub: sub}, nil +} + +// WatchConfigEvent is a free log subscription operation binding the contract event 0x8f6bd709a98381db4e403a67ba106d598972dad177e946f19b54777f54d93923. +// +// Solidity: event ConfigEvent(max_relayer uint256, max_token uint256, min_deposit uint256) +func (_RelayerRegistration *RelayerRegistrationFilterer) WatchConfigEvent(opts *bind.WatchOpts, sink chan<- *RelayerRegistrationConfigEvent) (event.Subscription, error) { + + logs, sub, err := _RelayerRegistration.contract.WatchLogs(opts, "ConfigEvent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(RelayerRegistrationConfigEvent) + if err := _RelayerRegistration.contract.UnpackLog(event, "ConfigEvent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// RelayerRegistrationRefundEventIterator is returned from FilterRefundEvent and is used to iterate over the raw logs and unpacked data for RefundEvent events raised by the RelayerRegistration contract. +type RelayerRegistrationRefundEventIterator struct { + Event *RelayerRegistrationRefundEvent // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *RelayerRegistrationRefundEventIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationRefundEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationRefundEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *RelayerRegistrationRefundEventIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RelayerRegistrationRefundEventIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RelayerRegistrationRefundEvent represents a RefundEvent event raised by the RelayerRegistration contract. +type RelayerRegistrationRefundEvent struct { + Success bool + RemainingTime *big.Int + DepositAmount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRefundEvent is a free log retrieval operation binding the contract event 0xfaba1aac53309af4c1c439f38c29500d3828405ee1ca5e7641b0432d17d30250. +// +// Solidity: event RefundEvent(success bool, remaining_time uint256, deposit_amount uint256) +func (_RelayerRegistration *RelayerRegistrationFilterer) FilterRefundEvent(opts *bind.FilterOpts) (*RelayerRegistrationRefundEventIterator, error) { + + logs, sub, err := _RelayerRegistration.contract.FilterLogs(opts, "RefundEvent") + if err != nil { + return nil, err + } + return &RelayerRegistrationRefundEventIterator{contract: _RelayerRegistration.contract, event: "RefundEvent", logs: logs, sub: sub}, nil +} + +// WatchRefundEvent is a free log subscription operation binding the contract event 0xfaba1aac53309af4c1c439f38c29500d3828405ee1ca5e7641b0432d17d30250. +// +// Solidity: event RefundEvent(success bool, remaining_time uint256, deposit_amount uint256) +func (_RelayerRegistration *RelayerRegistrationFilterer) WatchRefundEvent(opts *bind.WatchOpts, sink chan<- *RelayerRegistrationRefundEvent) (event.Subscription, error) { + + logs, sub, err := _RelayerRegistration.contract.WatchLogs(opts, "RefundEvent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(RelayerRegistrationRefundEvent) + if err := _RelayerRegistration.contract.UnpackLog(event, "RefundEvent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// RelayerRegistrationRegisterEventIterator is returned from FilterRegisterEvent and is used to iterate over the raw logs and unpacked data for RegisterEvent events raised by the RelayerRegistration contract. +type RelayerRegistrationRegisterEventIterator struct { + Event *RelayerRegistrationRegisterEvent // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *RelayerRegistrationRegisterEventIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationRegisterEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationRegisterEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *RelayerRegistrationRegisterEventIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RelayerRegistrationRegisterEventIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RelayerRegistrationRegisterEvent represents a RegisterEvent event raised by the RelayerRegistration contract. +type RelayerRegistrationRegisterEvent struct { + Deposit *big.Int + TradeFee uint16 + FromTokens []common.Address + ToTokens []common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRegisterEvent is a free log retrieval operation binding the contract event 0xcf24380d990b0bb3dd21518926bca48f81495ac131ee92655696db28c43b1b1b. +// +// Solidity: event RegisterEvent(deposit uint256, tradeFee uint16, fromTokens address[], toTokens address[]) +func (_RelayerRegistration *RelayerRegistrationFilterer) FilterRegisterEvent(opts *bind.FilterOpts) (*RelayerRegistrationRegisterEventIterator, error) { + + logs, sub, err := _RelayerRegistration.contract.FilterLogs(opts, "RegisterEvent") + if err != nil { + return nil, err + } + return &RelayerRegistrationRegisterEventIterator{contract: _RelayerRegistration.contract, event: "RegisterEvent", logs: logs, sub: sub}, nil +} + +// WatchRegisterEvent is a free log subscription operation binding the contract event 0xcf24380d990b0bb3dd21518926bca48f81495ac131ee92655696db28c43b1b1b. +// +// Solidity: event RegisterEvent(deposit uint256, tradeFee uint16, fromTokens address[], toTokens address[]) +func (_RelayerRegistration *RelayerRegistrationFilterer) WatchRegisterEvent(opts *bind.WatchOpts, sink chan<- *RelayerRegistrationRegisterEvent) (event.Subscription, error) { + + logs, sub, err := _RelayerRegistration.contract.WatchLogs(opts, "RegisterEvent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(RelayerRegistrationRegisterEvent) + if err := _RelayerRegistration.contract.UnpackLog(event, "RegisterEvent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// RelayerRegistrationResignEventIterator is returned from FilterResignEvent and is used to iterate over the raw logs and unpacked data for ResignEvent events raised by the RelayerRegistration contract. +type RelayerRegistrationResignEventIterator struct { + Event *RelayerRegistrationResignEvent // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *RelayerRegistrationResignEventIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationResignEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationResignEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *RelayerRegistrationResignEventIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RelayerRegistrationResignEventIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RelayerRegistrationResignEvent represents a ResignEvent event raised by the RelayerRegistration contract. +type RelayerRegistrationResignEvent struct { + DepositReleaseTime *big.Int + DepositAmount *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterResignEvent is a free log retrieval operation binding the contract event 0x2e821a4329d6351a6b13fe0c12fd7674cd0f4a2283685a4713e1325f36415ae5. +// +// Solidity: event ResignEvent(deposit_release_time uint256, deposit_amount uint256) +func (_RelayerRegistration *RelayerRegistrationFilterer) FilterResignEvent(opts *bind.FilterOpts) (*RelayerRegistrationResignEventIterator, error) { + + logs, sub, err := _RelayerRegistration.contract.FilterLogs(opts, "ResignEvent") + if err != nil { + return nil, err + } + return &RelayerRegistrationResignEventIterator{contract: _RelayerRegistration.contract, event: "ResignEvent", logs: logs, sub: sub}, nil +} + +// WatchResignEvent is a free log subscription operation binding the contract event 0x2e821a4329d6351a6b13fe0c12fd7674cd0f4a2283685a4713e1325f36415ae5. +// +// Solidity: event ResignEvent(deposit_release_time uint256, deposit_amount uint256) +func (_RelayerRegistration *RelayerRegistrationFilterer) WatchResignEvent(opts *bind.WatchOpts, sink chan<- *RelayerRegistrationResignEvent) (event.Subscription, error) { + + logs, sub, err := _RelayerRegistration.contract.WatchLogs(opts, "ResignEvent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(RelayerRegistrationResignEvent) + if err := _RelayerRegistration.contract.UnpackLog(event, "ResignEvent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// RelayerRegistrationSellEventIterator is returned from FilterSellEvent and is used to iterate over the raw logs and unpacked data for SellEvent events raised by the RelayerRegistration contract. +type RelayerRegistrationSellEventIterator struct { + Event *RelayerRegistrationSellEvent // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *RelayerRegistrationSellEventIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationSellEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationSellEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *RelayerRegistrationSellEventIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RelayerRegistrationSellEventIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RelayerRegistrationSellEvent represents a SellEvent event raised by the RelayerRegistration contract. +type RelayerRegistrationSellEvent struct { + IsOnSale bool + Coinbase common.Address + Price *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSellEvent is a free log retrieval operation binding the contract event 0xdb3d5e65fcde89731529c01d62b87bab1c64471cffdd528fc1adbc1712b5d082. +// +// Solidity: event SellEvent(is_on_sale bool, coinbase address, price uint256) +func (_RelayerRegistration *RelayerRegistrationFilterer) FilterSellEvent(opts *bind.FilterOpts) (*RelayerRegistrationSellEventIterator, error) { + + logs, sub, err := _RelayerRegistration.contract.FilterLogs(opts, "SellEvent") + if err != nil { + return nil, err + } + return &RelayerRegistrationSellEventIterator{contract: _RelayerRegistration.contract, event: "SellEvent", logs: logs, sub: sub}, nil +} + +// WatchSellEvent is a free log subscription operation binding the contract event 0xdb3d5e65fcde89731529c01d62b87bab1c64471cffdd528fc1adbc1712b5d082. +// +// Solidity: event SellEvent(is_on_sale bool, coinbase address, price uint256) +func (_RelayerRegistration *RelayerRegistrationFilterer) WatchSellEvent(opts *bind.WatchOpts, sink chan<- *RelayerRegistrationSellEvent) (event.Subscription, error) { + + logs, sub, err := _RelayerRegistration.contract.WatchLogs(opts, "SellEvent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(RelayerRegistrationSellEvent) + if err := _RelayerRegistration.contract.UnpackLog(event, "SellEvent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// RelayerRegistrationTransferEventIterator is returned from FilterTransferEvent and is used to iterate over the raw logs and unpacked data for TransferEvent events raised by the RelayerRegistration contract. +type RelayerRegistrationTransferEventIterator struct { + Event *RelayerRegistrationTransferEvent // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *RelayerRegistrationTransferEventIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationTransferEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationTransferEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *RelayerRegistrationTransferEventIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RelayerRegistrationTransferEventIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RelayerRegistrationTransferEvent represents a TransferEvent event raised by the RelayerRegistration contract. +type RelayerRegistrationTransferEvent struct { + Owner common.Address + Deposit *big.Int + TradeFee uint16 + FromTokens []common.Address + ToTokens []common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransferEvent is a free log retrieval operation binding the contract event 0xc13ab794f75ba420a1f52192a8e35a2cf2c74ae31ed94f53f47ce7712011b662. +// +// Solidity: event TransferEvent(owner address, deposit uint256, tradeFee uint16, fromTokens address[], toTokens address[]) +func (_RelayerRegistration *RelayerRegistrationFilterer) FilterTransferEvent(opts *bind.FilterOpts) (*RelayerRegistrationTransferEventIterator, error) { + + logs, sub, err := _RelayerRegistration.contract.FilterLogs(opts, "TransferEvent") + if err != nil { + return nil, err + } + return &RelayerRegistrationTransferEventIterator{contract: _RelayerRegistration.contract, event: "TransferEvent", logs: logs, sub: sub}, nil +} + +// WatchTransferEvent is a free log subscription operation binding the contract event 0xc13ab794f75ba420a1f52192a8e35a2cf2c74ae31ed94f53f47ce7712011b662. +// +// Solidity: event TransferEvent(owner address, deposit uint256, tradeFee uint16, fromTokens address[], toTokens address[]) +func (_RelayerRegistration *RelayerRegistrationFilterer) WatchTransferEvent(opts *bind.WatchOpts, sink chan<- *RelayerRegistrationTransferEvent) (event.Subscription, error) { + + logs, sub, err := _RelayerRegistration.contract.WatchLogs(opts, "TransferEvent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(RelayerRegistrationTransferEvent) + if err := _RelayerRegistration.contract.UnpackLog(event, "TransferEvent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// RelayerRegistrationUpdateEventIterator is returned from FilterUpdateEvent and is used to iterate over the raw logs and unpacked data for UpdateEvent events raised by the RelayerRegistration contract. +type RelayerRegistrationUpdateEventIterator struct { + Event *RelayerRegistrationUpdateEvent // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *RelayerRegistrationUpdateEventIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationUpdateEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationUpdateEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *RelayerRegistrationUpdateEventIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RelayerRegistrationUpdateEventIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RelayerRegistrationUpdateEvent represents a UpdateEvent event raised by the RelayerRegistration contract. +type RelayerRegistrationUpdateEvent struct { + Deposit *big.Int + TradeFee uint16 + FromTokens []common.Address + ToTokens []common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdateEvent is a free log retrieval operation binding the contract event 0xcaa8c94daf6ecfd00518cea95158f5273730574cca907eb0cd47e50732314c4f. +// +// Solidity: event UpdateEvent(deposit uint256, tradeFee uint16, fromTokens address[], toTokens address[]) +func (_RelayerRegistration *RelayerRegistrationFilterer) FilterUpdateEvent(opts *bind.FilterOpts) (*RelayerRegistrationUpdateEventIterator, error) { + + logs, sub, err := _RelayerRegistration.contract.FilterLogs(opts, "UpdateEvent") + if err != nil { + return nil, err + } + return &RelayerRegistrationUpdateEventIterator{contract: _RelayerRegistration.contract, event: "UpdateEvent", logs: logs, sub: sub}, nil +} + +// WatchUpdateEvent is a free log subscription operation binding the contract event 0xcaa8c94daf6ecfd00518cea95158f5273730574cca907eb0cd47e50732314c4f. +// +// Solidity: event UpdateEvent(deposit uint256, tradeFee uint16, fromTokens address[], toTokens address[]) +func (_RelayerRegistration *RelayerRegistrationFilterer) WatchUpdateEvent(opts *bind.WatchOpts, sink chan<- *RelayerRegistrationUpdateEvent) (event.Subscription, error) { + + logs, sub, err := _RelayerRegistration.contract.WatchLogs(opts, "UpdateEvent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(RelayerRegistrationUpdateEvent) + if err := _RelayerRegistration.contract.UnpackLog(event, "UpdateEvent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// RelayerRegistrationUpdateFeeEventIterator is returned from FilterUpdateFeeEvent and is used to iterate over the raw logs and unpacked data for UpdateFeeEvent events raised by the RelayerRegistration contract. +type RelayerRegistrationUpdateFeeEventIterator struct { + Event *RelayerRegistrationUpdateFeeEvent // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *RelayerRegistrationUpdateFeeEventIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationUpdateFeeEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(RelayerRegistrationUpdateFeeEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *RelayerRegistrationUpdateFeeEventIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RelayerRegistrationUpdateFeeEventIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RelayerRegistrationUpdateFeeEvent represents a UpdateFeeEvent event raised by the RelayerRegistration contract. +type RelayerRegistrationUpdateFeeEvent struct { + Coinbase common.Address + TradeFee uint16 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdateFeeEvent is a free log retrieval operation binding the contract event 0x5a4f79c1a68f4f5ef7148ac4f279a5a6caeb3237082c64f692e92c9e02ffc459. +// +// Solidity: event UpdateFeeEvent(coinbase address, tradeFee uint16) +func (_RelayerRegistration *RelayerRegistrationFilterer) FilterUpdateFeeEvent(opts *bind.FilterOpts) (*RelayerRegistrationUpdateFeeEventIterator, error) { + + logs, sub, err := _RelayerRegistration.contract.FilterLogs(opts, "UpdateFeeEvent") + if err != nil { + return nil, err + } + return &RelayerRegistrationUpdateFeeEventIterator{contract: _RelayerRegistration.contract, event: "UpdateFeeEvent", logs: logs, sub: sub}, nil +} + +// WatchUpdateFeeEvent is a free log subscription operation binding the contract event 0x5a4f79c1a68f4f5ef7148ac4f279a5a6caeb3237082c64f692e92c9e02ffc459. +// +// Solidity: event UpdateFeeEvent(coinbase address, tradeFee uint16) +func (_RelayerRegistration *RelayerRegistrationFilterer) WatchUpdateFeeEvent(opts *bind.WatchOpts, sink chan<- *RelayerRegistrationUpdateFeeEvent) (event.Subscription, error) { + + logs, sub, err := _RelayerRegistration.contract.WatchLogs(opts, "UpdateFeeEvent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(RelayerRegistrationUpdateFeeEvent) + if err := _RelayerRegistration.contract.UnpackLog(event, "UpdateFeeEvent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// SafeMathABI is the input ABI used to generate the binding from. +const SafeMathABI = "[]" + +// SafeMathBin is the compiled bytecode used for deploying new contracts. +const SafeMathBin = `0x604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600080fd00a165627a7a72305820c6c4834061dabec64e5ceac30b20029de90ad520415e80a05c3d6dd6fae00bc80029` + +// DeploySafeMath deploys a new Ethereum contract, binding an instance of SafeMath to it. +func DeploySafeMath(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SafeMath, error) { + parsed, err := abi.JSON(strings.NewReader(SafeMathABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(SafeMathBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SafeMath{SafeMathCaller: SafeMathCaller{contract: contract}, SafeMathTransactor: SafeMathTransactor{contract: contract}, SafeMathFilterer: SafeMathFilterer{contract: contract}}, nil +} + +// SafeMath is an auto generated Go binding around an Ethereum contract. +type SafeMath struct { + SafeMathCaller // Read-only binding to the contract + SafeMathTransactor // Write-only binding to the contract + SafeMathFilterer // Log filterer for contract events +} + +// SafeMathCaller is an auto generated read-only Go binding around an Ethereum contract. +type SafeMathCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeMathTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SafeMathTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeMathFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SafeMathFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeMathSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SafeMathSession struct { + Contract *SafeMath // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SafeMathCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SafeMathCallerSession struct { + Contract *SafeMathCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SafeMathTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SafeMathTransactorSession struct { + Contract *SafeMathTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SafeMathRaw is an auto generated low-level Go binding around an Ethereum contract. +type SafeMathRaw struct { + Contract *SafeMath // Generic contract binding to access the raw methods on +} + +// SafeMathCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SafeMathCallerRaw struct { + Contract *SafeMathCaller // Generic read-only contract binding to access the raw methods on +} + +// SafeMathTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SafeMathTransactorRaw struct { + Contract *SafeMathTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSafeMath creates a new instance of SafeMath, bound to a specific deployed contract. +func NewSafeMath(address common.Address, backend bind.ContractBackend) (*SafeMath, error) { + contract, err := bindSafeMath(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &SafeMath{SafeMathCaller: SafeMathCaller{contract: contract}, SafeMathTransactor: SafeMathTransactor{contract: contract}, SafeMathFilterer: SafeMathFilterer{contract: contract}}, nil +} + +// NewSafeMathCaller creates a new read-only instance of SafeMath, bound to a specific deployed contract. +func NewSafeMathCaller(address common.Address, caller bind.ContractCaller) (*SafeMathCaller, error) { + contract, err := bindSafeMath(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SafeMathCaller{contract: contract}, nil +} + +// NewSafeMathTransactor creates a new write-only instance of SafeMath, bound to a specific deployed contract. +func NewSafeMathTransactor(address common.Address, transactor bind.ContractTransactor) (*SafeMathTransactor, error) { + contract, err := bindSafeMath(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SafeMathTransactor{contract: contract}, nil +} + +// NewSafeMathFilterer creates a new log filterer instance of SafeMath, bound to a specific deployed contract. +func NewSafeMathFilterer(address common.Address, filterer bind.ContractFilterer) (*SafeMathFilterer, error) { + contract, err := bindSafeMath(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SafeMathFilterer{contract: contract}, nil +} + +// bindSafeMath binds a generic wrapper to an already deployed contract. +func bindSafeMath(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(SafeMathABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SafeMath *SafeMathRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SafeMath.Contract.SafeMathCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SafeMath *SafeMathRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SafeMath.Contract.SafeMathTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SafeMath *SafeMathRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SafeMath.Contract.SafeMathTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SafeMath *SafeMathCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SafeMath.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SafeMath *SafeMathTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SafeMath.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SafeMath *SafeMathTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SafeMath.Contract.contract.Transact(opts, method, params...) +} diff --git a/contracts/XDCx/contract/TRC21.go b/contracts/XDCx/contract/TRC21.go new file mode 100644 index 0000000000..d30a9a6fe9 --- /dev/null +++ b/contracts/XDCx/contract/TRC21.go @@ -0,0 +1,4716 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contract + +import ( + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// ITRC21ABI is the input ABI used to generate the binding from. +const ITRC21ABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"estimateFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"issuer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"who\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"issuer\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Fee\",\"type\":\"event\"}]" + +// ITRC21Bin is the compiled bytecode used for deploying new contracts. +const ITRC21Bin = `0x` + +// DeployITRC21 deploys a new Ethereum contract, binding an instance of ITRC21 to it. +func DeployITRC21(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ITRC21, error) { + parsed, err := abi.JSON(strings.NewReader(ITRC21ABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(ITRC21Bin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ITRC21{ITRC21Caller: ITRC21Caller{contract: contract}, ITRC21Transactor: ITRC21Transactor{contract: contract}, ITRC21Filterer: ITRC21Filterer{contract: contract}}, nil +} + +// ITRC21 is an auto generated Go binding around an Ethereum contract. +type ITRC21 struct { + ITRC21Caller // Read-only binding to the contract + ITRC21Transactor // Write-only binding to the contract + ITRC21Filterer // Log filterer for contract events +} + +// ITRC21Caller is an auto generated read-only Go binding around an Ethereum contract. +type ITRC21Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ITRC21Transactor is an auto generated write-only Go binding around an Ethereum contract. +type ITRC21Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ITRC21Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ITRC21Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ITRC21Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ITRC21Session struct { + Contract *ITRC21 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ITRC21CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ITRC21CallerSession struct { + Contract *ITRC21Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ITRC21TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ITRC21TransactorSession struct { + Contract *ITRC21Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ITRC21Raw is an auto generated low-level Go binding around an Ethereum contract. +type ITRC21Raw struct { + Contract *ITRC21 // Generic contract binding to access the raw methods on +} + +// ITRC21CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ITRC21CallerRaw struct { + Contract *ITRC21Caller // Generic read-only contract binding to access the raw methods on +} + +// ITRC21TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ITRC21TransactorRaw struct { + Contract *ITRC21Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewITRC21 creates a new instance of ITRC21, bound to a specific deployed contract. +func NewITRC21(address common.Address, backend bind.ContractBackend) (*ITRC21, error) { + contract, err := bindITRC21(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ITRC21{ITRC21Caller: ITRC21Caller{contract: contract}, ITRC21Transactor: ITRC21Transactor{contract: contract}, ITRC21Filterer: ITRC21Filterer{contract: contract}}, nil +} + +// NewITRC21Caller creates a new read-only instance of ITRC21, bound to a specific deployed contract. +func NewITRC21Caller(address common.Address, caller bind.ContractCaller) (*ITRC21Caller, error) { + contract, err := bindITRC21(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ITRC21Caller{contract: contract}, nil +} + +// NewITRC21Transactor creates a new write-only instance of ITRC21, bound to a specific deployed contract. +func NewITRC21Transactor(address common.Address, transactor bind.ContractTransactor) (*ITRC21Transactor, error) { + contract, err := bindITRC21(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ITRC21Transactor{contract: contract}, nil +} + +// NewITRC21Filterer creates a new log filterer instance of ITRC21, bound to a specific deployed contract. +func NewITRC21Filterer(address common.Address, filterer bind.ContractFilterer) (*ITRC21Filterer, error) { + contract, err := bindITRC21(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ITRC21Filterer{contract: contract}, nil +} + +// bindITRC21 binds a generic wrapper to an already deployed contract. +func bindITRC21(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(ITRC21ABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ITRC21 *ITRC21Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ITRC21.Contract.ITRC21Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ITRC21 *ITRC21Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ITRC21.Contract.ITRC21Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ITRC21 *ITRC21Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ITRC21.Contract.ITRC21Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ITRC21 *ITRC21CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ITRC21.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ITRC21 *ITRC21TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ITRC21.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ITRC21 *ITRC21TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ITRC21.Contract.contract.Transact(opts, method, params...) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_ITRC21 *ITRC21Caller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _ITRC21.contract.Call(opts, out, "allowance", owner, spender) + return *ret0, err +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_ITRC21 *ITRC21Session) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _ITRC21.Contract.Allowance(&_ITRC21.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_ITRC21 *ITRC21CallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _ITRC21.Contract.Allowance(&_ITRC21.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(who address) constant returns(uint256) +func (_ITRC21 *ITRC21Caller) BalanceOf(opts *bind.CallOpts, who common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _ITRC21.contract.Call(opts, out, "balanceOf", who) + return *ret0, err +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(who address) constant returns(uint256) +func (_ITRC21 *ITRC21Session) BalanceOf(who common.Address) (*big.Int, error) { + return _ITRC21.Contract.BalanceOf(&_ITRC21.CallOpts, who) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(who address) constant returns(uint256) +func (_ITRC21 *ITRC21CallerSession) BalanceOf(who common.Address) (*big.Int, error) { + return _ITRC21.Contract.BalanceOf(&_ITRC21.CallOpts, who) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() constant returns(uint8) +func (_ITRC21 *ITRC21Caller) Decimals(opts *bind.CallOpts) (uint8, error) { + var ( + ret0 = new(uint8) + ) + out := &[]interface{}{ + ret0, + } + err := _ITRC21.contract.Call(opts, out, "decimals") + return *ret0, err +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() constant returns(uint8) +func (_ITRC21 *ITRC21Session) Decimals() (uint8, error) { + return _ITRC21.Contract.Decimals(&_ITRC21.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() constant returns(uint8) +func (_ITRC21 *ITRC21CallerSession) Decimals() (uint8, error) { + return _ITRC21.Contract.Decimals(&_ITRC21.CallOpts) +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_ITRC21 *ITRC21Caller) EstimateFee(opts *bind.CallOpts, value *big.Int) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _ITRC21.contract.Call(opts, out, "estimateFee", value) + return *ret0, err +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_ITRC21 *ITRC21Session) EstimateFee(value *big.Int) (*big.Int, error) { + return _ITRC21.Contract.EstimateFee(&_ITRC21.CallOpts, value) +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_ITRC21 *ITRC21CallerSession) EstimateFee(value *big.Int) (*big.Int, error) { + return _ITRC21.Contract.EstimateFee(&_ITRC21.CallOpts, value) +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_ITRC21 *ITRC21Caller) Issuer(opts *bind.CallOpts) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _ITRC21.contract.Call(opts, out, "issuer") + return *ret0, err +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_ITRC21 *ITRC21Session) Issuer() (common.Address, error) { + return _ITRC21.Contract.Issuer(&_ITRC21.CallOpts) +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_ITRC21 *ITRC21CallerSession) Issuer() (common.Address, error) { + return _ITRC21.Contract.Issuer(&_ITRC21.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_ITRC21 *ITRC21Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _ITRC21.contract.Call(opts, out, "totalSupply") + return *ret0, err +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_ITRC21 *ITRC21Session) TotalSupply() (*big.Int, error) { + return _ITRC21.Contract.TotalSupply(&_ITRC21.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_ITRC21 *ITRC21CallerSession) TotalSupply() (*big.Int, error) { + return _ITRC21.Contract.TotalSupply(&_ITRC21.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_ITRC21 *ITRC21Transactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.contract.Transact(opts, "approve", spender, value) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_ITRC21 *ITRC21Session) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.Contract.Approve(&_ITRC21.TransactOpts, spender, value) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_ITRC21 *ITRC21TransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.Contract.Approve(&_ITRC21.TransactOpts, spender, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_ITRC21 *ITRC21Transactor) Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.contract.Transact(opts, "transfer", to, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_ITRC21 *ITRC21Session) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.Contract.Transfer(&_ITRC21.TransactOpts, to, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_ITRC21 *ITRC21TransactorSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.Contract.Transfer(&_ITRC21.TransactOpts, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_ITRC21 *ITRC21Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.contract.Transact(opts, "transferFrom", from, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_ITRC21 *ITRC21Session) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.Contract.TransferFrom(&_ITRC21.TransactOpts, from, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_ITRC21 *ITRC21TransactorSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.Contract.TransferFrom(&_ITRC21.TransactOpts, from, to, value) +} + +// ITRC21ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ITRC21 contract. +type ITRC21ApprovalIterator struct { + Event *ITRC21Approval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ITRC21ApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ITRC21Approval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ITRC21Approval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ITRC21ApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ITRC21ApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ITRC21Approval represents a Approval event raised by the ITRC21 contract. +type ITRC21Approval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(owner indexed address, spender indexed address, value uint256) +func (_ITRC21 *ITRC21Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*ITRC21ApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _ITRC21.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &ITRC21ApprovalIterator{contract: _ITRC21.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(owner indexed address, spender indexed address, value uint256) +func (_ITRC21 *ITRC21Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ITRC21Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _ITRC21.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ITRC21Approval) + if err := _ITRC21.contract.UnpackLog(event, "Approval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ITRC21FeeIterator is returned from FilterFee and is used to iterate over the raw logs and unpacked data for Fee events raised by the ITRC21 contract. +type ITRC21FeeIterator struct { + Event *ITRC21Fee // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ITRC21FeeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ITRC21Fee) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ITRC21Fee) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ITRC21FeeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ITRC21FeeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ITRC21Fee represents a Fee event raised by the ITRC21 contract. +type ITRC21Fee struct { + From common.Address + To common.Address + Issuer common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFee is a free log retrieval operation binding the contract event 0xfcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd99. +// +// Solidity: event Fee(from indexed address, to indexed address, issuer indexed address, value uint256) +func (_ITRC21 *ITRC21Filterer) FilterFee(opts *bind.FilterOpts, from []common.Address, to []common.Address, issuer []common.Address) (*ITRC21FeeIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var issuerRule []interface{} + for _, issuerItem := range issuer { + issuerRule = append(issuerRule, issuerItem) + } + + logs, sub, err := _ITRC21.contract.FilterLogs(opts, "Fee", fromRule, toRule, issuerRule) + if err != nil { + return nil, err + } + return &ITRC21FeeIterator{contract: _ITRC21.contract, event: "Fee", logs: logs, sub: sub}, nil +} + +// WatchFee is a free log subscription operation binding the contract event 0xfcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd99. +// +// Solidity: event Fee(from indexed address, to indexed address, issuer indexed address, value uint256) +func (_ITRC21 *ITRC21Filterer) WatchFee(opts *bind.WatchOpts, sink chan<- *ITRC21Fee, from []common.Address, to []common.Address, issuer []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var issuerRule []interface{} + for _, issuerItem := range issuer { + issuerRule = append(issuerRule, issuerItem) + } + + logs, sub, err := _ITRC21.contract.WatchLogs(opts, "Fee", fromRule, toRule, issuerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ITRC21Fee) + if err := _ITRC21.contract.UnpackLog(event, "Fee", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ITRC21TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ITRC21 contract. +type ITRC21TransferIterator struct { + Event *ITRC21Transfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ITRC21TransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ITRC21Transfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ITRC21Transfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ITRC21TransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ITRC21TransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ITRC21Transfer represents a Transfer event raised by the ITRC21 contract. +type ITRC21Transfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(from indexed address, to indexed address, value uint256) +func (_ITRC21 *ITRC21Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ITRC21TransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ITRC21.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &ITRC21TransferIterator{contract: _ITRC21.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(from indexed address, to indexed address, value uint256) +func (_ITRC21 *ITRC21Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ITRC21Transfer, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ITRC21.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ITRC21Transfer) + if err := _ITRC21.contract.UnpackLog(event, "Transfer", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MyTRC21ABI is the input ABI used to generate the binding from. +const MyTRC21ABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"owners\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"estimateFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"removeOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"issuer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"revokeConfirmation\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"burnId\",\"type\":\"uint256\"}],\"name\":\"getBurn\",\"outputs\":[{\"name\":\"_burner\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"setMinFee\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"confirmations\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"depositFee\",\"type\":\"uint256\"}],\"name\":\"setDepositFee\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"pending\",\"type\":\"bool\"},{\"name\":\"executed\",\"type\":\"bool\"}],\"name\":\"getTransactionCount\",\"outputs\":[{\"name\":\"count\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"addOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"burnList\",\"outputs\":[{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"burner\",\"type\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"isConfirmed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"getConfirmationCount\",\"outputs\":[{\"name\":\"count\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transactions\",\"outputs\":[{\"name\":\"destination\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"executed\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"WITHDRAW_FEE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOwners\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"from\",\"type\":\"uint256\"},{\"name\":\"to\",\"type\":\"uint256\"},{\"name\":\"pending\",\"type\":\"bool\"},{\"name\":\"executed\",\"type\":\"bool\"}],\"name\":\"getTransactionIds\",\"outputs\":[{\"name\":\"_transactionIds\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"getConfirmations\",\"outputs\":[{\"name\":\"_confirmations\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"withdrawFee\",\"type\":\"uint256\"}],\"name\":\"setWithdrawFee\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"transactionCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_required\",\"type\":\"uint256\"}],\"name\":\"changeRequirement\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"confirmTransaction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferContractIssuer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"destination\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"submitTransaction\",\"outputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_OWNER_COUNT\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"required\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"DEPOSIT_FEE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"replaceOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getBurnCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"executeTransaction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"burn\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_owners\",\"type\":\"address[]\"},{\"name\":\"_required\",\"type\":\"uint256\"},{\"name\":\"_name\",\"type\":\"string\"},{\"name\":\"_symbol\",\"type\":\"string\"},{\"name\":\"_decimals\",\"type\":\"uint8\"},{\"name\":\"cap\",\"type\":\"uint256\"},{\"name\":\"minFee\",\"type\":\"uint256\"},{\"name\":\"depositFee\",\"type\":\"uint256\"},{\"name\":\"withdrawFee\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"Confirmation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"Revocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"Submission\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"ExecutionFailure\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnerAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnerRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"RequirementChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"burnID\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"burner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"TokenBurn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"issuer\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Fee\",\"type\":\"event\"}]" + +// MyTRC21Bin is the compiled bytecode used for deploying new contracts. +const MyTRC21Bin = `0x6080604052600060085560006009553480156200001b57600080fd5b5060405162002a7b38038062002a7b8339810160409081528151602080840151928401516060850151608086015160a087015160c088015160e08901516101008a0151958a018051988b019a909895019693959294919390929160009189918991899162000090916005919086019062000356565b508151620000a690600690602085019062000356565b506007805460ff191660ff92909216919091179055505089518960328211801590620000d25750818111155b8015620000de57508015155b8015620000ea57508115155b1515620000f657600080fd5b6200010b338864010000000062000240810204565b6200011f33640100000000620002ff810204565b620001338664010000000062000337810204565b600092505b8b518310156200020b57600c60008d858151811015156200015557fe5b6020908102909101810151600160a060020a031682528101919091526040016000205460ff16158015620001ab57508b838151811015156200019357fe5b90602001906020020151600160a060020a0316600014155b1515620001b757600080fd5b6001600c60008e86815181101515620001cc57fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff19169115159190911790556001929092019162000138565b8b516200022090600d9060208f0190620003db565b505050600e98909855600991909155600855506200048895505050505050565b600160a060020a03821615156200025657600080fd5b6004546200027390826401000000006200221b6200033c82021704565b600455600160a060020a038216600090815260208190526040902054620002a990826401000000006200221b6200033c82021704565b600160a060020a0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600160a060020a03811615156200031557600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b600155565b6000828201838110156200034f57600080fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200039957805160ff1916838001178555620003c9565b82800160010185558215620003c9579182015b82811115620003c9578251825591602001919060010190620003ac565b50620003d792915062000441565b5090565b82805482825590600052602060002090810192821562000433579160200282015b82811115620004335782518254600160a060020a031916600160a060020a03909116178255602090920191600190910190620003fc565b50620003d792915062000461565b6200045e91905b80821115620003d7576000815560010162000448565b90565b6200045e91905b80821115620003d7578054600160a060020a031916815560010162000468565b6125e380620004986000396000f30060806040526004361061020e5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c27811461021357806306fdde0314610247578063095ea7b3146102d1578063127e8e4d14610309578063173825d91461033357806318160ddd146103565780631d1438481461036b57806320ea8d861461038057806323b872dd1461039857806324ec7590146103c25780632eb3f49b146103d75780632f54bf6e14610487578063313ce567146104a857806331ac9920146104d35780633411c81c146104eb578063490ae2101461050f57806354741525146105275780637065cb481461054657806370a082311461056757806377661c6414610588578063784547a7146105fa5780638b51d13f1461061257806395d89b411461062a5780639ace38c21461063f5780639bff5ddb146106fa578063a0e67e2b1461070f578063a8abe69a14610774578063a9059cbb14610799578063b5dc40c3146107bd578063b6ac642a146107d5578063b77bf600146107ed578063ba51a6df14610802578063c01a8c841461081a578063c28ce6ff14610832578063c642747414610853578063d74f8edd146108bc578063dc8452cd146108d1578063dd62ed3e146108e6578063de363e651461090d578063e20056e614610922578063e7cf548c14610949578063ee22610b1461095e578063fe9d930314610976575b600080fd5b34801561021f57600080fd5b5061022b6004356109d4565b60408051600160a060020a039092168252519081900360200190f35b34801561025357600080fd5b5061025c6109fc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029657818101518382015260200161027e565b50505050905090810190601f1680156102c35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102dd57600080fd5b506102f5600160a060020a0360043516602435610a93565b604080519115158252519081900360200190f35b34801561031557600080fd5b50610321600435610b4d565b60408051918252519081900360200190f35b34801561033f57600080fd5b50610354600160a060020a0360043516610b79565b005b34801561036257600080fd5b50610321610cf0565b34801561037757600080fd5b5061022b610cf6565b34801561038c57600080fd5b50610354600435610d05565b3480156103a457600080fd5b506102f5600160a060020a0360043581169060243516604435610dbf565b3480156103ce57600080fd5b50610321610f03565b3480156103e357600080fd5b506103ef600435610f09565b6040518084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561044a578181015183820152602001610432565b50505050905090810190601f1680156104775780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b34801561049357600080fd5b506102f5600160a060020a0360043516611016565b3480156104b457600080fd5b506104bd61102b565b6040805160ff9092168252519081900360200190f35b3480156104df57600080fd5b50610354600435611034565b3480156104f757600080fd5b506102f5600435600160a060020a0360243516611057565b34801561051b57600080fd5b50610354600435611077565b34801561053357600080fd5b5061032160043515156024351515611098565b34801561055257600080fd5b50610354600160a060020a0360043516611104565b34801561057357600080fd5b50610321600160a060020a0360043516611229565b34801561059457600080fd5b506105a0600435611244565b6040518084815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360008381101561044a578181015183820152602001610432565b34801561060657600080fd5b506102f560043561130d565b34801561061e57600080fd5b50610321600435611391565b34801561063657600080fd5b5061025c611400565b34801561064b57600080fd5b50610657600435611461565b6040518085600160a060020a0316600160a060020a031681526020018481526020018060200183151515158152602001828103825284818151815260200191508051906020019080838360005b838110156106bc5781810151838201526020016106a4565b50505050905090810190601f1680156106e95780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b34801561070657600080fd5b50610321611520565b34801561071b57600080fd5b50610724611526565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610760578181015183820152602001610748565b505050509050019250505060405180910390f35b34801561078057600080fd5b5061072460043560243560443515156064351515611587565b3480156107a557600080fd5b506102f5600160a060020a03600435166024356116d3565b3480156107c957600080fd5b506107246004356117a5565b3480156107e157600080fd5b5061035460043561191e565b3480156107f957600080fd5b5061032161193f565b34801561080e57600080fd5b50610354600435611945565b34801561082657600080fd5b506103546004356119c4565b34801561083e57600080fd5b50610354600160a060020a0360043516611a8d565b34801561085f57600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610321948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750611ac19650505050505050565b3480156108c857600080fd5b50610321611ae0565b3480156108dd57600080fd5b50610321611ae5565b3480156108f257600080fd5b50610321600160a060020a0360043581169060243516611aeb565b34801561091957600080fd5b50610321611b16565b34801561092e57600080fd5b50610354600160a060020a0360043581169060243516611b1c565b34801561095557600080fd5b50610321611ca6565b34801561096a57600080fd5b50610354600435611cac565b34801561098257600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610354958335953695604494919390910191908190840183828082843750949750611f079650505050505050565b600d8054829081106109e257fe5b600091825260209091200154600160a060020a0316905081565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a885780601f10610a5d57610100808354040283529160200191610a88565b820191906000526020600020905b815481529060010190602001808311610a6b57829003601f168201915b505050505090505b90565b6000600160a060020a0383161515610aaa57600080fd5b600154336000908152602081905260409020541015610ac857600080fd5b336000818152600360209081526040808320600160a060020a0388811685529252909120849055600254600154610b04939291909116906120fb565b604080518381529051600160a060020a0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a350600192915050565b600154600090610b7390610b67848463ffffffff6121ed16565b9063ffffffff61221b16565b92915050565b6000333014610b8757600080fd5b600160a060020a0382166000908152600c6020526040902054829060ff161515610bb057600080fd5b600160a060020a0383166000908152600c60205260408120805460ff1916905591505b600d5460001901821015610c8b5782600160a060020a0316600d83815481101515610bfa57fe5b600091825260209091200154600160a060020a03161415610c8057600d80546000198101908110610c2757fe5b600091825260209091200154600d8054600160a060020a039092169184908110610c4d57fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a03160217905550610c8b565b600190910190610bd3565b600d80546000190190610c9e90826124f6565b50600d54600e541115610cb757600d54610cb790611945565b604051600160a060020a038416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a2505050565b60045490565b600254600160a060020a031690565b336000818152600c602052604090205460ff161515610d2357600080fd5b6000828152600b602090815260408083203380855292529091205483919060ff161515610d4f57600080fd5b6000848152600a6020526040902060030154849060ff1615610d7057600080fd5b6000858152600b60209081526040808320338085529252808320805460ff191690555187927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35050505050565b600080610dd76001548461221b90919063ffffffff16565b600160a060020a038616600090815260208190526040902054909150811115610dff57600080fd5b600160a060020a0385166000908152600360209081526040808320338452909152902054831115610e2f57600080fd5b600160a060020a0385166000908152600360209081526040808320338452909152902054610e63908263ffffffff61222d16565b600160a060020a0386166000908152600360209081526040808320338452909152902055610e928585856120fb565b600254600154610eaf918791600160a060020a03909116906120fb565b6002546001546040805191825251600160a060020a039283169287169133917ffcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd999181900360200190a4506001949350505050565b60015490565b6000806060601084815481101515610f1d57fe5b600091825260209091206001600390920201015460108054600160a060020a0390921694509085908110610f4d57fe5b9060005260206000209060030201600001549150601084815481101515610f7057fe5b600091825260209182902060026003909202018101805460408051601f6000196101006001861615020190931694909404918201859004850284018501905280835291929091908301828280156110085780601f10610fdd57610100808354040283529160200191611008565b820191906000526020600020905b815481529060010190602001808311610feb57829003601f168201915b505050505090509193909250565b600c6020526000908152604090205460ff1681565b60075460ff1690565b600254600160a060020a0316331461104b57600080fd5b61105481612244565b50565b600b60209081526000928352604080842090915290825290205460ff1681565b61107f610cf6565b600160a060020a0316331461109357600080fd5b600955565b6000805b600f548110156110fd578380156110c557506000818152600a602052604090206003015460ff16155b806110e957508280156110e957506000818152600a602052604090206003015460ff165b156110f5576001820191505b60010161109c565b5092915050565b33301461111057600080fd5b600160a060020a0381166000908152600c6020526040902054819060ff161561113857600080fd5b81600160a060020a038116151561114e57600080fd5b600d80549050600101600e546032821115801561116b5750818111155b801561117657508015155b801561118157508115155b151561118c57600080fd5b600160a060020a0385166000818152600c6020526040808220805460ff19166001908117909155600d8054918201815583527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb501805473ffffffffffffffffffffffffffffffffffffffff191684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b600160a060020a031660009081526020819052604090205490565b601080548290811061125257fe5b6000918252602091829020600391909102018054600180830154600280850180546040805161010096831615969096026000190190911692909204601f8101889004880285018801909252818452939650600160a060020a03909116949192918301828280156113035780601f106112d857610100808354040283529160200191611303565b820191906000526020600020905b8154815290600101906020018083116112e657829003601f168201915b5050505050905083565b600080805b600d5481101561138a576000848152600b60205260408120600d80549192918490811061133b57fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff161561136f576001820191505b600e54821415611382576001925061138a565b600101611312565b5050919050565b6000805b600d548110156113fa576000838152600b60205260408120600d8054919291849081106113be57fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff16156113f2576001820191505b600101611395565b50919050565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a885780601f10610a5d57610100808354040283529160200191610a88565b600a6020908152600091825260409182902080546001808301546002808501805488516101009582161595909502600019011691909104601f8101879004870284018701909752868352600160a060020a0390931695909491929183018282801561150d5780601f106114e25761010080835404028352916020019161150d565b820191906000526020600020905b8154815290600101906020018083116114f057829003601f168201915b5050506003909301549192505060ff1684565b60085481565b6060600d805480602002602001604051908101604052809291908181526020018280548015610a8857602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611560575050505050905090565b606060006060600080600f54881161159f57876115a3565b600f545b93508884036040519080825280602002602001820160405280156115d1578160200160208202803883390190505b509250600091508890505b878110156116555786801561160357506000818152600a602052604090206003015460ff16155b80611627575085801561162757506000818152600a602052604090206003015460ff165b1561164d5780838381518110151561163b57fe5b60209081029091010152600191909101905b6001016115dc565b8160405190808252806020026020018201604052801561167f578160200160208202803883390190505b509450600090505b818110156116c757828181518110151561169d57fe5b9060200190602002015185828151811015156116b557fe5b60209081029091010152600101611687565b50505050949350505050565b600080600160a060020a03841615156116eb57600080fd5b6001546116ff90849063ffffffff61221b16565b3360009081526020819052604090205490915081111561171e57600080fd5b6117293385856120fb565b6000600154111561179b57600254600154611751913391600160a060020a03909116906120fb565b6002546001546040805191825251600160a060020a039283169287169133917ffcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd999181900360200190a45b5060019392505050565b606080600080600d805490506040519080825280602002602001820160405280156117da578160200160208202803883390190505b50925060009150600090505b600d54811015611897576000858152600b60205260408120600d80549192918490811061180f57fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff161561188f57600d80548290811061184a57fe5b6000918252602090912001548351600160a060020a039091169084908490811061187057fe5b600160a060020a03909216602092830290910190910152600191909101905b6001016117e6565b816040519080825280602002602001820160405280156118c1578160200160208202803883390190505b509350600090505b818110156119165782818151811015156118df57fe5b9060200190602002015184828151811015156118f757fe5b600160a060020a039092166020928302909101909101526001016118c9565b505050919050565b611926610cf6565b600160a060020a0316331461193a57600080fd5b600855565b600f5481565b33301461195157600080fd5b600d5481603282118015906119665750818111155b801561197157508015155b801561197c57508115155b151561198757600080fd5b600e8390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b336000818152600c602052604090205460ff1615156119e257600080fd5b6000828152600a60205260409020548290600160a060020a03161515611a0757600080fd5b6000838152600b602090815260408083203380855292529091205484919060ff1615611a3257600080fd5b6000858152600b60209081526040808320338085529252808320805460ff191660011790555187927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a3611a8685611cac565b5050505050565b611a95610cf6565b600160a060020a03163314611aa957600080fd5b600160a060020a038116156110545761105433612249565b6000611ace84848461228d565b9050611ad9816119c4565b9392505050565b603281565b600e5481565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b60095481565b6000333014611b2a57600080fd5b600160a060020a0383166000908152600c6020526040902054839060ff161515611b5357600080fd5b600160a060020a0383166000908152600c6020526040902054839060ff1615611b7b57600080fd5b600092505b600d54831015611c0c5784600160a060020a0316600d84815481101515611ba357fe5b600091825260209091200154600160a060020a03161415611c015783600d84815481101515611bce57fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a03160217905550611c0c565b600190920191611b80565b600160a060020a038086166000818152600c6020526040808220805460ff1990811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a2604051600160a060020a038516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b60105490565b336000818152600c602052604081205490919060ff161515611ccd57600080fd5b6000838152600b602090815260408083203380855292529091205484919060ff161515611cf957600080fd5b6000858152600a6020526040902060030154859060ff1615611d1a57600080fd5b611d238661130d565b15611eff576000868152600a6020526040902060038101805460ff19166001908117909155600280830154929750600019918316156101000291909101909116041515611ded576009546001860154611d819163ffffffff61222d16565b600186018190558554611d9f91600160a060020a039091169061237e565b60006009541115611dbd57611dbd611db5610cf6565b60095461237e565b60405186907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2611eff565b8460000160009054906101000a9004600160a060020a0316600160a060020a03168560010154866002016040518082805460018160011615610100020316600290048015611e7c5780601f10611e5157610100808354040283529160200191611e7c565b820191906000526020600020905b815481529060010190602001808311611e5f57829003601f168201915b505091505060006040518083038185875af19250505015611ec75760405186907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a2611eff565b60405186907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a260038501805460ff191690555b505050505050565b6008546000908311611f1857600080fd5b611f223384612428565b60006008541115611f4057611f40611f38610cf6565b60085461237e565b600854611f5490849063ffffffff61222d16565b604080516060810182528281523360208083019182529282018681526010805460018101808355600092909252845160039091027f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672810191825593517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67385018054600160a060020a039290921673ffffffffffffffffffffffffffffffffffffffff199092169190911790559151805196975090959394919361203e937f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6740192919091019061251f565b5050505033600160a060020a03166001601080549050037f6905852b196f81e7e03058512a599446c358027fc943c1e193b6649a39379bb583856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156120bb5781810151838201526020016120a3565b50505050905090810190601f1680156120e85780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3505050565b600160a060020a03831660009081526020819052604090205481111561212057600080fd5b600160a060020a038216151561213557600080fd5b600160a060020a03831660009081526020819052604090205461215e908263ffffffff61222d16565b600160a060020a038085166000908152602081905260408082209390935590841681522054612193908263ffffffff61221b16565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008083151561220057600091506110fd565b5082820282848281151561221057fe5b0414611ad957600080fd5b600082820183811015611ad957600080fd5b6000808383111561223d57600080fd5b5050900390565b600155565b600160a060020a038116151561225e57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600083600160a060020a03811615156122a557600080fd5b600f5460408051608081018252600160a060020a0388811682526020808301898152838501898152600060608601819052878152600a8452959095208451815473ffffffffffffffffffffffffffffffffffffffff19169416939093178355516001830155925180519496509193909261232692600285019291019061251f565b50606091909101516003909101805460ff1916911515919091179055600f8054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509392505050565b600160a060020a038216151561239357600080fd5b6004546123a6908263ffffffff61221b16565b600455600160a060020a0382166000908152602081905260409020546123d2908263ffffffff61221b16565b600160a060020a0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600160a060020a038216151561243d57600080fd5b600160a060020a03821660009081526020819052604090205481111561246257600080fd5b600454612475908263ffffffff61222d16565b600455600160a060020a0382166000908152602081905260409020546124a1908263ffffffff61222d16565b600160a060020a038316600081815260208181526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b81548183558181111561251a5760008381526020902061251a91810190830161259d565b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061256057805160ff191683800117855561258d565b8280016001018555821561258d579182015b8281111561258d578251825591602001919060010190612572565b5061259992915061259d565b5090565b610a9091905b8082111561259957600081556001016125a35600a165627a7a72305820bffa6044329c4005991204d5fa011824a3408b8d46a641ee00f98556e9536c350029` + +// DeployMyTRC21 deploys a new Ethereum contract, binding an instance of MyTRC21 to it. +func DeployMyTRC21(auth *bind.TransactOpts, backend bind.ContractBackend, _owners []common.Address, _required *big.Int, _name string, _symbol string, _decimals uint8, cap *big.Int, minFee *big.Int, depositFee *big.Int, withdrawFee *big.Int) (common.Address, *types.Transaction, *MyTRC21, error) { + parsed, err := abi.JSON(strings.NewReader(MyTRC21ABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(MyTRC21Bin), backend, _owners, _required, _name, _symbol, _decimals, cap, minFee, depositFee, withdrawFee) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &MyTRC21{MyTRC21Caller: MyTRC21Caller{contract: contract}, MyTRC21Transactor: MyTRC21Transactor{contract: contract}, MyTRC21Filterer: MyTRC21Filterer{contract: contract}}, nil +} + +// MyTRC21 is an auto generated Go binding around an Ethereum contract. +type MyTRC21 struct { + MyTRC21Caller // Read-only binding to the contract + MyTRC21Transactor // Write-only binding to the contract + MyTRC21Filterer // Log filterer for contract events +} + +// MyTRC21Caller is an auto generated read-only Go binding around an Ethereum contract. +type MyTRC21Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MyTRC21Transactor is an auto generated write-only Go binding around an Ethereum contract. +type MyTRC21Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MyTRC21Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type MyTRC21Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MyTRC21Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type MyTRC21Session struct { + Contract *MyTRC21 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// MyTRC21CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type MyTRC21CallerSession struct { + Contract *MyTRC21Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// MyTRC21TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type MyTRC21TransactorSession struct { + Contract *MyTRC21Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// MyTRC21Raw is an auto generated low-level Go binding around an Ethereum contract. +type MyTRC21Raw struct { + Contract *MyTRC21 // Generic contract binding to access the raw methods on +} + +// MyTRC21CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type MyTRC21CallerRaw struct { + Contract *MyTRC21Caller // Generic read-only contract binding to access the raw methods on +} + +// MyTRC21TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type MyTRC21TransactorRaw struct { + Contract *MyTRC21Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewMyTRC21 creates a new instance of MyTRC21, bound to a specific deployed contract. +func NewMyTRC21(address common.Address, backend bind.ContractBackend) (*MyTRC21, error) { + contract, err := bindMyTRC21(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &MyTRC21{MyTRC21Caller: MyTRC21Caller{contract: contract}, MyTRC21Transactor: MyTRC21Transactor{contract: contract}, MyTRC21Filterer: MyTRC21Filterer{contract: contract}}, nil +} + +// NewMyTRC21Caller creates a new read-only instance of MyTRC21, bound to a specific deployed contract. +func NewMyTRC21Caller(address common.Address, caller bind.ContractCaller) (*MyTRC21Caller, error) { + contract, err := bindMyTRC21(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &MyTRC21Caller{contract: contract}, nil +} + +// NewMyTRC21Transactor creates a new write-only instance of MyTRC21, bound to a specific deployed contract. +func NewMyTRC21Transactor(address common.Address, transactor bind.ContractTransactor) (*MyTRC21Transactor, error) { + contract, err := bindMyTRC21(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &MyTRC21Transactor{contract: contract}, nil +} + +// NewMyTRC21Filterer creates a new log filterer instance of MyTRC21, bound to a specific deployed contract. +func NewMyTRC21Filterer(address common.Address, filterer bind.ContractFilterer) (*MyTRC21Filterer, error) { + contract, err := bindMyTRC21(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &MyTRC21Filterer{contract: contract}, nil +} + +// bindMyTRC21 binds a generic wrapper to an already deployed contract. +func bindMyTRC21(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(MyTRC21ABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_MyTRC21 *MyTRC21Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MyTRC21.Contract.MyTRC21Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_MyTRC21 *MyTRC21Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MyTRC21.Contract.MyTRC21Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_MyTRC21 *MyTRC21Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MyTRC21.Contract.MyTRC21Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_MyTRC21 *MyTRC21CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MyTRC21.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_MyTRC21 *MyTRC21TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MyTRC21.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_MyTRC21 *MyTRC21TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MyTRC21.Contract.contract.Transact(opts, method, params...) +} + +// DEPOSITFEE is a free data retrieval call binding the contract method 0xde363e65. +// +// Solidity: function DEPOSIT_FEE() constant returns(uint256) +func (_MyTRC21 *MyTRC21Caller) DEPOSITFEE(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "DEPOSIT_FEE") + return *ret0, err +} + +// DEPOSITFEE is a free data retrieval call binding the contract method 0xde363e65. +// +// Solidity: function DEPOSIT_FEE() constant returns(uint256) +func (_MyTRC21 *MyTRC21Session) DEPOSITFEE() (*big.Int, error) { + return _MyTRC21.Contract.DEPOSITFEE(&_MyTRC21.CallOpts) +} + +// DEPOSITFEE is a free data retrieval call binding the contract method 0xde363e65. +// +// Solidity: function DEPOSIT_FEE() constant returns(uint256) +func (_MyTRC21 *MyTRC21CallerSession) DEPOSITFEE() (*big.Int, error) { + return _MyTRC21.Contract.DEPOSITFEE(&_MyTRC21.CallOpts) +} + +// MAXOWNERCOUNT is a free data retrieval call binding the contract method 0xd74f8edd. +// +// Solidity: function MAX_OWNER_COUNT() constant returns(uint256) +func (_MyTRC21 *MyTRC21Caller) MAXOWNERCOUNT(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "MAX_OWNER_COUNT") + return *ret0, err +} + +// MAXOWNERCOUNT is a free data retrieval call binding the contract method 0xd74f8edd. +// +// Solidity: function MAX_OWNER_COUNT() constant returns(uint256) +func (_MyTRC21 *MyTRC21Session) MAXOWNERCOUNT() (*big.Int, error) { + return _MyTRC21.Contract.MAXOWNERCOUNT(&_MyTRC21.CallOpts) +} + +// MAXOWNERCOUNT is a free data retrieval call binding the contract method 0xd74f8edd. +// +// Solidity: function MAX_OWNER_COUNT() constant returns(uint256) +func (_MyTRC21 *MyTRC21CallerSession) MAXOWNERCOUNT() (*big.Int, error) { + return _MyTRC21.Contract.MAXOWNERCOUNT(&_MyTRC21.CallOpts) +} + +// WITHDRAWFEE is a free data retrieval call binding the contract method 0x9bff5ddb. +// +// Solidity: function WITHDRAW_FEE() constant returns(uint256) +func (_MyTRC21 *MyTRC21Caller) WITHDRAWFEE(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "WITHDRAW_FEE") + return *ret0, err +} + +// WITHDRAWFEE is a free data retrieval call binding the contract method 0x9bff5ddb. +// +// Solidity: function WITHDRAW_FEE() constant returns(uint256) +func (_MyTRC21 *MyTRC21Session) WITHDRAWFEE() (*big.Int, error) { + return _MyTRC21.Contract.WITHDRAWFEE(&_MyTRC21.CallOpts) +} + +// WITHDRAWFEE is a free data retrieval call binding the contract method 0x9bff5ddb. +// +// Solidity: function WITHDRAW_FEE() constant returns(uint256) +func (_MyTRC21 *MyTRC21CallerSession) WITHDRAWFEE() (*big.Int, error) { + return _MyTRC21.Contract.WITHDRAWFEE(&_MyTRC21.CallOpts) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_MyTRC21 *MyTRC21Caller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "allowance", owner, spender) + return *ret0, err +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_MyTRC21 *MyTRC21Session) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _MyTRC21.Contract.Allowance(&_MyTRC21.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_MyTRC21 *MyTRC21CallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _MyTRC21.Contract.Allowance(&_MyTRC21.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(owner address) constant returns(uint256) +func (_MyTRC21 *MyTRC21Caller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "balanceOf", owner) + return *ret0, err +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(owner address) constant returns(uint256) +func (_MyTRC21 *MyTRC21Session) BalanceOf(owner common.Address) (*big.Int, error) { + return _MyTRC21.Contract.BalanceOf(&_MyTRC21.CallOpts, owner) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(owner address) constant returns(uint256) +func (_MyTRC21 *MyTRC21CallerSession) BalanceOf(owner common.Address) (*big.Int, error) { + return _MyTRC21.Contract.BalanceOf(&_MyTRC21.CallOpts, owner) +} + +// BurnList is a free data retrieval call binding the contract method 0x77661c64. +// +// Solidity: function burnList( uint256) constant returns(value uint256, burner address, data bytes) +func (_MyTRC21 *MyTRC21Caller) BurnList(opts *bind.CallOpts, arg0 *big.Int) (struct { + Value *big.Int + Burner common.Address + Data []byte +}, error) { + ret := new(struct { + Value *big.Int + Burner common.Address + Data []byte + }) + out := &[]interface{}{ + ret, + } + err := _MyTRC21.contract.Call(opts, out, "burnList", arg0) + return *ret, err +} + +// BurnList is a free data retrieval call binding the contract method 0x77661c64. +// +// Solidity: function burnList( uint256) constant returns(value uint256, burner address, data bytes) +func (_MyTRC21 *MyTRC21Session) BurnList(arg0 *big.Int) (struct { + Value *big.Int + Burner common.Address + Data []byte +}, error) { + return _MyTRC21.Contract.BurnList(&_MyTRC21.CallOpts, arg0) +} + +// BurnList is a free data retrieval call binding the contract method 0x77661c64. +// +// Solidity: function burnList( uint256) constant returns(value uint256, burner address, data bytes) +func (_MyTRC21 *MyTRC21CallerSession) BurnList(arg0 *big.Int) (struct { + Value *big.Int + Burner common.Address + Data []byte +}, error) { + return _MyTRC21.Contract.BurnList(&_MyTRC21.CallOpts, arg0) +} + +// Confirmations is a free data retrieval call binding the contract method 0x3411c81c. +// +// Solidity: function confirmations( uint256, address) constant returns(bool) +func (_MyTRC21 *MyTRC21Caller) Confirmations(opts *bind.CallOpts, arg0 *big.Int, arg1 common.Address) (bool, error) { + var ( + ret0 = new(bool) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "confirmations", arg0, arg1) + return *ret0, err +} + +// Confirmations is a free data retrieval call binding the contract method 0x3411c81c. +// +// Solidity: function confirmations( uint256, address) constant returns(bool) +func (_MyTRC21 *MyTRC21Session) Confirmations(arg0 *big.Int, arg1 common.Address) (bool, error) { + return _MyTRC21.Contract.Confirmations(&_MyTRC21.CallOpts, arg0, arg1) +} + +// Confirmations is a free data retrieval call binding the contract method 0x3411c81c. +// +// Solidity: function confirmations( uint256, address) constant returns(bool) +func (_MyTRC21 *MyTRC21CallerSession) Confirmations(arg0 *big.Int, arg1 common.Address) (bool, error) { + return _MyTRC21.Contract.Confirmations(&_MyTRC21.CallOpts, arg0, arg1) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() constant returns(uint8) +func (_MyTRC21 *MyTRC21Caller) Decimals(opts *bind.CallOpts) (uint8, error) { + var ( + ret0 = new(uint8) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "decimals") + return *ret0, err +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() constant returns(uint8) +func (_MyTRC21 *MyTRC21Session) Decimals() (uint8, error) { + return _MyTRC21.Contract.Decimals(&_MyTRC21.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() constant returns(uint8) +func (_MyTRC21 *MyTRC21CallerSession) Decimals() (uint8, error) { + return _MyTRC21.Contract.Decimals(&_MyTRC21.CallOpts) +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_MyTRC21 *MyTRC21Caller) EstimateFee(opts *bind.CallOpts, value *big.Int) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "estimateFee", value) + return *ret0, err +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_MyTRC21 *MyTRC21Session) EstimateFee(value *big.Int) (*big.Int, error) { + return _MyTRC21.Contract.EstimateFee(&_MyTRC21.CallOpts, value) +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_MyTRC21 *MyTRC21CallerSession) EstimateFee(value *big.Int) (*big.Int, error) { + return _MyTRC21.Contract.EstimateFee(&_MyTRC21.CallOpts, value) +} + +// GetBurn is a free data retrieval call binding the contract method 0x2eb3f49b. +// +// Solidity: function getBurn(burnId uint256) constant returns(_burner address, _value uint256, _data bytes) +func (_MyTRC21 *MyTRC21Caller) GetBurn(opts *bind.CallOpts, burnId *big.Int) (struct { + Burner common.Address + Value *big.Int + Data []byte +}, error) { + ret := new(struct { + Burner common.Address + Value *big.Int + Data []byte + }) + out := &[]interface{}{ + ret, + } + err := _MyTRC21.contract.Call(opts, out, "getBurn", burnId) + return *ret, err +} + +// GetBurn is a free data retrieval call binding the contract method 0x2eb3f49b. +// +// Solidity: function getBurn(burnId uint256) constant returns(_burner address, _value uint256, _data bytes) +func (_MyTRC21 *MyTRC21Session) GetBurn(burnId *big.Int) (struct { + Burner common.Address + Value *big.Int + Data []byte +}, error) { + return _MyTRC21.Contract.GetBurn(&_MyTRC21.CallOpts, burnId) +} + +// GetBurn is a free data retrieval call binding the contract method 0x2eb3f49b. +// +// Solidity: function getBurn(burnId uint256) constant returns(_burner address, _value uint256, _data bytes) +func (_MyTRC21 *MyTRC21CallerSession) GetBurn(burnId *big.Int) (struct { + Burner common.Address + Value *big.Int + Data []byte +}, error) { + return _MyTRC21.Contract.GetBurn(&_MyTRC21.CallOpts, burnId) +} + +// GetBurnCount is a free data retrieval call binding the contract method 0xe7cf548c. +// +// Solidity: function getBurnCount() constant returns(uint256) +func (_MyTRC21 *MyTRC21Caller) GetBurnCount(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "getBurnCount") + return *ret0, err +} + +// GetBurnCount is a free data retrieval call binding the contract method 0xe7cf548c. +// +// Solidity: function getBurnCount() constant returns(uint256) +func (_MyTRC21 *MyTRC21Session) GetBurnCount() (*big.Int, error) { + return _MyTRC21.Contract.GetBurnCount(&_MyTRC21.CallOpts) +} + +// GetBurnCount is a free data retrieval call binding the contract method 0xe7cf548c. +// +// Solidity: function getBurnCount() constant returns(uint256) +func (_MyTRC21 *MyTRC21CallerSession) GetBurnCount() (*big.Int, error) { + return _MyTRC21.Contract.GetBurnCount(&_MyTRC21.CallOpts) +} + +// GetConfirmationCount is a free data retrieval call binding the contract method 0x8b51d13f. +// +// Solidity: function getConfirmationCount(transactionId uint256) constant returns(count uint256) +func (_MyTRC21 *MyTRC21Caller) GetConfirmationCount(opts *bind.CallOpts, transactionId *big.Int) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "getConfirmationCount", transactionId) + return *ret0, err +} + +// GetConfirmationCount is a free data retrieval call binding the contract method 0x8b51d13f. +// +// Solidity: function getConfirmationCount(transactionId uint256) constant returns(count uint256) +func (_MyTRC21 *MyTRC21Session) GetConfirmationCount(transactionId *big.Int) (*big.Int, error) { + return _MyTRC21.Contract.GetConfirmationCount(&_MyTRC21.CallOpts, transactionId) +} + +// GetConfirmationCount is a free data retrieval call binding the contract method 0x8b51d13f. +// +// Solidity: function getConfirmationCount(transactionId uint256) constant returns(count uint256) +func (_MyTRC21 *MyTRC21CallerSession) GetConfirmationCount(transactionId *big.Int) (*big.Int, error) { + return _MyTRC21.Contract.GetConfirmationCount(&_MyTRC21.CallOpts, transactionId) +} + +// GetConfirmations is a free data retrieval call binding the contract method 0xb5dc40c3. +// +// Solidity: function getConfirmations(transactionId uint256) constant returns(_confirmations address[]) +func (_MyTRC21 *MyTRC21Caller) GetConfirmations(opts *bind.CallOpts, transactionId *big.Int) ([]common.Address, error) { + var ( + ret0 = new([]common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "getConfirmations", transactionId) + return *ret0, err +} + +// GetConfirmations is a free data retrieval call binding the contract method 0xb5dc40c3. +// +// Solidity: function getConfirmations(transactionId uint256) constant returns(_confirmations address[]) +func (_MyTRC21 *MyTRC21Session) GetConfirmations(transactionId *big.Int) ([]common.Address, error) { + return _MyTRC21.Contract.GetConfirmations(&_MyTRC21.CallOpts, transactionId) +} + +// GetConfirmations is a free data retrieval call binding the contract method 0xb5dc40c3. +// +// Solidity: function getConfirmations(transactionId uint256) constant returns(_confirmations address[]) +func (_MyTRC21 *MyTRC21CallerSession) GetConfirmations(transactionId *big.Int) ([]common.Address, error) { + return _MyTRC21.Contract.GetConfirmations(&_MyTRC21.CallOpts, transactionId) +} + +// GetOwners is a free data retrieval call binding the contract method 0xa0e67e2b. +// +// Solidity: function getOwners() constant returns(address[]) +func (_MyTRC21 *MyTRC21Caller) GetOwners(opts *bind.CallOpts) ([]common.Address, error) { + var ( + ret0 = new([]common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "getOwners") + return *ret0, err +} + +// GetOwners is a free data retrieval call binding the contract method 0xa0e67e2b. +// +// Solidity: function getOwners() constant returns(address[]) +func (_MyTRC21 *MyTRC21Session) GetOwners() ([]common.Address, error) { + return _MyTRC21.Contract.GetOwners(&_MyTRC21.CallOpts) +} + +// GetOwners is a free data retrieval call binding the contract method 0xa0e67e2b. +// +// Solidity: function getOwners() constant returns(address[]) +func (_MyTRC21 *MyTRC21CallerSession) GetOwners() ([]common.Address, error) { + return _MyTRC21.Contract.GetOwners(&_MyTRC21.CallOpts) +} + +// GetTransactionCount is a free data retrieval call binding the contract method 0x54741525. +// +// Solidity: function getTransactionCount(pending bool, executed bool) constant returns(count uint256) +func (_MyTRC21 *MyTRC21Caller) GetTransactionCount(opts *bind.CallOpts, pending bool, executed bool) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "getTransactionCount", pending, executed) + return *ret0, err +} + +// GetTransactionCount is a free data retrieval call binding the contract method 0x54741525. +// +// Solidity: function getTransactionCount(pending bool, executed bool) constant returns(count uint256) +func (_MyTRC21 *MyTRC21Session) GetTransactionCount(pending bool, executed bool) (*big.Int, error) { + return _MyTRC21.Contract.GetTransactionCount(&_MyTRC21.CallOpts, pending, executed) +} + +// GetTransactionCount is a free data retrieval call binding the contract method 0x54741525. +// +// Solidity: function getTransactionCount(pending bool, executed bool) constant returns(count uint256) +func (_MyTRC21 *MyTRC21CallerSession) GetTransactionCount(pending bool, executed bool) (*big.Int, error) { + return _MyTRC21.Contract.GetTransactionCount(&_MyTRC21.CallOpts, pending, executed) +} + +// GetTransactionIds is a free data retrieval call binding the contract method 0xa8abe69a. +// +// Solidity: function getTransactionIds(from uint256, to uint256, pending bool, executed bool) constant returns(_transactionIds uint256[]) +func (_MyTRC21 *MyTRC21Caller) GetTransactionIds(opts *bind.CallOpts, from *big.Int, to *big.Int, pending bool, executed bool) ([]*big.Int, error) { + var ( + ret0 = new([]*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "getTransactionIds", from, to, pending, executed) + return *ret0, err +} + +// GetTransactionIds is a free data retrieval call binding the contract method 0xa8abe69a. +// +// Solidity: function getTransactionIds(from uint256, to uint256, pending bool, executed bool) constant returns(_transactionIds uint256[]) +func (_MyTRC21 *MyTRC21Session) GetTransactionIds(from *big.Int, to *big.Int, pending bool, executed bool) ([]*big.Int, error) { + return _MyTRC21.Contract.GetTransactionIds(&_MyTRC21.CallOpts, from, to, pending, executed) +} + +// GetTransactionIds is a free data retrieval call binding the contract method 0xa8abe69a. +// +// Solidity: function getTransactionIds(from uint256, to uint256, pending bool, executed bool) constant returns(_transactionIds uint256[]) +func (_MyTRC21 *MyTRC21CallerSession) GetTransactionIds(from *big.Int, to *big.Int, pending bool, executed bool) ([]*big.Int, error) { + return _MyTRC21.Contract.GetTransactionIds(&_MyTRC21.CallOpts, from, to, pending, executed) +} + +// IsConfirmed is a free data retrieval call binding the contract method 0x784547a7. +// +// Solidity: function isConfirmed(transactionId uint256) constant returns(bool) +func (_MyTRC21 *MyTRC21Caller) IsConfirmed(opts *bind.CallOpts, transactionId *big.Int) (bool, error) { + var ( + ret0 = new(bool) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "isConfirmed", transactionId) + return *ret0, err +} + +// IsConfirmed is a free data retrieval call binding the contract method 0x784547a7. +// +// Solidity: function isConfirmed(transactionId uint256) constant returns(bool) +func (_MyTRC21 *MyTRC21Session) IsConfirmed(transactionId *big.Int) (bool, error) { + return _MyTRC21.Contract.IsConfirmed(&_MyTRC21.CallOpts, transactionId) +} + +// IsConfirmed is a free data retrieval call binding the contract method 0x784547a7. +// +// Solidity: function isConfirmed(transactionId uint256) constant returns(bool) +func (_MyTRC21 *MyTRC21CallerSession) IsConfirmed(transactionId *big.Int) (bool, error) { + return _MyTRC21.Contract.IsConfirmed(&_MyTRC21.CallOpts, transactionId) +} + +// IsOwner is a free data retrieval call binding the contract method 0x2f54bf6e. +// +// Solidity: function isOwner( address) constant returns(bool) +func (_MyTRC21 *MyTRC21Caller) IsOwner(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var ( + ret0 = new(bool) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "isOwner", arg0) + return *ret0, err +} + +// IsOwner is a free data retrieval call binding the contract method 0x2f54bf6e. +// +// Solidity: function isOwner( address) constant returns(bool) +func (_MyTRC21 *MyTRC21Session) IsOwner(arg0 common.Address) (bool, error) { + return _MyTRC21.Contract.IsOwner(&_MyTRC21.CallOpts, arg0) +} + +// IsOwner is a free data retrieval call binding the contract method 0x2f54bf6e. +// +// Solidity: function isOwner( address) constant returns(bool) +func (_MyTRC21 *MyTRC21CallerSession) IsOwner(arg0 common.Address) (bool, error) { + return _MyTRC21.Contract.IsOwner(&_MyTRC21.CallOpts, arg0) +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_MyTRC21 *MyTRC21Caller) Issuer(opts *bind.CallOpts) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "issuer") + return *ret0, err +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_MyTRC21 *MyTRC21Session) Issuer() (common.Address, error) { + return _MyTRC21.Contract.Issuer(&_MyTRC21.CallOpts) +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_MyTRC21 *MyTRC21CallerSession) Issuer() (common.Address, error) { + return _MyTRC21.Contract.Issuer(&_MyTRC21.CallOpts) +} + +// MinFee is a free data retrieval call binding the contract method 0x24ec7590. +// +// Solidity: function minFee() constant returns(uint256) +func (_MyTRC21 *MyTRC21Caller) MinFee(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "minFee") + return *ret0, err +} + +// MinFee is a free data retrieval call binding the contract method 0x24ec7590. +// +// Solidity: function minFee() constant returns(uint256) +func (_MyTRC21 *MyTRC21Session) MinFee() (*big.Int, error) { + return _MyTRC21.Contract.MinFee(&_MyTRC21.CallOpts) +} + +// MinFee is a free data retrieval call binding the contract method 0x24ec7590. +// +// Solidity: function minFee() constant returns(uint256) +func (_MyTRC21 *MyTRC21CallerSession) MinFee() (*big.Int, error) { + return _MyTRC21.Contract.MinFee(&_MyTRC21.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() constant returns(string) +func (_MyTRC21 *MyTRC21Caller) Name(opts *bind.CallOpts) (string, error) { + var ( + ret0 = new(string) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "name") + return *ret0, err +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() constant returns(string) +func (_MyTRC21 *MyTRC21Session) Name() (string, error) { + return _MyTRC21.Contract.Name(&_MyTRC21.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() constant returns(string) +func (_MyTRC21 *MyTRC21CallerSession) Name() (string, error) { + return _MyTRC21.Contract.Name(&_MyTRC21.CallOpts) +} + +// Owners is a free data retrieval call binding the contract method 0x025e7c27. +// +// Solidity: function owners( uint256) constant returns(address) +func (_MyTRC21 *MyTRC21Caller) Owners(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "owners", arg0) + return *ret0, err +} + +// Owners is a free data retrieval call binding the contract method 0x025e7c27. +// +// Solidity: function owners( uint256) constant returns(address) +func (_MyTRC21 *MyTRC21Session) Owners(arg0 *big.Int) (common.Address, error) { + return _MyTRC21.Contract.Owners(&_MyTRC21.CallOpts, arg0) +} + +// Owners is a free data retrieval call binding the contract method 0x025e7c27. +// +// Solidity: function owners( uint256) constant returns(address) +func (_MyTRC21 *MyTRC21CallerSession) Owners(arg0 *big.Int) (common.Address, error) { + return _MyTRC21.Contract.Owners(&_MyTRC21.CallOpts, arg0) +} + +// Required is a free data retrieval call binding the contract method 0xdc8452cd. +// +// Solidity: function required() constant returns(uint256) +func (_MyTRC21 *MyTRC21Caller) Required(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "required") + return *ret0, err +} + +// Required is a free data retrieval call binding the contract method 0xdc8452cd. +// +// Solidity: function required() constant returns(uint256) +func (_MyTRC21 *MyTRC21Session) Required() (*big.Int, error) { + return _MyTRC21.Contract.Required(&_MyTRC21.CallOpts) +} + +// Required is a free data retrieval call binding the contract method 0xdc8452cd. +// +// Solidity: function required() constant returns(uint256) +func (_MyTRC21 *MyTRC21CallerSession) Required() (*big.Int, error) { + return _MyTRC21.Contract.Required(&_MyTRC21.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() constant returns(string) +func (_MyTRC21 *MyTRC21Caller) Symbol(opts *bind.CallOpts) (string, error) { + var ( + ret0 = new(string) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "symbol") + return *ret0, err +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() constant returns(string) +func (_MyTRC21 *MyTRC21Session) Symbol() (string, error) { + return _MyTRC21.Contract.Symbol(&_MyTRC21.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() constant returns(string) +func (_MyTRC21 *MyTRC21CallerSession) Symbol() (string, error) { + return _MyTRC21.Contract.Symbol(&_MyTRC21.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_MyTRC21 *MyTRC21Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "totalSupply") + return *ret0, err +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_MyTRC21 *MyTRC21Session) TotalSupply() (*big.Int, error) { + return _MyTRC21.Contract.TotalSupply(&_MyTRC21.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_MyTRC21 *MyTRC21CallerSession) TotalSupply() (*big.Int, error) { + return _MyTRC21.Contract.TotalSupply(&_MyTRC21.CallOpts) +} + +// TransactionCount is a free data retrieval call binding the contract method 0xb77bf600. +// +// Solidity: function transactionCount() constant returns(uint256) +func (_MyTRC21 *MyTRC21Caller) TransactionCount(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "transactionCount") + return *ret0, err +} + +// TransactionCount is a free data retrieval call binding the contract method 0xb77bf600. +// +// Solidity: function transactionCount() constant returns(uint256) +func (_MyTRC21 *MyTRC21Session) TransactionCount() (*big.Int, error) { + return _MyTRC21.Contract.TransactionCount(&_MyTRC21.CallOpts) +} + +// TransactionCount is a free data retrieval call binding the contract method 0xb77bf600. +// +// Solidity: function transactionCount() constant returns(uint256) +func (_MyTRC21 *MyTRC21CallerSession) TransactionCount() (*big.Int, error) { + return _MyTRC21.Contract.TransactionCount(&_MyTRC21.CallOpts) +} + +// Transactions is a free data retrieval call binding the contract method 0x9ace38c2. +// +// Solidity: function transactions( uint256) constant returns(destination address, value uint256, data bytes, executed bool) +func (_MyTRC21 *MyTRC21Caller) Transactions(opts *bind.CallOpts, arg0 *big.Int) (struct { + Destination common.Address + Value *big.Int + Data []byte + Executed bool +}, error) { + ret := new(struct { + Destination common.Address + Value *big.Int + Data []byte + Executed bool + }) + out := &[]interface{}{ + ret, + } + err := _MyTRC21.contract.Call(opts, out, "transactions", arg0) + return *ret, err +} + +// Transactions is a free data retrieval call binding the contract method 0x9ace38c2. +// +// Solidity: function transactions( uint256) constant returns(destination address, value uint256, data bytes, executed bool) +func (_MyTRC21 *MyTRC21Session) Transactions(arg0 *big.Int) (struct { + Destination common.Address + Value *big.Int + Data []byte + Executed bool +}, error) { + return _MyTRC21.Contract.Transactions(&_MyTRC21.CallOpts, arg0) +} + +// Transactions is a free data retrieval call binding the contract method 0x9ace38c2. +// +// Solidity: function transactions( uint256) constant returns(destination address, value uint256, data bytes, executed bool) +func (_MyTRC21 *MyTRC21CallerSession) Transactions(arg0 *big.Int) (struct { + Destination common.Address + Value *big.Int + Data []byte + Executed bool +}, error) { + return _MyTRC21.Contract.Transactions(&_MyTRC21.CallOpts, arg0) +} + +// AddOwner is a paid mutator transaction binding the contract method 0x7065cb48. +// +// Solidity: function addOwner(owner address) returns() +func (_MyTRC21 *MyTRC21Transactor) AddOwner(opts *bind.TransactOpts, owner common.Address) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "addOwner", owner) +} + +// AddOwner is a paid mutator transaction binding the contract method 0x7065cb48. +// +// Solidity: function addOwner(owner address) returns() +func (_MyTRC21 *MyTRC21Session) AddOwner(owner common.Address) (*types.Transaction, error) { + return _MyTRC21.Contract.AddOwner(&_MyTRC21.TransactOpts, owner) +} + +// AddOwner is a paid mutator transaction binding the contract method 0x7065cb48. +// +// Solidity: function addOwner(owner address) returns() +func (_MyTRC21 *MyTRC21TransactorSession) AddOwner(owner common.Address) (*types.Transaction, error) { + return _MyTRC21.Contract.AddOwner(&_MyTRC21.TransactOpts, owner) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21Transactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "approve", spender, value) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21Session) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.Approve(&_MyTRC21.TransactOpts, spender, value) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21TransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.Approve(&_MyTRC21.TransactOpts, spender, value) +} + +// Burn is a paid mutator transaction binding the contract method 0xfe9d9303. +// +// Solidity: function burn(value uint256, data bytes) returns() +func (_MyTRC21 *MyTRC21Transactor) Burn(opts *bind.TransactOpts, value *big.Int, data []byte) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "burn", value, data) +} + +// Burn is a paid mutator transaction binding the contract method 0xfe9d9303. +// +// Solidity: function burn(value uint256, data bytes) returns() +func (_MyTRC21 *MyTRC21Session) Burn(value *big.Int, data []byte) (*types.Transaction, error) { + return _MyTRC21.Contract.Burn(&_MyTRC21.TransactOpts, value, data) +} + +// Burn is a paid mutator transaction binding the contract method 0xfe9d9303. +// +// Solidity: function burn(value uint256, data bytes) returns() +func (_MyTRC21 *MyTRC21TransactorSession) Burn(value *big.Int, data []byte) (*types.Transaction, error) { + return _MyTRC21.Contract.Burn(&_MyTRC21.TransactOpts, value, data) +} + +// ChangeRequirement is a paid mutator transaction binding the contract method 0xba51a6df. +// +// Solidity: function changeRequirement(_required uint256) returns() +func (_MyTRC21 *MyTRC21Transactor) ChangeRequirement(opts *bind.TransactOpts, _required *big.Int) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "changeRequirement", _required) +} + +// ChangeRequirement is a paid mutator transaction binding the contract method 0xba51a6df. +// +// Solidity: function changeRequirement(_required uint256) returns() +func (_MyTRC21 *MyTRC21Session) ChangeRequirement(_required *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.ChangeRequirement(&_MyTRC21.TransactOpts, _required) +} + +// ChangeRequirement is a paid mutator transaction binding the contract method 0xba51a6df. +// +// Solidity: function changeRequirement(_required uint256) returns() +func (_MyTRC21 *MyTRC21TransactorSession) ChangeRequirement(_required *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.ChangeRequirement(&_MyTRC21.TransactOpts, _required) +} + +// ConfirmTransaction is a paid mutator transaction binding the contract method 0xc01a8c84. +// +// Solidity: function confirmTransaction(transactionId uint256) returns() +func (_MyTRC21 *MyTRC21Transactor) ConfirmTransaction(opts *bind.TransactOpts, transactionId *big.Int) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "confirmTransaction", transactionId) +} + +// ConfirmTransaction is a paid mutator transaction binding the contract method 0xc01a8c84. +// +// Solidity: function confirmTransaction(transactionId uint256) returns() +func (_MyTRC21 *MyTRC21Session) ConfirmTransaction(transactionId *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.ConfirmTransaction(&_MyTRC21.TransactOpts, transactionId) +} + +// ConfirmTransaction is a paid mutator transaction binding the contract method 0xc01a8c84. +// +// Solidity: function confirmTransaction(transactionId uint256) returns() +func (_MyTRC21 *MyTRC21TransactorSession) ConfirmTransaction(transactionId *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.ConfirmTransaction(&_MyTRC21.TransactOpts, transactionId) +} + +// ExecuteTransaction is a paid mutator transaction binding the contract method 0xee22610b. +// +// Solidity: function executeTransaction(transactionId uint256) returns() +func (_MyTRC21 *MyTRC21Transactor) ExecuteTransaction(opts *bind.TransactOpts, transactionId *big.Int) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "executeTransaction", transactionId) +} + +// ExecuteTransaction is a paid mutator transaction binding the contract method 0xee22610b. +// +// Solidity: function executeTransaction(transactionId uint256) returns() +func (_MyTRC21 *MyTRC21Session) ExecuteTransaction(transactionId *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.ExecuteTransaction(&_MyTRC21.TransactOpts, transactionId) +} + +// ExecuteTransaction is a paid mutator transaction binding the contract method 0xee22610b. +// +// Solidity: function executeTransaction(transactionId uint256) returns() +func (_MyTRC21 *MyTRC21TransactorSession) ExecuteTransaction(transactionId *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.ExecuteTransaction(&_MyTRC21.TransactOpts, transactionId) +} + +// RemoveOwner is a paid mutator transaction binding the contract method 0x173825d9. +// +// Solidity: function removeOwner(owner address) returns() +func (_MyTRC21 *MyTRC21Transactor) RemoveOwner(opts *bind.TransactOpts, owner common.Address) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "removeOwner", owner) +} + +// RemoveOwner is a paid mutator transaction binding the contract method 0x173825d9. +// +// Solidity: function removeOwner(owner address) returns() +func (_MyTRC21 *MyTRC21Session) RemoveOwner(owner common.Address) (*types.Transaction, error) { + return _MyTRC21.Contract.RemoveOwner(&_MyTRC21.TransactOpts, owner) +} + +// RemoveOwner is a paid mutator transaction binding the contract method 0x173825d9. +// +// Solidity: function removeOwner(owner address) returns() +func (_MyTRC21 *MyTRC21TransactorSession) RemoveOwner(owner common.Address) (*types.Transaction, error) { + return _MyTRC21.Contract.RemoveOwner(&_MyTRC21.TransactOpts, owner) +} + +// ReplaceOwner is a paid mutator transaction binding the contract method 0xe20056e6. +// +// Solidity: function replaceOwner(owner address, newOwner address) returns() +func (_MyTRC21 *MyTRC21Transactor) ReplaceOwner(opts *bind.TransactOpts, owner common.Address, newOwner common.Address) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "replaceOwner", owner, newOwner) +} + +// ReplaceOwner is a paid mutator transaction binding the contract method 0xe20056e6. +// +// Solidity: function replaceOwner(owner address, newOwner address) returns() +func (_MyTRC21 *MyTRC21Session) ReplaceOwner(owner common.Address, newOwner common.Address) (*types.Transaction, error) { + return _MyTRC21.Contract.ReplaceOwner(&_MyTRC21.TransactOpts, owner, newOwner) +} + +// ReplaceOwner is a paid mutator transaction binding the contract method 0xe20056e6. +// +// Solidity: function replaceOwner(owner address, newOwner address) returns() +func (_MyTRC21 *MyTRC21TransactorSession) ReplaceOwner(owner common.Address, newOwner common.Address) (*types.Transaction, error) { + return _MyTRC21.Contract.ReplaceOwner(&_MyTRC21.TransactOpts, owner, newOwner) +} + +// RevokeConfirmation is a paid mutator transaction binding the contract method 0x20ea8d86. +// +// Solidity: function revokeConfirmation(transactionId uint256) returns() +func (_MyTRC21 *MyTRC21Transactor) RevokeConfirmation(opts *bind.TransactOpts, transactionId *big.Int) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "revokeConfirmation", transactionId) +} + +// RevokeConfirmation is a paid mutator transaction binding the contract method 0x20ea8d86. +// +// Solidity: function revokeConfirmation(transactionId uint256) returns() +func (_MyTRC21 *MyTRC21Session) RevokeConfirmation(transactionId *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.RevokeConfirmation(&_MyTRC21.TransactOpts, transactionId) +} + +// RevokeConfirmation is a paid mutator transaction binding the contract method 0x20ea8d86. +// +// Solidity: function revokeConfirmation(transactionId uint256) returns() +func (_MyTRC21 *MyTRC21TransactorSession) RevokeConfirmation(transactionId *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.RevokeConfirmation(&_MyTRC21.TransactOpts, transactionId) +} + +// SetDepositFee is a paid mutator transaction binding the contract method 0x490ae210. +// +// Solidity: function setDepositFee(depositFee uint256) returns() +func (_MyTRC21 *MyTRC21Transactor) SetDepositFee(opts *bind.TransactOpts, depositFee *big.Int) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "setDepositFee", depositFee) +} + +// SetDepositFee is a paid mutator transaction binding the contract method 0x490ae210. +// +// Solidity: function setDepositFee(depositFee uint256) returns() +func (_MyTRC21 *MyTRC21Session) SetDepositFee(depositFee *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.SetDepositFee(&_MyTRC21.TransactOpts, depositFee) +} + +// SetDepositFee is a paid mutator transaction binding the contract method 0x490ae210. +// +// Solidity: function setDepositFee(depositFee uint256) returns() +func (_MyTRC21 *MyTRC21TransactorSession) SetDepositFee(depositFee *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.SetDepositFee(&_MyTRC21.TransactOpts, depositFee) +} + +// SetMinFee is a paid mutator transaction binding the contract method 0x31ac9920. +// +// Solidity: function setMinFee(value uint256) returns() +func (_MyTRC21 *MyTRC21Transactor) SetMinFee(opts *bind.TransactOpts, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "setMinFee", value) +} + +// SetMinFee is a paid mutator transaction binding the contract method 0x31ac9920. +// +// Solidity: function setMinFee(value uint256) returns() +func (_MyTRC21 *MyTRC21Session) SetMinFee(value *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.SetMinFee(&_MyTRC21.TransactOpts, value) +} + +// SetMinFee is a paid mutator transaction binding the contract method 0x31ac9920. +// +// Solidity: function setMinFee(value uint256) returns() +func (_MyTRC21 *MyTRC21TransactorSession) SetMinFee(value *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.SetMinFee(&_MyTRC21.TransactOpts, value) +} + +// SetWithdrawFee is a paid mutator transaction binding the contract method 0xb6ac642a. +// +// Solidity: function setWithdrawFee(withdrawFee uint256) returns() +func (_MyTRC21 *MyTRC21Transactor) SetWithdrawFee(opts *bind.TransactOpts, withdrawFee *big.Int) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "setWithdrawFee", withdrawFee) +} + +// SetWithdrawFee is a paid mutator transaction binding the contract method 0xb6ac642a. +// +// Solidity: function setWithdrawFee(withdrawFee uint256) returns() +func (_MyTRC21 *MyTRC21Session) SetWithdrawFee(withdrawFee *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.SetWithdrawFee(&_MyTRC21.TransactOpts, withdrawFee) +} + +// SetWithdrawFee is a paid mutator transaction binding the contract method 0xb6ac642a. +// +// Solidity: function setWithdrawFee(withdrawFee uint256) returns() +func (_MyTRC21 *MyTRC21TransactorSession) SetWithdrawFee(withdrawFee *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.SetWithdrawFee(&_MyTRC21.TransactOpts, withdrawFee) +} + +// SubmitTransaction is a paid mutator transaction binding the contract method 0xc6427474. +// +// Solidity: function submitTransaction(destination address, value uint256, data bytes) returns(transactionId uint256) +func (_MyTRC21 *MyTRC21Transactor) SubmitTransaction(opts *bind.TransactOpts, destination common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "submitTransaction", destination, value, data) +} + +// SubmitTransaction is a paid mutator transaction binding the contract method 0xc6427474. +// +// Solidity: function submitTransaction(destination address, value uint256, data bytes) returns(transactionId uint256) +func (_MyTRC21 *MyTRC21Session) SubmitTransaction(destination common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _MyTRC21.Contract.SubmitTransaction(&_MyTRC21.TransactOpts, destination, value, data) +} + +// SubmitTransaction is a paid mutator transaction binding the contract method 0xc6427474. +// +// Solidity: function submitTransaction(destination address, value uint256, data bytes) returns(transactionId uint256) +func (_MyTRC21 *MyTRC21TransactorSession) SubmitTransaction(destination common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _MyTRC21.Contract.SubmitTransaction(&_MyTRC21.TransactOpts, destination, value, data) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21Transactor) Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "transfer", to, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21Session) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.Transfer(&_MyTRC21.TransactOpts, to, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21TransactorSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.Transfer(&_MyTRC21.TransactOpts, to, value) +} + +// TransferContractIssuer is a paid mutator transaction binding the contract method 0xc28ce6ff. +// +// Solidity: function transferContractIssuer(newOwner address) returns() +func (_MyTRC21 *MyTRC21Transactor) TransferContractIssuer(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "transferContractIssuer", newOwner) +} + +// TransferContractIssuer is a paid mutator transaction binding the contract method 0xc28ce6ff. +// +// Solidity: function transferContractIssuer(newOwner address) returns() +func (_MyTRC21 *MyTRC21Session) TransferContractIssuer(newOwner common.Address) (*types.Transaction, error) { + return _MyTRC21.Contract.TransferContractIssuer(&_MyTRC21.TransactOpts, newOwner) +} + +// TransferContractIssuer is a paid mutator transaction binding the contract method 0xc28ce6ff. +// +// Solidity: function transferContractIssuer(newOwner address) returns() +func (_MyTRC21 *MyTRC21TransactorSession) TransferContractIssuer(newOwner common.Address) (*types.Transaction, error) { + return _MyTRC21.Contract.TransferContractIssuer(&_MyTRC21.TransactOpts, newOwner) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "transferFrom", from, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21Session) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.TransferFrom(&_MyTRC21.TransactOpts, from, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21TransactorSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.TransferFrom(&_MyTRC21.TransactOpts, from, to, value) +} + +// MyTRC21ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the MyTRC21 contract. +type MyTRC21ApprovalIterator struct { + Event *MyTRC21Approval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MyTRC21ApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MyTRC21Approval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MyTRC21Approval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MyTRC21ApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MyTRC21ApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MyTRC21Approval represents a Approval event raised by the MyTRC21 contract. +type MyTRC21Approval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(owner indexed address, spender indexed address, value uint256) +func (_MyTRC21 *MyTRC21Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*MyTRC21ApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _MyTRC21.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &MyTRC21ApprovalIterator{contract: _MyTRC21.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(owner indexed address, spender indexed address, value uint256) +func (_MyTRC21 *MyTRC21Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *MyTRC21Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _MyTRC21.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MyTRC21Approval) + if err := _MyTRC21.contract.UnpackLog(event, "Approval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MyTRC21ConfirmationIterator is returned from FilterConfirmation and is used to iterate over the raw logs and unpacked data for Confirmation events raised by the MyTRC21 contract. +type MyTRC21ConfirmationIterator struct { + Event *MyTRC21Confirmation // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MyTRC21ConfirmationIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MyTRC21Confirmation) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MyTRC21Confirmation) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MyTRC21ConfirmationIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MyTRC21ConfirmationIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MyTRC21Confirmation represents a Confirmation event raised by the MyTRC21 contract. +type MyTRC21Confirmation struct { + Sender common.Address + TransactionId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterConfirmation is a free log retrieval operation binding the contract event 0x4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef. +// +// Solidity: event Confirmation(sender indexed address, transactionId indexed uint256) +func (_MyTRC21 *MyTRC21Filterer) FilterConfirmation(opts *bind.FilterOpts, sender []common.Address, transactionId []*big.Int) (*MyTRC21ConfirmationIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MyTRC21.contract.FilterLogs(opts, "Confirmation", senderRule, transactionIdRule) + if err != nil { + return nil, err + } + return &MyTRC21ConfirmationIterator{contract: _MyTRC21.contract, event: "Confirmation", logs: logs, sub: sub}, nil +} + +// WatchConfirmation is a free log subscription operation binding the contract event 0x4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef. +// +// Solidity: event Confirmation(sender indexed address, transactionId indexed uint256) +func (_MyTRC21 *MyTRC21Filterer) WatchConfirmation(opts *bind.WatchOpts, sink chan<- *MyTRC21Confirmation, sender []common.Address, transactionId []*big.Int) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MyTRC21.contract.WatchLogs(opts, "Confirmation", senderRule, transactionIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MyTRC21Confirmation) + if err := _MyTRC21.contract.UnpackLog(event, "Confirmation", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MyTRC21ExecutionIterator is returned from FilterExecution and is used to iterate over the raw logs and unpacked data for Execution events raised by the MyTRC21 contract. +type MyTRC21ExecutionIterator struct { + Event *MyTRC21Execution // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MyTRC21ExecutionIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MyTRC21Execution) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MyTRC21Execution) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MyTRC21ExecutionIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MyTRC21ExecutionIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MyTRC21Execution represents a Execution event raised by the MyTRC21 contract. +type MyTRC21Execution struct { + TransactionId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecution is a free log retrieval operation binding the contract event 0x33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed75. +// +// Solidity: event Execution(transactionId indexed uint256) +func (_MyTRC21 *MyTRC21Filterer) FilterExecution(opts *bind.FilterOpts, transactionId []*big.Int) (*MyTRC21ExecutionIterator, error) { + + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MyTRC21.contract.FilterLogs(opts, "Execution", transactionIdRule) + if err != nil { + return nil, err + } + return &MyTRC21ExecutionIterator{contract: _MyTRC21.contract, event: "Execution", logs: logs, sub: sub}, nil +} + +// WatchExecution is a free log subscription operation binding the contract event 0x33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed75. +// +// Solidity: event Execution(transactionId indexed uint256) +func (_MyTRC21 *MyTRC21Filterer) WatchExecution(opts *bind.WatchOpts, sink chan<- *MyTRC21Execution, transactionId []*big.Int) (event.Subscription, error) { + + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MyTRC21.contract.WatchLogs(opts, "Execution", transactionIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MyTRC21Execution) + if err := _MyTRC21.contract.UnpackLog(event, "Execution", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MyTRC21ExecutionFailureIterator is returned from FilterExecutionFailure and is used to iterate over the raw logs and unpacked data for ExecutionFailure events raised by the MyTRC21 contract. +type MyTRC21ExecutionFailureIterator struct { + Event *MyTRC21ExecutionFailure // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MyTRC21ExecutionFailureIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MyTRC21ExecutionFailure) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MyTRC21ExecutionFailure) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MyTRC21ExecutionFailureIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MyTRC21ExecutionFailureIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MyTRC21ExecutionFailure represents a ExecutionFailure event raised by the MyTRC21 contract. +type MyTRC21ExecutionFailure struct { + TransactionId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecutionFailure is a free log retrieval operation binding the contract event 0x526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b79236. +// +// Solidity: event ExecutionFailure(transactionId indexed uint256) +func (_MyTRC21 *MyTRC21Filterer) FilterExecutionFailure(opts *bind.FilterOpts, transactionId []*big.Int) (*MyTRC21ExecutionFailureIterator, error) { + + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MyTRC21.contract.FilterLogs(opts, "ExecutionFailure", transactionIdRule) + if err != nil { + return nil, err + } + return &MyTRC21ExecutionFailureIterator{contract: _MyTRC21.contract, event: "ExecutionFailure", logs: logs, sub: sub}, nil +} + +// WatchExecutionFailure is a free log subscription operation binding the contract event 0x526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b79236. +// +// Solidity: event ExecutionFailure(transactionId indexed uint256) +func (_MyTRC21 *MyTRC21Filterer) WatchExecutionFailure(opts *bind.WatchOpts, sink chan<- *MyTRC21ExecutionFailure, transactionId []*big.Int) (event.Subscription, error) { + + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MyTRC21.contract.WatchLogs(opts, "ExecutionFailure", transactionIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MyTRC21ExecutionFailure) + if err := _MyTRC21.contract.UnpackLog(event, "ExecutionFailure", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MyTRC21FeeIterator is returned from FilterFee and is used to iterate over the raw logs and unpacked data for Fee events raised by the MyTRC21 contract. +type MyTRC21FeeIterator struct { + Event *MyTRC21Fee // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MyTRC21FeeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MyTRC21Fee) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MyTRC21Fee) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MyTRC21FeeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MyTRC21FeeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MyTRC21Fee represents a Fee event raised by the MyTRC21 contract. +type MyTRC21Fee struct { + From common.Address + To common.Address + Issuer common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFee is a free log retrieval operation binding the contract event 0xfcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd99. +// +// Solidity: event Fee(from indexed address, to indexed address, issuer indexed address, value uint256) +func (_MyTRC21 *MyTRC21Filterer) FilterFee(opts *bind.FilterOpts, from []common.Address, to []common.Address, issuer []common.Address) (*MyTRC21FeeIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var issuerRule []interface{} + for _, issuerItem := range issuer { + issuerRule = append(issuerRule, issuerItem) + } + + logs, sub, err := _MyTRC21.contract.FilterLogs(opts, "Fee", fromRule, toRule, issuerRule) + if err != nil { + return nil, err + } + return &MyTRC21FeeIterator{contract: _MyTRC21.contract, event: "Fee", logs: logs, sub: sub}, nil +} + +// WatchFee is a free log subscription operation binding the contract event 0xfcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd99. +// +// Solidity: event Fee(from indexed address, to indexed address, issuer indexed address, value uint256) +func (_MyTRC21 *MyTRC21Filterer) WatchFee(opts *bind.WatchOpts, sink chan<- *MyTRC21Fee, from []common.Address, to []common.Address, issuer []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var issuerRule []interface{} + for _, issuerItem := range issuer { + issuerRule = append(issuerRule, issuerItem) + } + + logs, sub, err := _MyTRC21.contract.WatchLogs(opts, "Fee", fromRule, toRule, issuerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MyTRC21Fee) + if err := _MyTRC21.contract.UnpackLog(event, "Fee", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MyTRC21OwnerAdditionIterator is returned from FilterOwnerAddition and is used to iterate over the raw logs and unpacked data for OwnerAddition events raised by the MyTRC21 contract. +type MyTRC21OwnerAdditionIterator struct { + Event *MyTRC21OwnerAddition // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MyTRC21OwnerAdditionIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MyTRC21OwnerAddition) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MyTRC21OwnerAddition) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MyTRC21OwnerAdditionIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MyTRC21OwnerAdditionIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MyTRC21OwnerAddition represents a OwnerAddition event raised by the MyTRC21 contract. +type MyTRC21OwnerAddition struct { + Owner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnerAddition is a free log retrieval operation binding the contract event 0xf39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d. +// +// Solidity: event OwnerAddition(owner indexed address) +func (_MyTRC21 *MyTRC21Filterer) FilterOwnerAddition(opts *bind.FilterOpts, owner []common.Address) (*MyTRC21OwnerAdditionIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + + logs, sub, err := _MyTRC21.contract.FilterLogs(opts, "OwnerAddition", ownerRule) + if err != nil { + return nil, err + } + return &MyTRC21OwnerAdditionIterator{contract: _MyTRC21.contract, event: "OwnerAddition", logs: logs, sub: sub}, nil +} + +// WatchOwnerAddition is a free log subscription operation binding the contract event 0xf39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d. +// +// Solidity: event OwnerAddition(owner indexed address) +func (_MyTRC21 *MyTRC21Filterer) WatchOwnerAddition(opts *bind.WatchOpts, sink chan<- *MyTRC21OwnerAddition, owner []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + + logs, sub, err := _MyTRC21.contract.WatchLogs(opts, "OwnerAddition", ownerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MyTRC21OwnerAddition) + if err := _MyTRC21.contract.UnpackLog(event, "OwnerAddition", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MyTRC21OwnerRemovalIterator is returned from FilterOwnerRemoval and is used to iterate over the raw logs and unpacked data for OwnerRemoval events raised by the MyTRC21 contract. +type MyTRC21OwnerRemovalIterator struct { + Event *MyTRC21OwnerRemoval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MyTRC21OwnerRemovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MyTRC21OwnerRemoval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MyTRC21OwnerRemoval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MyTRC21OwnerRemovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MyTRC21OwnerRemovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MyTRC21OwnerRemoval represents a OwnerRemoval event raised by the MyTRC21 contract. +type MyTRC21OwnerRemoval struct { + Owner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnerRemoval is a free log retrieval operation binding the contract event 0x8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90. +// +// Solidity: event OwnerRemoval(owner indexed address) +func (_MyTRC21 *MyTRC21Filterer) FilterOwnerRemoval(opts *bind.FilterOpts, owner []common.Address) (*MyTRC21OwnerRemovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + + logs, sub, err := _MyTRC21.contract.FilterLogs(opts, "OwnerRemoval", ownerRule) + if err != nil { + return nil, err + } + return &MyTRC21OwnerRemovalIterator{contract: _MyTRC21.contract, event: "OwnerRemoval", logs: logs, sub: sub}, nil +} + +// WatchOwnerRemoval is a free log subscription operation binding the contract event 0x8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90. +// +// Solidity: event OwnerRemoval(owner indexed address) +func (_MyTRC21 *MyTRC21Filterer) WatchOwnerRemoval(opts *bind.WatchOpts, sink chan<- *MyTRC21OwnerRemoval, owner []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + + logs, sub, err := _MyTRC21.contract.WatchLogs(opts, "OwnerRemoval", ownerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MyTRC21OwnerRemoval) + if err := _MyTRC21.contract.UnpackLog(event, "OwnerRemoval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MyTRC21RequirementChangeIterator is returned from FilterRequirementChange and is used to iterate over the raw logs and unpacked data for RequirementChange events raised by the MyTRC21 contract. +type MyTRC21RequirementChangeIterator struct { + Event *MyTRC21RequirementChange // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MyTRC21RequirementChangeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MyTRC21RequirementChange) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MyTRC21RequirementChange) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MyTRC21RequirementChangeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MyTRC21RequirementChangeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MyTRC21RequirementChange represents a RequirementChange event raised by the MyTRC21 contract. +type MyTRC21RequirementChange struct { + Required *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRequirementChange is a free log retrieval operation binding the contract event 0xa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a. +// +// Solidity: event RequirementChange(required uint256) +func (_MyTRC21 *MyTRC21Filterer) FilterRequirementChange(opts *bind.FilterOpts) (*MyTRC21RequirementChangeIterator, error) { + + logs, sub, err := _MyTRC21.contract.FilterLogs(opts, "RequirementChange") + if err != nil { + return nil, err + } + return &MyTRC21RequirementChangeIterator{contract: _MyTRC21.contract, event: "RequirementChange", logs: logs, sub: sub}, nil +} + +// WatchRequirementChange is a free log subscription operation binding the contract event 0xa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a. +// +// Solidity: event RequirementChange(required uint256) +func (_MyTRC21 *MyTRC21Filterer) WatchRequirementChange(opts *bind.WatchOpts, sink chan<- *MyTRC21RequirementChange) (event.Subscription, error) { + + logs, sub, err := _MyTRC21.contract.WatchLogs(opts, "RequirementChange") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MyTRC21RequirementChange) + if err := _MyTRC21.contract.UnpackLog(event, "RequirementChange", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MyTRC21RevocationIterator is returned from FilterRevocation and is used to iterate over the raw logs and unpacked data for Revocation events raised by the MyTRC21 contract. +type MyTRC21RevocationIterator struct { + Event *MyTRC21Revocation // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MyTRC21RevocationIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MyTRC21Revocation) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MyTRC21Revocation) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MyTRC21RevocationIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MyTRC21RevocationIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MyTRC21Revocation represents a Revocation event raised by the MyTRC21 contract. +type MyTRC21Revocation struct { + Sender common.Address + TransactionId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRevocation is a free log retrieval operation binding the contract event 0xf6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9. +// +// Solidity: event Revocation(sender indexed address, transactionId indexed uint256) +func (_MyTRC21 *MyTRC21Filterer) FilterRevocation(opts *bind.FilterOpts, sender []common.Address, transactionId []*big.Int) (*MyTRC21RevocationIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MyTRC21.contract.FilterLogs(opts, "Revocation", senderRule, transactionIdRule) + if err != nil { + return nil, err + } + return &MyTRC21RevocationIterator{contract: _MyTRC21.contract, event: "Revocation", logs: logs, sub: sub}, nil +} + +// WatchRevocation is a free log subscription operation binding the contract event 0xf6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9. +// +// Solidity: event Revocation(sender indexed address, transactionId indexed uint256) +func (_MyTRC21 *MyTRC21Filterer) WatchRevocation(opts *bind.WatchOpts, sink chan<- *MyTRC21Revocation, sender []common.Address, transactionId []*big.Int) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MyTRC21.contract.WatchLogs(opts, "Revocation", senderRule, transactionIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MyTRC21Revocation) + if err := _MyTRC21.contract.UnpackLog(event, "Revocation", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MyTRC21SubmissionIterator is returned from FilterSubmission and is used to iterate over the raw logs and unpacked data for Submission events raised by the MyTRC21 contract. +type MyTRC21SubmissionIterator struct { + Event *MyTRC21Submission // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MyTRC21SubmissionIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MyTRC21Submission) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MyTRC21Submission) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MyTRC21SubmissionIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MyTRC21SubmissionIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MyTRC21Submission represents a Submission event raised by the MyTRC21 contract. +type MyTRC21Submission struct { + TransactionId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSubmission is a free log retrieval operation binding the contract event 0xc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e51. +// +// Solidity: event Submission(transactionId indexed uint256) +func (_MyTRC21 *MyTRC21Filterer) FilterSubmission(opts *bind.FilterOpts, transactionId []*big.Int) (*MyTRC21SubmissionIterator, error) { + + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MyTRC21.contract.FilterLogs(opts, "Submission", transactionIdRule) + if err != nil { + return nil, err + } + return &MyTRC21SubmissionIterator{contract: _MyTRC21.contract, event: "Submission", logs: logs, sub: sub}, nil +} + +// WatchSubmission is a free log subscription operation binding the contract event 0xc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e51. +// +// Solidity: event Submission(transactionId indexed uint256) +func (_MyTRC21 *MyTRC21Filterer) WatchSubmission(opts *bind.WatchOpts, sink chan<- *MyTRC21Submission, transactionId []*big.Int) (event.Subscription, error) { + + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MyTRC21.contract.WatchLogs(opts, "Submission", transactionIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MyTRC21Submission) + if err := _MyTRC21.contract.UnpackLog(event, "Submission", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MyTRC21TokenBurnIterator is returned from FilterTokenBurn and is used to iterate over the raw logs and unpacked data for TokenBurn events raised by the MyTRC21 contract. +type MyTRC21TokenBurnIterator struct { + Event *MyTRC21TokenBurn // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MyTRC21TokenBurnIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MyTRC21TokenBurn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MyTRC21TokenBurn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MyTRC21TokenBurnIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MyTRC21TokenBurnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MyTRC21TokenBurn represents a TokenBurn event raised by the MyTRC21 contract. +type MyTRC21TokenBurn struct { + BurnID *big.Int + Burner common.Address + Value *big.Int + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTokenBurn is a free log retrieval operation binding the contract event 0x6905852b196f81e7e03058512a599446c358027fc943c1e193b6649a39379bb5. +// +// Solidity: event TokenBurn(burnID indexed uint256, burner indexed address, value uint256, data bytes) +func (_MyTRC21 *MyTRC21Filterer) FilterTokenBurn(opts *bind.FilterOpts, burnID []*big.Int, burner []common.Address) (*MyTRC21TokenBurnIterator, error) { + + var burnIDRule []interface{} + for _, burnIDItem := range burnID { + burnIDRule = append(burnIDRule, burnIDItem) + } + var burnerRule []interface{} + for _, burnerItem := range burner { + burnerRule = append(burnerRule, burnerItem) + } + + logs, sub, err := _MyTRC21.contract.FilterLogs(opts, "TokenBurn", burnIDRule, burnerRule) + if err != nil { + return nil, err + } + return &MyTRC21TokenBurnIterator{contract: _MyTRC21.contract, event: "TokenBurn", logs: logs, sub: sub}, nil +} + +// WatchTokenBurn is a free log subscription operation binding the contract event 0x6905852b196f81e7e03058512a599446c358027fc943c1e193b6649a39379bb5. +// +// Solidity: event TokenBurn(burnID indexed uint256, burner indexed address, value uint256, data bytes) +func (_MyTRC21 *MyTRC21Filterer) WatchTokenBurn(opts *bind.WatchOpts, sink chan<- *MyTRC21TokenBurn, burnID []*big.Int, burner []common.Address) (event.Subscription, error) { + + var burnIDRule []interface{} + for _, burnIDItem := range burnID { + burnIDRule = append(burnIDRule, burnIDItem) + } + var burnerRule []interface{} + for _, burnerItem := range burner { + burnerRule = append(burnerRule, burnerItem) + } + + logs, sub, err := _MyTRC21.contract.WatchLogs(opts, "TokenBurn", burnIDRule, burnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MyTRC21TokenBurn) + if err := _MyTRC21.contract.UnpackLog(event, "TokenBurn", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MyTRC21TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the MyTRC21 contract. +type MyTRC21TransferIterator struct { + Event *MyTRC21Transfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MyTRC21TransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MyTRC21Transfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MyTRC21Transfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MyTRC21TransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MyTRC21TransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MyTRC21Transfer represents a Transfer event raised by the MyTRC21 contract. +type MyTRC21Transfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(from indexed address, to indexed address, value uint256) +func (_MyTRC21 *MyTRC21Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MyTRC21TransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MyTRC21.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &MyTRC21TransferIterator{contract: _MyTRC21.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(from indexed address, to indexed address, value uint256) +func (_MyTRC21 *MyTRC21Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *MyTRC21Transfer, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MyTRC21.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MyTRC21Transfer) + if err := _MyTRC21.contract.UnpackLog(event, "Transfer", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// TRC21ABI is the input ABI used to generate the binding from. +const TRC21ABI = "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"estimateFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"issuer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"setMinFee\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"symbol\",\"type\":\"string\"},{\"name\":\"decimals\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"issuer\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Fee\",\"type\":\"event\"}]" + +// TRC21Bin is the compiled bytecode used for deploying new contracts. +const TRC21Bin = `0x608060405234801561001057600080fd5b50604051610a2c380380610a2c83398101604090815281516020808401519284015191840180519094939093019261004e916005919086019061007f565b50815161006290600690602085019061007f565b506007805460ff191660ff929092169190911790555061011a9050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100c057805160ff19168380011785556100ed565b828001600101855582156100ed579182015b828111156100ed5782518255916020019190600101906100d2565b506100f99291506100fd565b5090565b61011791905b808211156100f95760008155600101610103565b90565b610903806101296000396000f3006080604052600436106100c45763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100c9578063095ea7b314610153578063127e8e4d1461018b57806318160ddd146101b55780631d143848146101ca57806323b872dd146101fb57806324ec759014610225578063313ce5671461023a57806331ac99201461026557806370a082311461027f57806395d89b41146102a0578063a9059cbb146102b5578063dd62ed3e146102d9575b600080fd5b3480156100d557600080fd5b506100de610300565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610118578181015183820152602001610100565b50505050905090810190601f1680156101455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015f57600080fd5b50610177600160a060020a0360043516602435610396565b604080519115158252519081900360200190f35b34801561019757600080fd5b506101a3600435610450565b60408051918252519081900360200190f35b3480156101c157600080fd5b506101a361047c565b3480156101d657600080fd5b506101df610482565b60408051600160a060020a039092168252519081900360200190f35b34801561020757600080fd5b50610177600160a060020a0360043581169060243516604435610491565b34801561023157600080fd5b506101a36105d5565b34801561024657600080fd5b5061024f6105db565b6040805160ff9092168252519081900360200190f35b34801561027157600080fd5b5061027d6004356105e4565b005b34801561028b57600080fd5b506101a3600160a060020a0360043516610607565b3480156102ac57600080fd5b506100de610622565b3480156102c157600080fd5b50610177600160a060020a0360043516602435610683565b3480156102e557600080fd5b506101a3600160a060020a0360043581169060243516610757565b60058054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561038c5780601f106103615761010080835404028352916020019161038c565b820191906000526020600020905b81548152906001019060200180831161036f57829003601f168201915b5050505050905090565b6000600160a060020a03831615156103ad57600080fd5b6001543360009081526020819052604090205410156103cb57600080fd5b336000818152600360209081526040808320600160a060020a038881168552925290912084905560025460015461040793929190911690610782565b604080518381529051600160a060020a0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a350600192915050565b6001546000906104769061046a848463ffffffff61087416565b9063ffffffff6108a916565b92915050565b60045490565b600254600160a060020a031690565b6000806104a9600154846108a990919063ffffffff16565b600160a060020a0386166000908152602081905260409020549091508111156104d157600080fd5b600160a060020a038516600090815260036020908152604080832033845290915290205483111561050157600080fd5b600160a060020a0385166000908152600360209081526040808320338452909152902054610535908263ffffffff6108bb16565b600160a060020a0386166000908152600360209081526040808320338452909152902055610564858585610782565b600254600154610581918791600160a060020a0390911690610782565b6002546001546040805191825251600160a060020a039283169287169133917ffcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd999181900360200190a4506001949350505050565b60015490565b60075460ff1690565b600254600160a060020a031633146105fb57600080fd5b610604816108d2565b50565b600160a060020a031660009081526020819052604090205490565b60068054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561038c5780601f106103615761010080835404028352916020019161038c565b600080600160a060020a038416151561069b57600080fd5b6001546106af90849063ffffffff6108a916565b336000908152602081905260409020549091508111156106ce57600080fd5b6106d9338585610782565b6000600154111561074b57600254600154610701913391600160a060020a0390911690610782565b6002546001546040805191825251600160a060020a039283169287169133917ffcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd999181900360200190a45b600191505b5092915050565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b600160a060020a0383166000908152602081905260409020548111156107a757600080fd5b600160a060020a03821615156107bc57600080fd5b600160a060020a0383166000908152602081905260409020546107e5908263ffffffff6108bb16565b600160a060020a03808516600090815260208190526040808220939093559084168152205461081a908263ffffffff6108a916565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000808315156108875760009150610750565b5082820282848281151561089757fe5b04146108a257600080fd5b9392505050565b6000828201838110156108a257600080fd5b600080838311156108cb57600080fd5b5050900390565b6001555600a165627a7a723058206c24d49045155ad83d904de717409715bdb93edbc379076a4a1d5f03d3ae00900029` + +// DeployTRC21 deploys a new Ethereum contract, binding an instance of TRC21 to it. +func DeployTRC21(auth *bind.TransactOpts, backend bind.ContractBackend, name string, symbol string, decimals uint8) (common.Address, *types.Transaction, *TRC21, error) { + parsed, err := abi.JSON(strings.NewReader(TRC21ABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(TRC21Bin), backend, name, symbol, decimals) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &TRC21{TRC21Caller: TRC21Caller{contract: contract}, TRC21Transactor: TRC21Transactor{contract: contract}, TRC21Filterer: TRC21Filterer{contract: contract}}, nil +} + +// TRC21 is an auto generated Go binding around an Ethereum contract. +type TRC21 struct { + TRC21Caller // Read-only binding to the contract + TRC21Transactor // Write-only binding to the contract + TRC21Filterer // Log filterer for contract events +} + +// TRC21Caller is an auto generated read-only Go binding around an Ethereum contract. +type TRC21Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TRC21Transactor is an auto generated write-only Go binding around an Ethereum contract. +type TRC21Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TRC21Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type TRC21Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TRC21Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type TRC21Session struct { + Contract *TRC21 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TRC21CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type TRC21CallerSession struct { + Contract *TRC21Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// TRC21TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type TRC21TransactorSession struct { + Contract *TRC21Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TRC21Raw is an auto generated low-level Go binding around an Ethereum contract. +type TRC21Raw struct { + Contract *TRC21 // Generic contract binding to access the raw methods on +} + +// TRC21CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type TRC21CallerRaw struct { + Contract *TRC21Caller // Generic read-only contract binding to access the raw methods on +} + +// TRC21TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type TRC21TransactorRaw struct { + Contract *TRC21Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewTRC21 creates a new instance of TRC21, bound to a specific deployed contract. +func NewTRC21(address common.Address, backend bind.ContractBackend) (*TRC21, error) { + contract, err := bindTRC21(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &TRC21{TRC21Caller: TRC21Caller{contract: contract}, TRC21Transactor: TRC21Transactor{contract: contract}, TRC21Filterer: TRC21Filterer{contract: contract}}, nil +} + +// NewTRC21Caller creates a new read-only instance of TRC21, bound to a specific deployed contract. +func NewTRC21Caller(address common.Address, caller bind.ContractCaller) (*TRC21Caller, error) { + contract, err := bindTRC21(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &TRC21Caller{contract: contract}, nil +} + +// NewTRC21Transactor creates a new write-only instance of TRC21, bound to a specific deployed contract. +func NewTRC21Transactor(address common.Address, transactor bind.ContractTransactor) (*TRC21Transactor, error) { + contract, err := bindTRC21(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &TRC21Transactor{contract: contract}, nil +} + +// NewTRC21Filterer creates a new log filterer instance of TRC21, bound to a specific deployed contract. +func NewTRC21Filterer(address common.Address, filterer bind.ContractFilterer) (*TRC21Filterer, error) { + contract, err := bindTRC21(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &TRC21Filterer{contract: contract}, nil +} + +// bindTRC21 binds a generic wrapper to an already deployed contract. +func bindTRC21(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(TRC21ABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TRC21 *TRC21Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TRC21.Contract.TRC21Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TRC21 *TRC21Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TRC21.Contract.TRC21Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TRC21 *TRC21Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TRC21.Contract.TRC21Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TRC21 *TRC21CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TRC21.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TRC21 *TRC21TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TRC21.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TRC21 *TRC21TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TRC21.Contract.contract.Transact(opts, method, params...) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_TRC21 *TRC21Caller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21.contract.Call(opts, out, "allowance", owner, spender) + return *ret0, err +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_TRC21 *TRC21Session) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _TRC21.Contract.Allowance(&_TRC21.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_TRC21 *TRC21CallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _TRC21.Contract.Allowance(&_TRC21.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(owner address) constant returns(uint256) +func (_TRC21 *TRC21Caller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21.contract.Call(opts, out, "balanceOf", owner) + return *ret0, err +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(owner address) constant returns(uint256) +func (_TRC21 *TRC21Session) BalanceOf(owner common.Address) (*big.Int, error) { + return _TRC21.Contract.BalanceOf(&_TRC21.CallOpts, owner) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(owner address) constant returns(uint256) +func (_TRC21 *TRC21CallerSession) BalanceOf(owner common.Address) (*big.Int, error) { + return _TRC21.Contract.BalanceOf(&_TRC21.CallOpts, owner) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() constant returns(uint8) +func (_TRC21 *TRC21Caller) Decimals(opts *bind.CallOpts) (uint8, error) { + var ( + ret0 = new(uint8) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21.contract.Call(opts, out, "decimals") + return *ret0, err +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() constant returns(uint8) +func (_TRC21 *TRC21Session) Decimals() (uint8, error) { + return _TRC21.Contract.Decimals(&_TRC21.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() constant returns(uint8) +func (_TRC21 *TRC21CallerSession) Decimals() (uint8, error) { + return _TRC21.Contract.Decimals(&_TRC21.CallOpts) +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_TRC21 *TRC21Caller) EstimateFee(opts *bind.CallOpts, value *big.Int) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21.contract.Call(opts, out, "estimateFee", value) + return *ret0, err +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_TRC21 *TRC21Session) EstimateFee(value *big.Int) (*big.Int, error) { + return _TRC21.Contract.EstimateFee(&_TRC21.CallOpts, value) +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_TRC21 *TRC21CallerSession) EstimateFee(value *big.Int) (*big.Int, error) { + return _TRC21.Contract.EstimateFee(&_TRC21.CallOpts, value) +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_TRC21 *TRC21Caller) Issuer(opts *bind.CallOpts) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21.contract.Call(opts, out, "issuer") + return *ret0, err +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_TRC21 *TRC21Session) Issuer() (common.Address, error) { + return _TRC21.Contract.Issuer(&_TRC21.CallOpts) +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_TRC21 *TRC21CallerSession) Issuer() (common.Address, error) { + return _TRC21.Contract.Issuer(&_TRC21.CallOpts) +} + +// MinFee is a free data retrieval call binding the contract method 0x24ec7590. +// +// Solidity: function minFee() constant returns(uint256) +func (_TRC21 *TRC21Caller) MinFee(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21.contract.Call(opts, out, "minFee") + return *ret0, err +} + +// MinFee is a free data retrieval call binding the contract method 0x24ec7590. +// +// Solidity: function minFee() constant returns(uint256) +func (_TRC21 *TRC21Session) MinFee() (*big.Int, error) { + return _TRC21.Contract.MinFee(&_TRC21.CallOpts) +} + +// MinFee is a free data retrieval call binding the contract method 0x24ec7590. +// +// Solidity: function minFee() constant returns(uint256) +func (_TRC21 *TRC21CallerSession) MinFee() (*big.Int, error) { + return _TRC21.Contract.MinFee(&_TRC21.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() constant returns(string) +func (_TRC21 *TRC21Caller) Name(opts *bind.CallOpts) (string, error) { + var ( + ret0 = new(string) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21.contract.Call(opts, out, "name") + return *ret0, err +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() constant returns(string) +func (_TRC21 *TRC21Session) Name() (string, error) { + return _TRC21.Contract.Name(&_TRC21.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() constant returns(string) +func (_TRC21 *TRC21CallerSession) Name() (string, error) { + return _TRC21.Contract.Name(&_TRC21.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() constant returns(string) +func (_TRC21 *TRC21Caller) Symbol(opts *bind.CallOpts) (string, error) { + var ( + ret0 = new(string) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21.contract.Call(opts, out, "symbol") + return *ret0, err +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() constant returns(string) +func (_TRC21 *TRC21Session) Symbol() (string, error) { + return _TRC21.Contract.Symbol(&_TRC21.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() constant returns(string) +func (_TRC21 *TRC21CallerSession) Symbol() (string, error) { + return _TRC21.Contract.Symbol(&_TRC21.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_TRC21 *TRC21Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21.contract.Call(opts, out, "totalSupply") + return *ret0, err +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_TRC21 *TRC21Session) TotalSupply() (*big.Int, error) { + return _TRC21.Contract.TotalSupply(&_TRC21.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_TRC21 *TRC21CallerSession) TotalSupply() (*big.Int, error) { + return _TRC21.Contract.TotalSupply(&_TRC21.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_TRC21 *TRC21Transactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.contract.Transact(opts, "approve", spender, value) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_TRC21 *TRC21Session) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.Contract.Approve(&_TRC21.TransactOpts, spender, value) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_TRC21 *TRC21TransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.Contract.Approve(&_TRC21.TransactOpts, spender, value) +} + +// SetMinFee is a paid mutator transaction binding the contract method 0x31ac9920. +// +// Solidity: function setMinFee(value uint256) returns() +func (_TRC21 *TRC21Transactor) SetMinFee(opts *bind.TransactOpts, value *big.Int) (*types.Transaction, error) { + return _TRC21.contract.Transact(opts, "setMinFee", value) +} + +// SetMinFee is a paid mutator transaction binding the contract method 0x31ac9920. +// +// Solidity: function setMinFee(value uint256) returns() +func (_TRC21 *TRC21Session) SetMinFee(value *big.Int) (*types.Transaction, error) { + return _TRC21.Contract.SetMinFee(&_TRC21.TransactOpts, value) +} + +// SetMinFee is a paid mutator transaction binding the contract method 0x31ac9920. +// +// Solidity: function setMinFee(value uint256) returns() +func (_TRC21 *TRC21TransactorSession) SetMinFee(value *big.Int) (*types.Transaction, error) { + return _TRC21.Contract.SetMinFee(&_TRC21.TransactOpts, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_TRC21 *TRC21Transactor) Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.contract.Transact(opts, "transfer", to, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_TRC21 *TRC21Session) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.Contract.Transfer(&_TRC21.TransactOpts, to, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_TRC21 *TRC21TransactorSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.Contract.Transfer(&_TRC21.TransactOpts, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_TRC21 *TRC21Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.contract.Transact(opts, "transferFrom", from, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_TRC21 *TRC21Session) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.Contract.TransferFrom(&_TRC21.TransactOpts, from, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_TRC21 *TRC21TransactorSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.Contract.TransferFrom(&_TRC21.TransactOpts, from, to, value) +} + +// TRC21ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the TRC21 contract. +type TRC21ApprovalIterator struct { + Event *TRC21Approval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TRC21ApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TRC21Approval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TRC21Approval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TRC21ApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TRC21ApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TRC21Approval represents a Approval event raised by the TRC21 contract. +type TRC21Approval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(owner indexed address, spender indexed address, value uint256) +func (_TRC21 *TRC21Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*TRC21ApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _TRC21.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &TRC21ApprovalIterator{contract: _TRC21.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(owner indexed address, spender indexed address, value uint256) +func (_TRC21 *TRC21Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *TRC21Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _TRC21.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TRC21Approval) + if err := _TRC21.contract.UnpackLog(event, "Approval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// TRC21FeeIterator is returned from FilterFee and is used to iterate over the raw logs and unpacked data for Fee events raised by the TRC21 contract. +type TRC21FeeIterator struct { + Event *TRC21Fee // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TRC21FeeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TRC21Fee) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TRC21Fee) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TRC21FeeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TRC21FeeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TRC21Fee represents a Fee event raised by the TRC21 contract. +type TRC21Fee struct { + From common.Address + To common.Address + Issuer common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFee is a free log retrieval operation binding the contract event 0xfcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd99. +// +// Solidity: event Fee(from indexed address, to indexed address, issuer indexed address, value uint256) +func (_TRC21 *TRC21Filterer) FilterFee(opts *bind.FilterOpts, from []common.Address, to []common.Address, issuer []common.Address) (*TRC21FeeIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var issuerRule []interface{} + for _, issuerItem := range issuer { + issuerRule = append(issuerRule, issuerItem) + } + + logs, sub, err := _TRC21.contract.FilterLogs(opts, "Fee", fromRule, toRule, issuerRule) + if err != nil { + return nil, err + } + return &TRC21FeeIterator{contract: _TRC21.contract, event: "Fee", logs: logs, sub: sub}, nil +} + +// WatchFee is a free log subscription operation binding the contract event 0xfcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd99. +// +// Solidity: event Fee(from indexed address, to indexed address, issuer indexed address, value uint256) +func (_TRC21 *TRC21Filterer) WatchFee(opts *bind.WatchOpts, sink chan<- *TRC21Fee, from []common.Address, to []common.Address, issuer []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var issuerRule []interface{} + for _, issuerItem := range issuer { + issuerRule = append(issuerRule, issuerItem) + } + + logs, sub, err := _TRC21.contract.WatchLogs(opts, "Fee", fromRule, toRule, issuerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TRC21Fee) + if err := _TRC21.contract.UnpackLog(event, "Fee", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// TRC21TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the TRC21 contract. +type TRC21TransferIterator struct { + Event *TRC21Transfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TRC21TransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TRC21Transfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TRC21Transfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TRC21TransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TRC21TransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TRC21Transfer represents a Transfer event raised by the TRC21 contract. +type TRC21Transfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(from indexed address, to indexed address, value uint256) +func (_TRC21 *TRC21Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*TRC21TransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _TRC21.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &TRC21TransferIterator{contract: _TRC21.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(from indexed address, to indexed address, value uint256) +func (_TRC21 *TRC21Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *TRC21Transfer, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _TRC21.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TRC21Transfer) + if err := _TRC21.contract.UnpackLog(event, "Transfer", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} diff --git a/contracts/XDCx/contract/TRC21Issuer.go b/contracts/XDCx/contract/TRC21Issuer.go new file mode 100644 index 0000000000..9f2bff47ce --- /dev/null +++ b/contracts/XDCx/contract/TRC21Issuer.go @@ -0,0 +1,775 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contract + +import ( + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" + "math/big" + "strings" +) + +// AbstractTokenTRC21ABI is the input ABI used to generate the binding from. +const AbstractTokenTRC21ABI = "[{\"constant\":true,\"inputs\":[],\"name\":\"issuer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]" + +// AbstractTokenTRC21Bin is the compiled bytecode used for deploying new contracts. +const AbstractTokenTRC21Bin = `0x` + +// DeployAbstractTokenTRC21 deploys a new Ethereum contract, binding an instance of AbstractTokenTRC21 to it. +func DeployAbstractTokenTRC21(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *AbstractTokenTRC21, error) { + parsed, err := abi.JSON(strings.NewReader(AbstractTokenTRC21ABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(AbstractTokenTRC21Bin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &AbstractTokenTRC21{AbstractTokenTRC21Caller: AbstractTokenTRC21Caller{contract: contract}, AbstractTokenTRC21Transactor: AbstractTokenTRC21Transactor{contract: contract}, AbstractTokenTRC21Filterer: AbstractTokenTRC21Filterer{contract: contract}}, nil +} + +// AbstractTokenTRC21 is an auto generated Go binding around an Ethereum contract. +type AbstractTokenTRC21 struct { + AbstractTokenTRC21Caller // Read-only binding to the contract + AbstractTokenTRC21Transactor // Write-only binding to the contract + AbstractTokenTRC21Filterer // Log filterer for contract events +} + +// AbstractTokenTRC21Caller is an auto generated read-only Go binding around an Ethereum contract. +type AbstractTokenTRC21Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AbstractTokenTRC21Transactor is an auto generated write-only Go binding around an Ethereum contract. +type AbstractTokenTRC21Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AbstractTokenTRC21Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AbstractTokenTRC21Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AbstractTokenTRC21Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AbstractTokenTRC21Session struct { + Contract *AbstractTokenTRC21 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AbstractTokenTRC21CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AbstractTokenTRC21CallerSession struct { + Contract *AbstractTokenTRC21Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AbstractTokenTRC21TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AbstractTokenTRC21TransactorSession struct { + Contract *AbstractTokenTRC21Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AbstractTokenTRC21Raw is an auto generated low-level Go binding around an Ethereum contract. +type AbstractTokenTRC21Raw struct { + Contract *AbstractTokenTRC21 // Generic contract binding to access the raw methods on +} + +// AbstractTokenTRC21CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AbstractTokenTRC21CallerRaw struct { + Contract *AbstractTokenTRC21Caller // Generic read-only contract binding to access the raw methods on +} + +// AbstractTokenTRC21TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AbstractTokenTRC21TransactorRaw struct { + Contract *AbstractTokenTRC21Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewAbstractTokenTRC21 creates a new instance of AbstractTokenTRC21, bound to a specific deployed contract. +func NewAbstractTokenTRC21(address common.Address, backend bind.ContractBackend) (*AbstractTokenTRC21, error) { + contract, err := bindAbstractTokenTRC21(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &AbstractTokenTRC21{AbstractTokenTRC21Caller: AbstractTokenTRC21Caller{contract: contract}, AbstractTokenTRC21Transactor: AbstractTokenTRC21Transactor{contract: contract}, AbstractTokenTRC21Filterer: AbstractTokenTRC21Filterer{contract: contract}}, nil +} + +// NewAbstractTokenTRC21Caller creates a new read-only instance of AbstractTokenTRC21, bound to a specific deployed contract. +func NewAbstractTokenTRC21Caller(address common.Address, caller bind.ContractCaller) (*AbstractTokenTRC21Caller, error) { + contract, err := bindAbstractTokenTRC21(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AbstractTokenTRC21Caller{contract: contract}, nil +} + +// NewAbstractTokenTRC21Transactor creates a new write-only instance of AbstractTokenTRC21, bound to a specific deployed contract. +func NewAbstractTokenTRC21Transactor(address common.Address, transactor bind.ContractTransactor) (*AbstractTokenTRC21Transactor, error) { + contract, err := bindAbstractTokenTRC21(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AbstractTokenTRC21Transactor{contract: contract}, nil +} + +// NewAbstractTokenTRC21Filterer creates a new log filterer instance of AbstractTokenTRC21, bound to a specific deployed contract. +func NewAbstractTokenTRC21Filterer(address common.Address, filterer bind.ContractFilterer) (*AbstractTokenTRC21Filterer, error) { + contract, err := bindAbstractTokenTRC21(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AbstractTokenTRC21Filterer{contract: contract}, nil +} + +// bindAbstractTokenTRC21 binds a generic wrapper to an already deployed contract. +func bindAbstractTokenTRC21(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(AbstractTokenTRC21ABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AbstractTokenTRC21 *AbstractTokenTRC21Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AbstractTokenTRC21.Contract.AbstractTokenTRC21Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AbstractTokenTRC21 *AbstractTokenTRC21Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbstractTokenTRC21.Contract.AbstractTokenTRC21Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AbstractTokenTRC21 *AbstractTokenTRC21Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AbstractTokenTRC21.Contract.AbstractTokenTRC21Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AbstractTokenTRC21 *AbstractTokenTRC21CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AbstractTokenTRC21.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AbstractTokenTRC21 *AbstractTokenTRC21TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbstractTokenTRC21.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AbstractTokenTRC21 *AbstractTokenTRC21TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AbstractTokenTRC21.Contract.contract.Transact(opts, method, params...) +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_AbstractTokenTRC21 *AbstractTokenTRC21Caller) Issuer(opts *bind.CallOpts) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _AbstractTokenTRC21.contract.Call(opts, out, "issuer") + return *ret0, err +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_AbstractTokenTRC21 *AbstractTokenTRC21Session) Issuer() (common.Address, error) { + return _AbstractTokenTRC21.Contract.Issuer(&_AbstractTokenTRC21.CallOpts) +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_AbstractTokenTRC21 *AbstractTokenTRC21CallerSession) Issuer() (common.Address, error) { + return _AbstractTokenTRC21.Contract.Issuer(&_AbstractTokenTRC21.CallOpts) +} + +// TRC21IssuerABI is the input ABI used to generate the binding from. +const TRC21IssuerABI = "[{\"constant\":true,\"inputs\":[],\"name\":\"minCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenCapacity\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokens\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"apply\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"charge\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"issuer\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Apply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"supporter\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Charge\",\"type\":\"event\"}]" + +// TRC21IssuerBin is the compiled bytecode used for deploying new contracts. +const TRC21IssuerBin = `0x608060405234801561001057600080fd5b506040516020806104578339810160405251600055610423806100346000396000f30060806040526004361061006c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa615b081146100715780638f3a981c146100985780639d63848a146100b9578063c6b32f341461011e578063fc6bd76a14610134575b600080fd5b34801561007d57600080fd5b50610086610148565b60408051918252519081900360200190f35b3480156100a457600080fd5b50610086600160a060020a036004351661014e565b3480156100c557600080fd5b506100ce610169565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561010a5781810151838201526020016100f2565b505050509050019250505060405180910390f35b610132600160a060020a03600435166101cb565b005b610132600160a060020a036004351661035d565b60005490565b600160a060020a031660009081526002602052604090205490565b606060018054806020026020016040519081016040528092919081815260200182805480156101c157602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116101a3575b5050505050905090565b600081600160a060020a03811615156101e357600080fd5b6000543410156101f257600080fd5b82915033600160a060020a031682600160a060020a0316631d1438486040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561025657600080fd5b505af115801561026a573d6000803e3d6000fd5b505050506040513d602081101561028057600080fd5b5051600160a060020a03161461029557600080fd5b600180548082019091557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03851690811790915560009081526002602052604090205461030390346103de565b600160a060020a0384166000818152600260209081526040918290209390935580513481529051919233927f2d485624158277d5113a56388c3abf5c20e3511dd112123ba376d16b21e4d7169281900390910190a3505050565b600160a060020a038116600090815260026020526040902054610386903463ffffffff6103de16565b600160a060020a0382166000818152600260209081526040918290209390935580513481529051919233927f5cffac866325fd9b2a8ea8df2f110a0058313b279402d15ae28dd324a2282e069281900390910190a350565b6000828201838110156103f057600080fd5b93925050505600a165627a7a7230582005dc9504c7a156980fbaadfe03ffb20a475e65b947f9a8ef3e6d6beee52325a80029` + +// DeployTRC21Issuer deploys a new Ethereum contract, binding an instance of TRC21Issuer to it. +func DeployTRC21Issuer(auth *bind.TransactOpts, backend bind.ContractBackend, value *big.Int) (common.Address, *types.Transaction, *TRC21Issuer, error) { + parsed, err := abi.JSON(strings.NewReader(TRC21IssuerABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(TRC21IssuerBin), backend, value) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &TRC21Issuer{TRC21IssuerCaller: TRC21IssuerCaller{contract: contract}, TRC21IssuerTransactor: TRC21IssuerTransactor{contract: contract}, TRC21IssuerFilterer: TRC21IssuerFilterer{contract: contract}}, nil +} + +// TRC21Issuer is an auto generated Go binding around an Ethereum contract. +type TRC21Issuer struct { + TRC21IssuerCaller // Read-only binding to the contract + TRC21IssuerTransactor // Write-only binding to the contract + TRC21IssuerFilterer // Log filterer for contract events +} + +// TRC21IssuerCaller is an auto generated read-only Go binding around an Ethereum contract. +type TRC21IssuerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TRC21IssuerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type TRC21IssuerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TRC21IssuerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type TRC21IssuerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TRC21IssuerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type TRC21IssuerSession struct { + Contract *TRC21Issuer // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TRC21IssuerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type TRC21IssuerCallerSession struct { + Contract *TRC21IssuerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// TRC21IssuerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type TRC21IssuerTransactorSession struct { + Contract *TRC21IssuerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TRC21IssuerRaw is an auto generated low-level Go binding around an Ethereum contract. +type TRC21IssuerRaw struct { + Contract *TRC21Issuer // Generic contract binding to access the raw methods on +} + +// TRC21IssuerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type TRC21IssuerCallerRaw struct { + Contract *TRC21IssuerCaller // Generic read-only contract binding to access the raw methods on +} + +// TRC21IssuerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type TRC21IssuerTransactorRaw struct { + Contract *TRC21IssuerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewTRC21Issuer creates a new instance of TRC21Issuer, bound to a specific deployed contract. +func NewTRC21Issuer(address common.Address, backend bind.ContractBackend) (*TRC21Issuer, error) { + contract, err := bindTRC21Issuer(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &TRC21Issuer{TRC21IssuerCaller: TRC21IssuerCaller{contract: contract}, TRC21IssuerTransactor: TRC21IssuerTransactor{contract: contract}, TRC21IssuerFilterer: TRC21IssuerFilterer{contract: contract}}, nil +} + +// NewTRC21IssuerCaller creates a new read-only instance of TRC21Issuer, bound to a specific deployed contract. +func NewTRC21IssuerCaller(address common.Address, caller bind.ContractCaller) (*TRC21IssuerCaller, error) { + contract, err := bindTRC21Issuer(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &TRC21IssuerCaller{contract: contract}, nil +} + +// NewTRC21IssuerTransactor creates a new write-only instance of TRC21Issuer, bound to a specific deployed contract. +func NewTRC21IssuerTransactor(address common.Address, transactor bind.ContractTransactor) (*TRC21IssuerTransactor, error) { + contract, err := bindTRC21Issuer(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &TRC21IssuerTransactor{contract: contract}, nil +} + +// NewTRC21IssuerFilterer creates a new log filterer instance of TRC21Issuer, bound to a specific deployed contract. +func NewTRC21IssuerFilterer(address common.Address, filterer bind.ContractFilterer) (*TRC21IssuerFilterer, error) { + contract, err := bindTRC21Issuer(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &TRC21IssuerFilterer{contract: contract}, nil +} + +// bindTRC21Issuer binds a generic wrapper to an already deployed contract. +func bindTRC21Issuer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(TRC21IssuerABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TRC21Issuer *TRC21IssuerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TRC21Issuer.Contract.TRC21IssuerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TRC21Issuer *TRC21IssuerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TRC21Issuer.Contract.TRC21IssuerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TRC21Issuer *TRC21IssuerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TRC21Issuer.Contract.TRC21IssuerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TRC21Issuer *TRC21IssuerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TRC21Issuer.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TRC21Issuer *TRC21IssuerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TRC21Issuer.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TRC21Issuer *TRC21IssuerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TRC21Issuer.Contract.contract.Transact(opts, method, params...) +} + +// GetTokenCapacity is a free data retrieval call binding the contract method 0x8f3a981c. +// +// Solidity: function getTokenCapacity(token address) constant returns(uint256) +func (_TRC21Issuer *TRC21IssuerCaller) GetTokenCapacity(opts *bind.CallOpts, token common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21Issuer.contract.Call(opts, out, "getTokenCapacity", token) + return *ret0, err +} + +// GetTokenCapacity is a free data retrieval call binding the contract method 0x8f3a981c. +// +// Solidity: function getTokenCapacity(token address) constant returns(uint256) +func (_TRC21Issuer *TRC21IssuerSession) GetTokenCapacity(token common.Address) (*big.Int, error) { + return _TRC21Issuer.Contract.GetTokenCapacity(&_TRC21Issuer.CallOpts, token) +} + +// GetTokenCapacity is a free data retrieval call binding the contract method 0x8f3a981c. +// +// Solidity: function getTokenCapacity(token address) constant returns(uint256) +func (_TRC21Issuer *TRC21IssuerCallerSession) GetTokenCapacity(token common.Address) (*big.Int, error) { + return _TRC21Issuer.Contract.GetTokenCapacity(&_TRC21Issuer.CallOpts, token) +} + +// MinCap is a free data retrieval call binding the contract method 0x3fa615b0. +// +// Solidity: function minCap() constant returns(uint256) +func (_TRC21Issuer *TRC21IssuerCaller) MinCap(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21Issuer.contract.Call(opts, out, "minCap") + return *ret0, err +} + +// MinCap is a free data retrieval call binding the contract method 0x3fa615b0. +// +// Solidity: function minCap() constant returns(uint256) +func (_TRC21Issuer *TRC21IssuerSession) MinCap() (*big.Int, error) { + return _TRC21Issuer.Contract.MinCap(&_TRC21Issuer.CallOpts) +} + +// MinCap is a free data retrieval call binding the contract method 0x3fa615b0. +// +// Solidity: function minCap() constant returns(uint256) +func (_TRC21Issuer *TRC21IssuerCallerSession) MinCap() (*big.Int, error) { + return _TRC21Issuer.Contract.MinCap(&_TRC21Issuer.CallOpts) +} + +// Tokens is a free data retrieval call binding the contract method 0x9d63848a. +// +// Solidity: function tokens() constant returns(address[]) +func (_TRC21Issuer *TRC21IssuerCaller) Tokens(opts *bind.CallOpts) ([]common.Address, error) { + var ( + ret0 = new([]common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21Issuer.contract.Call(opts, out, "tokens") + return *ret0, err +} + +// Tokens is a free data retrieval call binding the contract method 0x9d63848a. +// +// Solidity: function tokens() constant returns(address[]) +func (_TRC21Issuer *TRC21IssuerSession) Tokens() ([]common.Address, error) { + return _TRC21Issuer.Contract.Tokens(&_TRC21Issuer.CallOpts) +} + +// Tokens is a free data retrieval call binding the contract method 0x9d63848a. +// +// Solidity: function tokens() constant returns(address[]) +func (_TRC21Issuer *TRC21IssuerCallerSession) Tokens() ([]common.Address, error) { + return _TRC21Issuer.Contract.Tokens(&_TRC21Issuer.CallOpts) +} + +// Apply is a paid mutator transaction binding the contract method 0xc6b32f34. +// +// Solidity: function apply(token address) returns() +func (_TRC21Issuer *TRC21IssuerTransactor) Apply(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _TRC21Issuer.contract.Transact(opts, "apply", token) +} + +// Apply is a paid mutator transaction binding the contract method 0xc6b32f34. +// +// Solidity: function apply(token address) returns() +func (_TRC21Issuer *TRC21IssuerSession) Apply(token common.Address) (*types.Transaction, error) { + return _TRC21Issuer.Contract.Apply(&_TRC21Issuer.TransactOpts, token) +} + +// Apply is a paid mutator transaction binding the contract method 0xc6b32f34. +// +// Solidity: function apply(token address) returns() +func (_TRC21Issuer *TRC21IssuerTransactorSession) Apply(token common.Address) (*types.Transaction, error) { + return _TRC21Issuer.Contract.Apply(&_TRC21Issuer.TransactOpts, token) +} + +// Charge is a paid mutator transaction binding the contract method 0xfc6bd76a. +// +// Solidity: function charge(token address) returns() +func (_TRC21Issuer *TRC21IssuerTransactor) Charge(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _TRC21Issuer.contract.Transact(opts, "charge", token) +} + +// Charge is a paid mutator transaction binding the contract method 0xfc6bd76a. +// +// Solidity: function charge(token address) returns() +func (_TRC21Issuer *TRC21IssuerSession) Charge(token common.Address) (*types.Transaction, error) { + return _TRC21Issuer.Contract.Charge(&_TRC21Issuer.TransactOpts, token) +} + +// Charge is a paid mutator transaction binding the contract method 0xfc6bd76a. +// +// Solidity: function charge(token address) returns() +func (_TRC21Issuer *TRC21IssuerTransactorSession) Charge(token common.Address) (*types.Transaction, error) { + return _TRC21Issuer.Contract.Charge(&_TRC21Issuer.TransactOpts, token) +} + +// TRC21IssuerApplyIterator is returned from FilterApply and is used to iterate over the raw logs and unpacked data for Apply events raised by the TRC21Issuer contract. +type TRC21IssuerApplyIterator struct { + Event *TRC21IssuerApply // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TRC21IssuerApplyIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TRC21IssuerApply) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TRC21IssuerApply) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TRC21IssuerApplyIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TRC21IssuerApplyIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TRC21IssuerApply represents a Apply event raised by the TRC21Issuer contract. +type TRC21IssuerApply struct { + Issuer common.Address + Token common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApply is a free log retrieval operation binding the contract event 0x2d485624158277d5113a56388c3abf5c20e3511dd112123ba376d16b21e4d716. +// +// Solidity: event Apply(issuer indexed address, token indexed address, value uint256) +func (_TRC21Issuer *TRC21IssuerFilterer) FilterApply(opts *bind.FilterOpts, issuer []common.Address, token []common.Address) (*TRC21IssuerApplyIterator, error) { + + var issuerRule []interface{} + for _, issuerItem := range issuer { + issuerRule = append(issuerRule, issuerItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _TRC21Issuer.contract.FilterLogs(opts, "Apply", issuerRule, tokenRule) + if err != nil { + return nil, err + } + return &TRC21IssuerApplyIterator{contract: _TRC21Issuer.contract, event: "Apply", logs: logs, sub: sub}, nil +} + +// WatchApply is a free log subscription operation binding the contract event 0x2d485624158277d5113a56388c3abf5c20e3511dd112123ba376d16b21e4d716. +// +// Solidity: event Apply(issuer indexed address, token indexed address, value uint256) +func (_TRC21Issuer *TRC21IssuerFilterer) WatchApply(opts *bind.WatchOpts, sink chan<- *TRC21IssuerApply, issuer []common.Address, token []common.Address) (event.Subscription, error) { + + var issuerRule []interface{} + for _, issuerItem := range issuer { + issuerRule = append(issuerRule, issuerItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _TRC21Issuer.contract.WatchLogs(opts, "Apply", issuerRule, tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TRC21IssuerApply) + if err := _TRC21Issuer.contract.UnpackLog(event, "Apply", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// TRC21IssuerChargeIterator is returned from FilterCharge and is used to iterate over the raw logs and unpacked data for Charge events raised by the TRC21Issuer contract. +type TRC21IssuerChargeIterator struct { + Event *TRC21IssuerCharge // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TRC21IssuerChargeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TRC21IssuerCharge) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TRC21IssuerCharge) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TRC21IssuerChargeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TRC21IssuerChargeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TRC21IssuerCharge represents a Charge event raised by the TRC21Issuer contract. +type TRC21IssuerCharge struct { + Supporter common.Address + Token common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCharge is a free log retrieval operation binding the contract event 0x5cffac866325fd9b2a8ea8df2f110a0058313b279402d15ae28dd324a2282e06. +// +// Solidity: event Charge(supporter indexed address, token indexed address, value uint256) +func (_TRC21Issuer *TRC21IssuerFilterer) FilterCharge(opts *bind.FilterOpts, supporter []common.Address, token []common.Address) (*TRC21IssuerChargeIterator, error) { + + var supporterRule []interface{} + for _, supporterItem := range supporter { + supporterRule = append(supporterRule, supporterItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _TRC21Issuer.contract.FilterLogs(opts, "Charge", supporterRule, tokenRule) + if err != nil { + return nil, err + } + return &TRC21IssuerChargeIterator{contract: _TRC21Issuer.contract, event: "Charge", logs: logs, sub: sub}, nil +} + +// WatchCharge is a free log subscription operation binding the contract event 0x5cffac866325fd9b2a8ea8df2f110a0058313b279402d15ae28dd324a2282e06. +// +// Solidity: event Charge(supporter indexed address, token indexed address, value uint256) +func (_TRC21Issuer *TRC21IssuerFilterer) WatchCharge(opts *bind.WatchOpts, sink chan<- *TRC21IssuerCharge, supporter []common.Address, token []common.Address) (event.Subscription, error) { + + var supporterRule []interface{} + for _, supporterItem := range supporter { + supporterRule = append(supporterRule, supporterItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _TRC21Issuer.contract.WatchLogs(opts, "Charge", supporterRule, tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TRC21IssuerCharge) + if err := _TRC21Issuer.contract.UnpackLog(event, "Charge", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} diff --git a/contracts/XDCx/contract/XDCXListing.go b/contracts/XDCx/contract/XDCXListing.go new file mode 100644 index 0000000000..b38269418f --- /dev/null +++ b/contracts/XDCx/contract/XDCXListing.go @@ -0,0 +1,251 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contract + +import ( + "strings" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" +) + +// XDCXListingABI is the input ABI used to generate the binding from. +const XDCXListingABI = "[{\"constant\":true,\"inputs\":[],\"name\":\"tokens\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenStatus\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"apply\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"}]" + +// XDCXListingBin is the compiled bytecode used for deploying new contracts. +const XDCXListingBin = `0x608060405234801561001057600080fd5b506102be806100206000396000f3006080604052600436106100565763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416639d63848a811461005b578063a3ff31b5146100c0578063c6b32f34146100f5575b600080fd5b34801561006757600080fd5b5061007061010b565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156100ac578181015183820152602001610094565b505050509050019250505060405180910390f35b3480156100cc57600080fd5b506100e1600160a060020a036004351661016d565b604080519115158252519081900360200190f35b610109600160a060020a036004351661018b565b005b6060600080548060200260200160405190810160405280929190818152602001828054801561016357602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610145575b5050505050905090565b600160a060020a031660009081526001602052604090205460ff1690565b80600160a060020a03811615156101a157600080fd5b600160a060020a03811660009081526001602081905260409091205460ff16151514156101cd57600080fd5b683635c9adc5dea0000034146101e257600080fd5b6040516068903480156108fc02916000818181858888f1935050505015801561020f573d6000803e3d6000fd5b505060008054600180820183557f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039490941693841790556040805160208082018352838252948452919093529190209051815460ff19169015151790555600a165627a7a723058206d2dc0ce827743c25efa82f99e7830ade39d28e17f4d651573f89e0460a6626a0029` + +// DeployXDCXListing deploys a new Ethereum contract, binding an instance of XDCXListing to it. +func DeployXDCXListing(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *XDCXListing, error) { + parsed, err := abi.JSON(strings.NewReader(XDCXListingABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(XDCXListingBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &XDCXListing{XDCXListingCaller: XDCXListingCaller{contract: contract}, XDCXListingTransactor: XDCXListingTransactor{contract: contract}, XDCXListingFilterer: XDCXListingFilterer{contract: contract}}, nil +} + +// XDCXListing is an auto generated Go binding around an Ethereum contract. +type XDCXListing struct { + XDCXListingCaller // Read-only binding to the contract + XDCXListingTransactor // Write-only binding to the contract + XDCXListingFilterer // Log filterer for contract events +} + +// XDCXListingCaller is an auto generated read-only Go binding around an Ethereum contract. +type XDCXListingCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// XDCXListingTransactor is an auto generated write-only Go binding around an Ethereum contract. +type XDCXListingTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// XDCXListingFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type XDCXListingFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// XDCXListingSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type XDCXListingSession struct { + Contract *XDCXListing // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// XDCXListingCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type XDCXListingCallerSession struct { + Contract *XDCXListingCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// XDCXListingTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type XDCXListingTransactorSession struct { + Contract *XDCXListingTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// XDCXListingRaw is an auto generated low-level Go binding around an Ethereum contract. +type XDCXListingRaw struct { + Contract *XDCXListing // Generic contract binding to access the raw methods on +} + +// XDCXListingCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type XDCXListingCallerRaw struct { + Contract *XDCXListingCaller // Generic read-only contract binding to access the raw methods on +} + +// XDCXListingTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type XDCXListingTransactorRaw struct { + Contract *XDCXListingTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewXDCXListing creates a new instance of XDCXListing, bound to a specific deployed contract. +func NewXDCXListing(address common.Address, backend bind.ContractBackend) (*XDCXListing, error) { + contract, err := bindXDCXListing(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &XDCXListing{XDCXListingCaller: XDCXListingCaller{contract: contract}, XDCXListingTransactor: XDCXListingTransactor{contract: contract}, XDCXListingFilterer: XDCXListingFilterer{contract: contract}}, nil +} + +// NewXDCXListingCaller creates a new read-only instance of XDCXListing, bound to a specific deployed contract. +func NewXDCXListingCaller(address common.Address, caller bind.ContractCaller) (*XDCXListingCaller, error) { + contract, err := bindXDCXListing(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &XDCXListingCaller{contract: contract}, nil +} + +// NewXDCXListingTransactor creates a new write-only instance of XDCXListing, bound to a specific deployed contract. +func NewXDCXListingTransactor(address common.Address, transactor bind.ContractTransactor) (*XDCXListingTransactor, error) { + contract, err := bindXDCXListing(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &XDCXListingTransactor{contract: contract}, nil +} + +// NewXDCXListingFilterer creates a new log filterer instance of XDCXListing, bound to a specific deployed contract. +func NewXDCXListingFilterer(address common.Address, filterer bind.ContractFilterer) (*XDCXListingFilterer, error) { + contract, err := bindXDCXListing(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &XDCXListingFilterer{contract: contract}, nil +} + +// bindXDCXListing binds a generic wrapper to an already deployed contract. +func bindXDCXListing(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(XDCXListingABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_XDCXListing *XDCXListingRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _XDCXListing.Contract.XDCXListingCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_XDCXListing *XDCXListingRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _XDCXListing.Contract.XDCXListingTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_XDCXListing *XDCXListingRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _XDCXListing.Contract.XDCXListingTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_XDCXListing *XDCXListingCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _XDCXListing.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_XDCXListing *XDCXListingTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _XDCXListing.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_XDCXListing *XDCXListingTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _XDCXListing.Contract.contract.Transact(opts, method, params...) +} + +// GetTokenStatus is a free data retrieval call binding the contract method 0xa3ff31b5. +// +// Solidity: function getTokenStatus(token address) constant returns(bool) +func (_XDCXListing *XDCXListingCaller) GetTokenStatus(opts *bind.CallOpts, token common.Address) (bool, error) { + var ( + ret0 = new(bool) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCXListing.contract.Call(opts, out, "getTokenStatus", token) + return *ret0, err +} + +// GetTokenStatus is a free data retrieval call binding the contract method 0xa3ff31b5. +// +// Solidity: function getTokenStatus(token address) constant returns(bool) +func (_XDCXListing *XDCXListingSession) GetTokenStatus(token common.Address) (bool, error) { + return _XDCXListing.Contract.GetTokenStatus(&_XDCXListing.CallOpts, token) +} + +// GetTokenStatus is a free data retrieval call binding the contract method 0xa3ff31b5. +// +// Solidity: function getTokenStatus(token address) constant returns(bool) +func (_XDCXListing *XDCXListingCallerSession) GetTokenStatus(token common.Address) (bool, error) { + return _XDCXListing.Contract.GetTokenStatus(&_XDCXListing.CallOpts, token) +} + +// Tokens is a free data retrieval call binding the contract method 0x9d63848a. +// +// Solidity: function tokens() constant returns(address[]) +func (_XDCXListing *XDCXListingCaller) Tokens(opts *bind.CallOpts) ([]common.Address, error) { + var ( + ret0 = new([]common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCXListing.contract.Call(opts, out, "tokens") + return *ret0, err +} + +// Tokens is a free data retrieval call binding the contract method 0x9d63848a. +// +// Solidity: function tokens() constant returns(address[]) +func (_XDCXListing *XDCXListingSession) Tokens() ([]common.Address, error) { + return _XDCXListing.Contract.Tokens(&_XDCXListing.CallOpts) +} + +// Tokens is a free data retrieval call binding the contract method 0x9d63848a. +// +// Solidity: function tokens() constant returns(address[]) +func (_XDCXListing *XDCXListingCallerSession) Tokens() ([]common.Address, error) { + return _XDCXListing.Contract.Tokens(&_XDCXListing.CallOpts) +} + +// Apply is a paid mutator transaction binding the contract method 0xc6b32f34. +// +// Solidity: function apply(token address) returns() +func (_XDCXListing *XDCXListingTransactor) Apply(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _XDCXListing.contract.Transact(opts, "apply", token) +} + +// Apply is a paid mutator transaction binding the contract method 0xc6b32f34. +// +// Solidity: function apply(token address) returns() +func (_XDCXListing *XDCXListingSession) Apply(token common.Address) (*types.Transaction, error) { + return _XDCXListing.Contract.Apply(&_XDCXListing.TransactOpts, token) +} + +// Apply is a paid mutator transaction binding the contract method 0xc6b32f34. +// +// Solidity: function apply(token address) returns() +func (_XDCXListing *XDCXListingTransactorSession) Apply(token common.Address) (*types.Transaction, error) { + return _XDCXListing.Contract.Apply(&_XDCXListing.TransactOpts, token) +} diff --git a/contracts/XDCx/lendingRelayerRegistration.go b/contracts/XDCx/lendingRelayerRegistration.go new file mode 100644 index 0000000000..1031ead35a --- /dev/null +++ b/contracts/XDCx/lendingRelayerRegistration.go @@ -0,0 +1,40 @@ +package XDCx + +import ( + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/XDCx/contract" +) + +type LendingRelayerRegistration struct { + *contract.LendingSession + contractBackend bind.ContractBackend +} + +func NewLendingRelayerRegistration(transactOpts *bind.TransactOpts, contractAddr common.Address, contractBackend bind.ContractBackend) (*LendingRelayerRegistration, error) { + smartContract, err := contract.NewLending(contractAddr, contractBackend) + if err != nil { + return nil, err + } + + return &LendingRelayerRegistration{ + &contract.LendingSession{ + Contract: smartContract, + TransactOpts: *transactOpts, + }, + contractBackend, + }, nil +} + +func DeployLendingRelayerRegistration(transactOpts *bind.TransactOpts, contractBackend bind.ContractBackend, relayerAddr common.Address, XDCxListtingAddr common.Address) (common.Address, *LendingRelayerRegistration, error) { + contractAddr, _, _, err := contract.DeployLending(transactOpts, contractBackend, relayerAddr, XDCxListtingAddr) + if err != nil { + return contractAddr, nil, err + } + smartContract, err := NewLendingRelayerRegistration(transactOpts, contractAddr, contractBackend) + if err != nil { + return contractAddr, nil, err + } + + return contractAddr, smartContract, nil +} diff --git a/contracts/XDCx/relayerRegistration.go b/contracts/XDCx/relayerRegistration.go new file mode 100644 index 0000000000..ff3c5fe0e8 --- /dev/null +++ b/contracts/XDCx/relayerRegistration.go @@ -0,0 +1,42 @@ +package XDCx + +import ( + "math/big" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/XDCx/contract" +) + +type RelayerRegistration struct { + *contract.RelayerRegistrationSession + contractBackend bind.ContractBackend +} + +func NewRelayerRegistration(transactOpts *bind.TransactOpts, contractAddr common.Address, contractBackend bind.ContractBackend) (*RelayerRegistration, error) { + smartContract, err := contract.NewRelayerRegistration(contractAddr, contractBackend) + if err != nil { + return nil, err + } + + return &RelayerRegistration{ + &contract.RelayerRegistrationSession{ + Contract: smartContract, + TransactOpts: *transactOpts, + }, + contractBackend, + }, nil +} + +func DeployRelayerRegistration(transactOpts *bind.TransactOpts, contractBackend bind.ContractBackend, XDCxListing common.Address, maxRelayers *big.Int, maxTokenList *big.Int, minDeposit *big.Int) (common.Address, *RelayerRegistration, error) { + contractAddr, _, _, err := contract.DeployRelayerRegistration(transactOpts, contractBackend, XDCxListing, maxRelayers, maxTokenList, minDeposit) + if err != nil { + return contractAddr, nil, err + } + smartContract, err := NewRelayerRegistration(transactOpts, contractAddr, contractBackend) + if err != nil { + return contractAddr, nil, err + } + + return contractAddr, smartContract, nil +} diff --git a/contracts/XDCx/simulation/constants.go b/contracts/XDCx/simulation/constants.go new file mode 100644 index 0000000000..1ed557ed2d --- /dev/null +++ b/contracts/XDCx/simulation/constants.go @@ -0,0 +1,75 @@ +package simulation + +import ( + "math/big" + "os" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" +) + +var ( + BaseXDC = big.NewInt(0).Mul(big.NewInt(10), big.NewInt(100000000000000000)) // 1 XDC + RpcEndpoint = "http://127.0.0.1:8501/" + MainKey, _ = crypto.HexToECDSA(os.Getenv("MAIN_ADDRESS_KEY")) + MainAddr = crypto.PubkeyToAddress(MainKey.PublicKey) //0x17F2beD710ba50Ed27aEa52fc4bD7Bda5ED4a037 + + // TRC21 Token + MinTRC21Apply = big.NewInt(0).Mul(big.NewInt(10), BaseXDC) // 10 XDC + TRC21TokenCap = big.NewInt(0).Mul(big.NewInt(1000000000000), BaseXDC) + TRC21TokenFee = big.NewInt(0) + XDCXListingFee = big.NewInt(0).Mul(big.NewInt(1000), BaseXDC) // 1000 XDC + + // XDCX + MaxRelayers = big.NewInt(200) + MaxTokenList = big.NewInt(200) + MinDeposit = big.NewInt(0).Mul(big.NewInt(25000), BaseXDC) // 25000 XDC + CollateralDepositRate = big.NewInt(150) + CollateralLiquidationRate = big.NewInt(110) + CollateralRecallRate = big.NewInt(200) + TradeFee = uint16(10) // trade fee decimals 10^4 + LendingTradeFee = uint16(100) // lending trade fee decimals 10^4 + // 1m , 1d,7d,30d + Terms = []*big.Int{big.NewInt(60), big.NewInt(86400), big.NewInt(7 * 86400), big.NewInt(30 * 86400)} + RelayerCoinbaseKey, _ = crypto.HexToECDSA(os.Getenv("RELAYER_COINBASE_KEY")) // + RelayerCoinbaseAddr = crypto.PubkeyToAddress(RelayerCoinbaseKey.PublicKey) // 0x0D3ab14BBaD3D99F4203bd7a11aCB94882050E7e + + OwnerRelayerKey, _ = crypto.HexToECDSA(os.Getenv("RELAYER_OWNER_KEY")) + OwnerRelayerAddr = crypto.PubkeyToAddress(OwnerRelayerKey.PublicKey) //0x703c4b2bD70c169f5717101CaeE543299Fc946C7 + + XDCNative = common.HexToAddress("0x0000000000000000000000000000000000000001") + + TokenNameList = []string{"BTC", "ETH", "XRP", "LTC", "BNB", "ADA", "ETC", "BCH", "EOS", "USDT"} + TeamAddresses = []common.Address{ + common.HexToAddress("0x8fB1047e874d2e472cd08980FF8383053dd83102"), // MM team + common.HexToAddress("0x9ca1514E3Dc4059C29a1608AE3a3E3fd35900888"), // MM team + common.HexToAddress("0x15e08dE16f534c890828F2a0D935433aF5B3CE0C"), // CTO + common.HexToAddress("0xb68D825655F2fE14C32558cDf950b45beF18D218"), // DEX team + common.HexToAddress("0xF7349C253FF7747Df661296E0859c44e974fb52E"), // HaiDV + common.HexToAddress("0x9f6b8fDD3733B099A91B6D70CDC7963ebBbd2684"), // Can + common.HexToAddress("0x06605B28aab9835be75ca242a8aE58f2e15F2F45"), // Nien + common.HexToAddress("0x33c2E732ae7dce8B05F37B2ba0CFe14c980c4Dbe"), // Vu Pham + common.HexToAddress("0x16a73f3a64eca79e117258e66dfd7071cc8312a9"), // BTCXDC + common.HexToAddress("0xac177441ac2237b2f79ecff1b8f6bca39e27ef9f"), // ETHXDC + common.HexToAddress("0x4215250e55984c75bbce8ae639b86a6cad8ec126"), // XRPXDC + common.HexToAddress("0x6b70ca959814866dd5c426d63d47dde9cc6c32d2"), // LTCXDC + common.HexToAddress("0x33df079fe9b9cd7fb23a1085e4eaaa8eb6952cb3"), // BNBXDC + common.HexToAddress("0x3cab8292137804688714670640d19f9d7a60c472"), // ADAXDC + common.HexToAddress("0x9415d953d47c5f155cac9de7b24a756f352eafbf"), // ETCXDC + common.HexToAddress("0xe32d2e7c8e8809e45c8e2332830b48d9e231e3f2"), // BCHXDC + common.HexToAddress("0xf76ddbda664ea47088937e1cf9ff15036714dee3"), // EOSXDC + common.HexToAddress("0xc465ee82440dada9509feb235c7cd7d896acf13c"), // ETHBTC + common.HexToAddress("0xb95bdc136c579dc3fd2b2424a8e925a90228d2c2"), // XRPBTC + common.HexToAddress("0xe36c1842365595D44854eEcd64B11c8115E133EF"), // USDXDC + common.HexToAddress("0xaaC1959F6F0fb539F653409079Ec4146267B7555"), // BTCUSD + common.HexToAddress("0x726DA688e2e09f01A2e1aB4c10F25B7CEdD4a0f3"), // ETHUSD + common.HexToAddress("0xc70f010E8DB8bc436712A93D170C7c27Db1981Ea"), // rosetta-cli testing account + } + + Required = big.NewInt(2) + Owners = []common.Address{ + common.HexToAddress("0x244e17B2141288a6F00E79E8feC2341f827d156f"), + common.HexToAddress("0xd106159eC58BD2EAf5B62eF4e9cDb286170B0Bb9"), + common.HexToAddress("0x0197BE034Bf0Bd2b3adDC84366a5681Bb7545888"), + } +) diff --git a/contracts/XDCx/testnet/constants.go b/contracts/XDCx/testnet/constants.go new file mode 100644 index 0000000000..2e1779f934 --- /dev/null +++ b/contracts/XDCx/testnet/constants.go @@ -0,0 +1,68 @@ +package testnet + +import ( + "math/big" + "os" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" +) + +var ( + BaseXDC = big.NewInt(0).Mul(big.NewInt(10), big.NewInt(100000000000000000)) // 1 XDC + RpcEndpoint = "http://127.0.0.1:8545/" + MainKey, _ = crypto.HexToECDSA(os.Getenv("MAIN_ADDRESS_KEY")) + MainAddr = crypto.PubkeyToAddress(MainKey.PublicKey) //0x17F2beD710ba50Ed27aEa52fc4bD7Bda5ED4a037 + + // TRC21 Token + MinTRC21Apply = big.NewInt(0).Mul(big.NewInt(10), BaseXDC) // 10 XDC + TRC21TokenCap = big.NewInt(0).Mul(big.NewInt(1000000000000), BaseXDC) + TRC21TokenFee = big.NewInt(0) + XDCXListingFee = big.NewInt(0).Mul(big.NewInt(1000), BaseXDC) // 1000 XDC + + // XDCX + MaxRelayers = big.NewInt(200) + MaxTokenList = big.NewInt(200) + MinDeposit = big.NewInt(0).Mul(big.NewInt(25000), BaseXDC) // 25000 XDC + CollateralDepositRate = big.NewInt(150) + CollateralLiquidationRate = big.NewInt(110) + CollateralRecallRate = big.NewInt(200) + TradeFee = uint16(10) // trade fee decimals 10^4 + LendingTradeFee = uint16(100) // lending trade fee decimals 10^4 + // 1m , 1d,7d,30d + Terms = []*big.Int{big.NewInt(60), big.NewInt(86400), big.NewInt(7 * 86400), big.NewInt(30 * 86400)} + RelayerCoinbaseKey, _ = crypto.HexToECDSA(os.Getenv("RELAYER_COINBASE_KEY")) // + RelayerCoinbaseAddr = crypto.PubkeyToAddress(RelayerCoinbaseKey.PublicKey) // 0x0D3ab14BBaD3D99F4203bd7a11aCB94882050E7e + + OwnerRelayerKey, _ = crypto.HexToECDSA(os.Getenv("RELAYER_OWNER_KEY")) + OwnerRelayerAddr = crypto.PubkeyToAddress(OwnerRelayerKey.PublicKey) //0x703c4b2bD70c169f5717101CaeE543299Fc946C7 + + XDCNative = common.HexToAddress("0x0000000000000000000000000000000000000001") + + TokenNameList = []string{"BTC", "ETH", "XRP", "LTC", "BNB", "ADA", "ETC", "BCH", "EOS", "USDT"} + TeamAddresses = []common.Address{ + common.HexToAddress("0xE3584D2D430eF34FF9fEeCBEBE6E0f6980082F05"), // Test1 + common.HexToAddress("0x16a73f3a64eca79e117258e66dfd7071cc8312a9"), // BTCXDC + common.HexToAddress("0xac177441ac2237b2f79ecff1b8f6bca39e27ef9f"), // ETHXDC + common.HexToAddress("0x4215250e55984c75bbce8ae639b86a6cad8ec126"), // XRPXDC + common.HexToAddress("0x6b70ca959814866dd5c426d63d47dde9cc6c32d2"), // LTCXDC + common.HexToAddress("0x33df079fe9b9cd7fb23a1085e4eaaa8eb6952cb3"), // BNBXDC + common.HexToAddress("0x3cab8292137804688714670640d19f9d7a60c472"), // ADAXDC + common.HexToAddress("0x9415d953d47c5f155cac9de7b24a756f352eafbf"), // ETCXDC + common.HexToAddress("0xe32d2e7c8e8809e45c8e2332830b48d9e231e3f2"), // BCHXDC + common.HexToAddress("0xf76ddbda664ea47088937e1cf9ff15036714dee3"), // EOSXDC + common.HexToAddress("0xc465ee82440dada9509feb235c7cd7d896acf13c"), // ETHBTC + common.HexToAddress("0xb95bdc136c579dc3fd2b2424a8e925a90228d2c2"), // XRPBTC + common.HexToAddress("0xe36c1842365595D44854eEcd64B11c8115E133EF"), // XDCUSDT + common.HexToAddress("0xaaC1959F6F0fb539F653409079Ec4146267B7555"), // BTCUSDT + common.HexToAddress("0x726DA688e2e09f01A2e1aB4c10F25B7CEdD4a0f3"), // ETHUSDT + + } + + Required = big.NewInt(2) + Owners = []common.Address{ + common.HexToAddress("0x244e17B2141288a6F00E79E8feC2341f827d156f"), + common.HexToAddress("0xd106159eC58BD2EAf5B62eF4e9cDb286170B0Bb9"), + common.HexToAddress("0x0197BE034Bf0Bd2b3adDC84366a5681Bb7545888"), + } +) diff --git a/contracts/XDCx/trc21.go b/contracts/XDCx/trc21.go new file mode 100644 index 0000000000..341d60e4f7 --- /dev/null +++ b/contracts/XDCx/trc21.go @@ -0,0 +1,41 @@ +package XDCx + +import ( + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/XDCx/contract" + "math/big" +) + +type MyTRC21 struct { + *contract.MyTRC21Session + contractBackend bind.ContractBackend +} + +func NewTRC21(transactOpts *bind.TransactOpts, contractAddr common.Address, contractBackend bind.ContractBackend) (*MyTRC21, error) { + smartContract, err := contract.NewMyTRC21(contractAddr, contractBackend) + if err != nil { + return nil, err + } + + return &MyTRC21{ + &contract.MyTRC21Session{ + Contract: smartContract, + TransactOpts: *transactOpts, + }, + contractBackend, + }, nil +} + +func DeployTRC21(transactOpts *bind.TransactOpts, contractBackend bind.ContractBackend, owners []common.Address, required *big.Int, name string, symbol string, decimals uint8, cap, fee, depositFee, withdrawFee *big.Int) (common.Address, *MyTRC21, error) { + contractAddr, _, _, err := contract.DeployMyTRC21(transactOpts, contractBackend, owners, required, name, symbol, decimals, cap, fee, depositFee, withdrawFee) + if err != nil { + return contractAddr, nil, err + } + smartContract, err := NewTRC21(transactOpts, contractAddr, contractBackend) + if err != nil { + return contractAddr, nil, err + } + + return contractAddr, smartContract, nil +} diff --git a/contracts/XDCx/trc21Issuer.go b/contracts/XDCx/trc21Issuer.go new file mode 100644 index 0000000000..2ef1dba8d3 --- /dev/null +++ b/contracts/XDCx/trc21Issuer.go @@ -0,0 +1,41 @@ +package XDCx + +import ( + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/XDCx/contract" + "math/big" +) + +type TRC21Issuer struct { + *contract.TRC21IssuerSession + contractBackend bind.ContractBackend +} + +func NewTRC21Issuer(transactOpts *bind.TransactOpts, contractAddr common.Address, contractBackend bind.ContractBackend) (*TRC21Issuer, error) { + contractObject, err := contract.NewTRC21Issuer(contractAddr, contractBackend) + if err != nil { + return nil, err + } + + return &TRC21Issuer{ + &contract.TRC21IssuerSession{ + Contract: contractObject, + TransactOpts: *transactOpts, + }, + contractBackend, + }, nil +} + +func DeployTRC21Issuer(transactOpts *bind.TransactOpts, contractBackend bind.ContractBackend, minApply *big.Int) (common.Address, *TRC21Issuer, error) { + contractAddr, _, _, err := contract.DeployTRC21Issuer(transactOpts, contractBackend, minApply) + if err != nil { + return contractAddr, nil, err + } + contractObject, err := NewTRC21Issuer(transactOpts, contractAddr, contractBackend) + if err != nil { + return contractAddr, nil, err + } + + return contractAddr, contractObject, nil +} diff --git a/contracts/blocksigner/blocksigner.go b/contracts/blocksigner/blocksigner.go index 998a22c5c8..e3f424fdae 100644 --- a/contracts/blocksigner/blocksigner.go +++ b/contracts/blocksigner/blocksigner.go @@ -1,5 +1,4 @@ // Copyright (c) 2018 XDPoSChain -// Copyright 2024 The go-ethereum Authors // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by @@ -14,77 +13,45 @@ // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . -// Package blocksigner provides the XDC Network block signer contract interface. -// The block signer contract is deployed at address 0x0000000000000000000000000000000000000089 -// and records block signatures for reward distribution. package blocksigner import ( - "math/big" - + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/blocksigner/contract" + "math/big" ) -// ContractAddress is the block signer contract address on XDC Network -var ContractAddress = common.HexToAddress("0x0000000000000000000000000000000000000089") - -// BlockSignerInfo contains information about a block signature -type BlockSignerInfo struct { - BlockNumber *big.Int - BlockHash common.Hash - Signer common.Address +type BlockSigner struct { + *contract.BlockSignerSession + contractBackend bind.ContractBackend } -// SignMethodID is the method ID for sign(uint256,bytes32) function -// keccak256("sign(uint256,bytes32)")[:4] -var SignMethodID = []byte{0x44, 0x00, 0x8f, 0x05} - -// GetSignersMethodID is the method ID for getSigners(uint256) function -// keccak256("getSigners(uint256)")[:4] -var GetSignersMethodID = []byte{0xe7, 0xec, 0x6a, 0xef} - -// EncodeSign encodes the sign(uint256,bytes32) call -func EncodeSign(blockNumber *big.Int, blockHash common.Hash) []byte { - data := make([]byte, 4+64) - copy(data[:4], SignMethodID) - - // Encode block number (uint256) - blockNumBytes := blockNumber.Bytes() - copy(data[4+32-len(blockNumBytes):4+32], blockNumBytes) - - // Encode block hash (bytes32) - copy(data[4+32:], blockHash.Bytes()) - - return data -} - -// EncodeGetSigners encodes the getSigners(uint256) call -func EncodeGetSigners(blockNumber *big.Int) []byte { - data := make([]byte, 4+32) - copy(data[:4], GetSignersMethodID) - - // Encode block number (uint256) - blockNumBytes := blockNumber.Bytes() - copy(data[4+32-len(blockNumBytes):4+32], blockNumBytes) - - return data -} - -// DecodeSigners decodes a list of signer addresses from contract return data -func DecodeSigners(data []byte) ([]common.Address, error) { - if len(data) < 64 { - return nil, nil +func NewBlockSigner(transactOpts *bind.TransactOpts, contractAddr common.Address, contractBackend bind.ContractBackend) (*BlockSigner, error) { + blockSigner, err := contract.NewBlockSigner(contractAddr, contractBackend) + if err != nil { + return nil, err } - // Skip offset (32 bytes) and get length - length := new(big.Int).SetBytes(data[32:64]).Uint64() - signers := make([]common.Address, 0, length) - - offset := 64 - for i := uint64(0); i < length && offset+32 <= len(data); i++ { - var addr common.Address - copy(addr[:], data[offset+12:offset+32]) - signers = append(signers, addr) - offset += 32 - } - return signers, nil + + return &BlockSigner{ + &contract.BlockSignerSession{ + Contract: blockSigner, + TransactOpts: *transactOpts, + }, + contractBackend, + }, nil +} + +func DeployBlockSigner(transactOpts *bind.TransactOpts, contractBackend bind.ContractBackend, epochNumber *big.Int) (common.Address, *BlockSigner, error) { + blockSignerAddr, _, _, err := contract.DeployBlockSigner(transactOpts, contractBackend, epochNumber) + if err != nil { + return blockSignerAddr, nil, err + } + + blockSigner, err := NewBlockSigner(transactOpts, blockSignerAddr, contractBackend) + if err != nil { + return blockSignerAddr, nil, err + } + + return blockSignerAddr, blockSigner, nil } diff --git a/contracts/blocksigner/contract/blocksigner.go b/contracts/blocksigner/contract/blocksigner.go new file mode 100644 index 0000000000..9426df2ffc --- /dev/null +++ b/contracts/blocksigner/contract/blocksigner.go @@ -0,0 +1,539 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contract + +import ( + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// BlockSignerABI is the input ABI used to generate the binding from. +const BlockSignerABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"name\":\"_blockHash\",\"type\":\"bytes32\"}],\"name\":\"sign\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_blockHash\",\"type\":\"bytes32\"}],\"name\":\"getSigners\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"epochNumber\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_epochNumber\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_signer\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_blockHash\",\"type\":\"bytes32\"}],\"name\":\"Sign\",\"type\":\"event\"}]" + +// BlockSignerBin is the compiled bytecode used for deploying new contracts. +const BlockSignerBin = `0x6060604052341561000f57600080fd5b604051602080610386833981016040528080516002555050610350806100366000396000f3006060604052600436106100565763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663e341eaa4811461005b578063e7ec6aef14610076578063f4145a83146100df575b600080fd5b341561006657600080fd5b610074600435602435610104565b005b341561008157600080fd5b61008c600435610227565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156100cb5780820151838201526020016100b3565b505050509050019250505060405180910390f35b34156100ea57600080fd5b6100f26102ac565b60405190815260200160405180910390f35b438290101561011257600080fd5b600280546101289184910263ffffffff6102b216565b43111561013457600080fd5b600082815260016020819052604090912080549091810161015583826102c8565b5060009182526020808320919091018390558282528190526040902080546001810161018183826102c8565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff19163373ffffffffffffffffffffffffffffffffffffffff8116919091179091557f62855fa22e051687c32ac285857751f6d3f2c100c72756d8d30cb7ecb1f64f5490838360405173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091526040808301919091526060909101905180910390a15050565b61022f6102f1565b600082815260208181526040918290208054909290918281020190519081016040528092919081815260200182805480156102a057602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610275575b50505050509050919050565b60025481565b6000828201838110156102c157fe5b9392505050565b8154818355818115116102ec576000838152602090206102ec918101908301610303565b505050565b60206040519081016040526000815290565b61032191905b8082111561031d5760008155600101610309565b5090565b905600a165627a7a72305820a8ceddaea8e4ae00991e2ae81c8c88e160dd8770f255523282c24c2df4c30ec70029` + +// DeployBlockSigner deploys a new Ethereum contract, binding an instance of BlockSigner to it. +func DeployBlockSigner(auth *bind.TransactOpts, backend bind.ContractBackend, _epochNumber *big.Int) (common.Address, *types.Transaction, *BlockSigner, error) { + parsed, err := abi.JSON(strings.NewReader(BlockSignerABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(BlockSignerBin), backend, _epochNumber) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &BlockSigner{BlockSignerCaller: BlockSignerCaller{contract: contract}, BlockSignerTransactor: BlockSignerTransactor{contract: contract}, BlockSignerFilterer: BlockSignerFilterer{contract: contract}}, nil +} + +// BlockSigner is an auto generated Go binding around an Ethereum contract. +type BlockSigner struct { + BlockSignerCaller // Read-only binding to the contract + BlockSignerTransactor // Write-only binding to the contract + BlockSignerFilterer // Log filterer for contract events +} + +// BlockSignerCaller is an auto generated read-only Go binding around an Ethereum contract. +type BlockSignerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BlockSignerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type BlockSignerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BlockSignerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type BlockSignerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// BlockSignerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type BlockSignerSession struct { + Contract *BlockSigner // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BlockSignerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type BlockSignerCallerSession struct { + Contract *BlockSignerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// BlockSignerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type BlockSignerTransactorSession struct { + Contract *BlockSignerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// BlockSignerRaw is an auto generated low-level Go binding around an Ethereum contract. +type BlockSignerRaw struct { + Contract *BlockSigner // Generic contract binding to access the raw methods on +} + +// BlockSignerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type BlockSignerCallerRaw struct { + Contract *BlockSignerCaller // Generic read-only contract binding to access the raw methods on +} + +// BlockSignerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type BlockSignerTransactorRaw struct { + Contract *BlockSignerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewBlockSigner creates a new instance of BlockSigner, bound to a specific deployed contract. +func NewBlockSigner(address common.Address, backend bind.ContractBackend) (*BlockSigner, error) { + contract, err := bindBlockSigner(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &BlockSigner{BlockSignerCaller: BlockSignerCaller{contract: contract}, BlockSignerTransactor: BlockSignerTransactor{contract: contract}, BlockSignerFilterer: BlockSignerFilterer{contract: contract}}, nil +} + +// NewBlockSignerCaller creates a new read-only instance of BlockSigner, bound to a specific deployed contract. +func NewBlockSignerCaller(address common.Address, caller bind.ContractCaller) (*BlockSignerCaller, error) { + contract, err := bindBlockSigner(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &BlockSignerCaller{contract: contract}, nil +} + +// NewBlockSignerTransactor creates a new write-only instance of BlockSigner, bound to a specific deployed contract. +func NewBlockSignerTransactor(address common.Address, transactor bind.ContractTransactor) (*BlockSignerTransactor, error) { + contract, err := bindBlockSigner(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &BlockSignerTransactor{contract: contract}, nil +} + +// NewBlockSignerFilterer creates a new log filterer instance of BlockSigner, bound to a specific deployed contract. +func NewBlockSignerFilterer(address common.Address, filterer bind.ContractFilterer) (*BlockSignerFilterer, error) { + contract, err := bindBlockSigner(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &BlockSignerFilterer{contract: contract}, nil +} + +// bindBlockSigner binds a generic wrapper to an already deployed contract. +func bindBlockSigner(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(BlockSignerABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_BlockSigner *BlockSignerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BlockSigner.Contract.BlockSignerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_BlockSigner *BlockSignerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BlockSigner.Contract.BlockSignerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BlockSigner *BlockSignerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BlockSigner.Contract.BlockSignerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_BlockSigner *BlockSignerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BlockSigner.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_BlockSigner *BlockSignerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BlockSigner.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_BlockSigner *BlockSignerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BlockSigner.Contract.contract.Transact(opts, method, params...) +} + +// EpochNumber is a free data retrieval call binding the contract method 0xf4145a83. +// +// Solidity: function epochNumber() constant returns(uint256) +func (_BlockSigner *BlockSignerCaller) EpochNumber(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _BlockSigner.contract.Call(opts, out, "epochNumber") + return *ret0, err +} + +// EpochNumber is a free data retrieval call binding the contract method 0xf4145a83. +// +// Solidity: function epochNumber() constant returns(uint256) +func (_BlockSigner *BlockSignerSession) EpochNumber() (*big.Int, error) { + return _BlockSigner.Contract.EpochNumber(&_BlockSigner.CallOpts) +} + +// EpochNumber is a free data retrieval call binding the contract method 0xf4145a83. +// +// Solidity: function epochNumber() constant returns(uint256) +func (_BlockSigner *BlockSignerCallerSession) EpochNumber() (*big.Int, error) { + return _BlockSigner.Contract.EpochNumber(&_BlockSigner.CallOpts) +} + +// GetSigners is a free data retrieval call binding the contract method 0xe7ec6aef. +// +// Solidity: function getSigners(_blockHash bytes32) constant returns(address[]) +func (_BlockSigner *BlockSignerCaller) GetSigners(opts *bind.CallOpts, _blockHash [32]byte) ([]common.Address, error) { + var ( + ret0 = new([]common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _BlockSigner.contract.Call(opts, out, "getSigners", _blockHash) + return *ret0, err +} + +// GetSigners is a free data retrieval call binding the contract method 0xe7ec6aef. +// +// Solidity: function getSigners(_blockHash bytes32) constant returns(address[]) +func (_BlockSigner *BlockSignerSession) GetSigners(_blockHash [32]byte) ([]common.Address, error) { + return _BlockSigner.Contract.GetSigners(&_BlockSigner.CallOpts, _blockHash) +} + +// GetSigners is a free data retrieval call binding the contract method 0xe7ec6aef. +// +// Solidity: function getSigners(_blockHash bytes32) constant returns(address[]) +func (_BlockSigner *BlockSignerCallerSession) GetSigners(_blockHash [32]byte) ([]common.Address, error) { + return _BlockSigner.Contract.GetSigners(&_BlockSigner.CallOpts, _blockHash) +} + +// Sign is a paid mutator transaction binding the contract method 0xe341eaa4. +// +// Solidity: function sign(_blockNumber uint256, _blockHash bytes32) returns() +func (_BlockSigner *BlockSignerTransactor) Sign(opts *bind.TransactOpts, _blockNumber *big.Int, _blockHash [32]byte) (*types.Transaction, error) { + return _BlockSigner.contract.Transact(opts, "sign", _blockNumber, _blockHash) +} + +// Sign is a paid mutator transaction binding the contract method 0xe341eaa4. +// +// Solidity: function sign(_blockNumber uint256, _blockHash bytes32) returns() +func (_BlockSigner *BlockSignerSession) Sign(_blockNumber *big.Int, _blockHash [32]byte) (*types.Transaction, error) { + return _BlockSigner.Contract.Sign(&_BlockSigner.TransactOpts, _blockNumber, _blockHash) +} + +// Sign is a paid mutator transaction binding the contract method 0xe341eaa4. +// +// Solidity: function sign(_blockNumber uint256, _blockHash bytes32) returns() +func (_BlockSigner *BlockSignerTransactorSession) Sign(_blockNumber *big.Int, _blockHash [32]byte) (*types.Transaction, error) { + return _BlockSigner.Contract.Sign(&_BlockSigner.TransactOpts, _blockNumber, _blockHash) +} + +// BlockSignerSignIterator is returned from FilterSign and is used to iterate over the raw logs and unpacked data for Sign events raised by the BlockSigner contract. +type BlockSignerSignIterator struct { + Event *BlockSignerSign // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *BlockSignerSignIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(BlockSignerSign) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(BlockSignerSign) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *BlockSignerSignIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *BlockSignerSignIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// BlockSignerSign represents a Sign event raised by the BlockSigner contract. +type BlockSignerSign struct { + Signer common.Address + BlockNumber *big.Int + BlockHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSign is a free log retrieval operation binding the contract event 0x62855fa22e051687c32ac285857751f6d3f2c100c72756d8d30cb7ecb1f64f54. +// +// Solidity: event Sign(_signer address, _blockNumber uint256, _blockHash bytes32) +func (_BlockSigner *BlockSignerFilterer) FilterSign(opts *bind.FilterOpts) (*BlockSignerSignIterator, error) { + + logs, sub, err := _BlockSigner.contract.FilterLogs(opts, "Sign") + if err != nil { + return nil, err + } + return &BlockSignerSignIterator{contract: _BlockSigner.contract, event: "Sign", logs: logs, sub: sub}, nil +} + +// WatchSign is a free log subscription operation binding the contract event 0x62855fa22e051687c32ac285857751f6d3f2c100c72756d8d30cb7ecb1f64f54. +// +// Solidity: event Sign(_signer address, _blockNumber uint256, _blockHash bytes32) +func (_BlockSigner *BlockSignerFilterer) WatchSign(opts *bind.WatchOpts, sink chan<- *BlockSignerSign) (event.Subscription, error) { + + logs, sub, err := _BlockSigner.contract.WatchLogs(opts, "Sign") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(BlockSignerSign) + if err := _BlockSigner.contract.UnpackLog(event, "Sign", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// SafeMathABI is the input ABI used to generate the binding from. +const SafeMathABI = "[]" + +// SafeMathBin is the compiled bytecode used for deploying new contracts. +const SafeMathBin = `0x604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146060604052600080fd00a165627a7a72305820b9407d48ebc7efee5c9f08b3b3a957df2939281f5913225e8c1291f069b900490029` + +// DeploySafeMath deploys a new Ethereum contract, binding an instance of SafeMath to it. +func DeploySafeMath(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SafeMath, error) { + parsed, err := abi.JSON(strings.NewReader(SafeMathABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(SafeMathBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SafeMath{SafeMathCaller: SafeMathCaller{contract: contract}, SafeMathTransactor: SafeMathTransactor{contract: contract}, SafeMathFilterer: SafeMathFilterer{contract: contract}}, nil +} + +// SafeMath is an auto generated Go binding around an Ethereum contract. +type SafeMath struct { + SafeMathCaller // Read-only binding to the contract + SafeMathTransactor // Write-only binding to the contract + SafeMathFilterer // Log filterer for contract events +} + +// SafeMathCaller is an auto generated read-only Go binding around an Ethereum contract. +type SafeMathCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeMathTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SafeMathTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeMathFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SafeMathFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeMathSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SafeMathSession struct { + Contract *SafeMath // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SafeMathCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SafeMathCallerSession struct { + Contract *SafeMathCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SafeMathTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SafeMathTransactorSession struct { + Contract *SafeMathTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SafeMathRaw is an auto generated low-level Go binding around an Ethereum contract. +type SafeMathRaw struct { + Contract *SafeMath // Generic contract binding to access the raw methods on +} + +// SafeMathCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SafeMathCallerRaw struct { + Contract *SafeMathCaller // Generic read-only contract binding to access the raw methods on +} + +// SafeMathTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SafeMathTransactorRaw struct { + Contract *SafeMathTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSafeMath creates a new instance of SafeMath, bound to a specific deployed contract. +func NewSafeMath(address common.Address, backend bind.ContractBackend) (*SafeMath, error) { + contract, err := bindSafeMath(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &SafeMath{SafeMathCaller: SafeMathCaller{contract: contract}, SafeMathTransactor: SafeMathTransactor{contract: contract}, SafeMathFilterer: SafeMathFilterer{contract: contract}}, nil +} + +// NewSafeMathCaller creates a new read-only instance of SafeMath, bound to a specific deployed contract. +func NewSafeMathCaller(address common.Address, caller bind.ContractCaller) (*SafeMathCaller, error) { + contract, err := bindSafeMath(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SafeMathCaller{contract: contract}, nil +} + +// NewSafeMathTransactor creates a new write-only instance of SafeMath, bound to a specific deployed contract. +func NewSafeMathTransactor(address common.Address, transactor bind.ContractTransactor) (*SafeMathTransactor, error) { + contract, err := bindSafeMath(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SafeMathTransactor{contract: contract}, nil +} + +// NewSafeMathFilterer creates a new log filterer instance of SafeMath, bound to a specific deployed contract. +func NewSafeMathFilterer(address common.Address, filterer bind.ContractFilterer) (*SafeMathFilterer, error) { + contract, err := bindSafeMath(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SafeMathFilterer{contract: contract}, nil +} + +// bindSafeMath binds a generic wrapper to an already deployed contract. +func bindSafeMath(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(SafeMathABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SafeMath *SafeMathRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SafeMath.Contract.SafeMathCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SafeMath *SafeMathRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SafeMath.Contract.SafeMathTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SafeMath *SafeMathRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SafeMath.Contract.SafeMathTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SafeMath *SafeMathCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SafeMath.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SafeMath *SafeMathTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SafeMath.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SafeMath *SafeMathTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SafeMath.Contract.contract.Transact(opts, method, params...) +} diff --git a/contracts/multisigwallet/contract/multisigwallet.go b/contracts/multisigwallet/contract/multisigwallet.go new file mode 100644 index 0000000000..f03cda712d --- /dev/null +++ b/contracts/multisigwallet/contract/multisigwallet.go @@ -0,0 +1,1924 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contract + +import ( + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// MultiSigWalletABI is the input ABI used to generate the binding from. +const MultiSigWalletABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"owners\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"removeOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"revokeConfirmation\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"confirmations\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"pending\",\"type\":\"bool\"},{\"name\":\"executed\",\"type\":\"bool\"}],\"name\":\"getTransactionCount\",\"outputs\":[{\"name\":\"count\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"addOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"isConfirmed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"getConfirmationCount\",\"outputs\":[{\"name\":\"count\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transactions\",\"outputs\":[{\"name\":\"destination\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"executed\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOwners\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"from\",\"type\":\"uint256\"},{\"name\":\"to\",\"type\":\"uint256\"},{\"name\":\"pending\",\"type\":\"bool\"},{\"name\":\"executed\",\"type\":\"bool\"}],\"name\":\"getTransactionIds\",\"outputs\":[{\"name\":\"_transactionIds\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"getConfirmations\",\"outputs\":[{\"name\":\"_confirmations\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"transactionCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_required\",\"type\":\"uint256\"}],\"name\":\"changeRequirement\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"confirmTransaction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"destination\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"submitTransaction\",\"outputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_OWNER_COUNT\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"required\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"replaceOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"executeTransaction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_owners\",\"type\":\"address[]\"},{\"name\":\"_required\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"Confirmation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"Revocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"Submission\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"ExecutionFailure\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnerAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnerRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"RequirementChange\",\"type\":\"event\"}]" + +// MultiSigWalletBin is the compiled bytecode used for deploying new contracts. +const MultiSigWalletBin = `0x606060405234156200001057600080fd5b6040516200174f3803806200174f83398101604052808051820191906020018051915060009050825182603282111580156200004c5750818111155b80156200005857508015155b80156200006457508115155b15156200007057600080fd5b600092505b84518310156200014157600260008685815181106200009057fe5b90602001906020020151600160a060020a0316815260208101919091526040016000205460ff16158015620000e35750848381518110620000cd57fe5b90602001906020020151600160a060020a031615155b1515620000ef57600080fd5b6001600260008786815181106200010257fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790556001929092019162000075565b60038580516200015692916020019062000168565b50505060049190915550620001fe9050565b828054828255906000526020600020908101928215620001c2579160200282015b82811115620001c25782518254600160a060020a031916600160a060020a03919091161782556020929092019160019091019062000189565b50620001d0929150620001d4565b5090565b620001fb91905b80821115620001d0578054600160a060020a0319168155600101620001db565b90565b611541806200020e6000396000f30060606040526004361061011c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c278114610165578063173825d91461019757806320ea8d86146101b65780632f54bf6e146101cc5780633411c81c146101ff57806354741525146102215780637065cb4814610250578063784547a71461026f5780638b51d13f146102855780639ace38c21461029b578063a0e67e2b14610349578063a8abe69a146103af578063b5dc40c3146103d2578063b77bf600146103e8578063ba51a6df146103fb578063c01a8c8414610411578063c642747414610427578063d74f8edd1461048c578063dc8452cd1461049f578063e20056e6146104b2578063ee22610b146104d7575b60003411156101635733600160a060020a03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405190815260200160405180910390a25b005b341561017057600080fd5b61017b6004356104ed565b604051600160a060020a03909116815260200160405180910390f35b34156101a257600080fd5b610163600160a060020a0360043516610515565b34156101c157600080fd5b6101636004356106aa565b34156101d757600080fd5b6101eb600160a060020a0360043516610788565b604051901515815260200160405180910390f35b341561020a57600080fd5b6101eb600435600160a060020a036024351661079d565b341561022c57600080fd5b61023e600435151560243515156107bd565b60405190815260200160405180910390f35b341561025b57600080fd5b610163600160a060020a0360043516610829565b341561027a57600080fd5b6101eb600435610965565b341561029057600080fd5b61023e6004356109e9565b34156102a657600080fd5b6102b1600435610a58565b604051600160a060020a038516815260208101849052811515606082015260806040820181815290820184818151815260200191508051906020019080838360005b8381101561030b5780820151838201526020016102f3565b50505050905090810190601f1680156103385780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b341561035457600080fd5b61035c610b36565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561039b578082015183820152602001610383565b505050509050019250505060405180910390f35b34156103ba57600080fd5b61035c60043560243560443515156064351515610b9f565b34156103dd57600080fd5b61035c600435610cc7565b34156103f357600080fd5b61023e610e2b565b341561040657600080fd5b610163600435610e31565b341561041c57600080fd5b610163600435610ec4565b341561043257600080fd5b61023e60048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610fb295505050505050565b341561049757600080fd5b61023e610fd1565b34156104aa57600080fd5b61023e610fd6565b34156104bd57600080fd5b610163600160a060020a0360043581169060243516610fdc565b34156104e257600080fd5b61016360043561118a565b60038054829081106104fb57fe5b600091825260209091200154600160a060020a0316905081565b600030600160a060020a031633600160a060020a031614151561053757600080fd5b600160a060020a038216600090815260026020526040902054829060ff16151561056057600080fd5b600160a060020a0383166000908152600260205260408120805460ff1916905591505b600354600019018210156106435782600160a060020a03166003838154811015156105aa57fe5b600091825260209091200154600160a060020a03161415610638576003805460001981019081106105d757fe5b60009182526020909120015460038054600160a060020a0390921691849081106105fd57fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055610643565b600190910190610583565b6003805460001901906106569082611442565b50600354600454111561066f5760035461066f90610e31565b82600160a060020a03167f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9060405160405180910390a2505050565b33600160a060020a03811660009081526002602052604090205460ff1615156106d257600080fd5b600082815260016020908152604080832033600160a060020a038116855292529091205483919060ff16151561070757600080fd5b600084815260208190526040902060030154849060ff161561072857600080fd5b6000858152600160209081526040808320600160a060020a033316808552925291829020805460ff1916905586917ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9905160405180910390a35050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b600554811015610822578380156107ea575060008181526020819052604090206003015460ff16155b8061080e575082801561080e575060008181526020819052604090206003015460ff165b1561081a576001820191505b6001016107c1565b5092915050565b30600160a060020a031633600160a060020a031614151561084957600080fd5b600160a060020a038116600090815260026020526040902054819060ff161561087157600080fd5b81600160a060020a038116151561088757600080fd5b600380549050600101600454603282111580156108a45750818111155b80156108af57508015155b80156108ba57508115155b15156108c557600080fd5b600160a060020a0385166000908152600260205260409020805460ff1916600190811790915560038054909181016108fd8382611442565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387169081179091557ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25050505050565b600080805b6003548110156109e2576000848152600160205260408120600380549192918490811061099357fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff16156109c7576001820191505b6004548214156109da57600192506109e2565b60010161096a565b5050919050565b6000805b600354811015610a525760008381526001602052604081206003805491929184908110610a1657fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610a4a576001820191505b6001016109ed565b50919050565b60006020528060005260406000206000915090508060000160009054906101000a9004600160a060020a031690806001015490806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b235780601f10610af857610100808354040283529160200191610b23565b820191906000526020600020905b815481529060010190602001808311610b0657829003601f168201915b5050506003909301549192505060ff1684565b610b3e61146b565b6003805480602002602001604051908101604052809291908181526020018280548015610b9457602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610b76575b505050505090505b90565b610ba761146b565b610baf61146b565b600080600554604051805910610bc25750595b9080825280602002602001820160405250925060009150600090505b600554811015610c5757858015610c07575060008181526020819052604090206003015460ff16155b80610c2b5750848015610c2b575060008181526020819052604090206003015460ff165b15610c4f5780838381518110610c3d57fe5b60209081029091010152600191909101905b600101610bde565b878703604051805910610c675750595b908082528060200260200182016040525093508790505b86811015610cbc57828181518110610c9257fe5b906020019060200201518489830381518110610caa57fe5b60209081029091010152600101610c7e565b505050949350505050565b610ccf61146b565b610cd761146b565b6003546000908190604051805910610cec5750595b9080825280602002602001820160405250925060009150600090505b600354811015610db45760008581526001602052604081206003805491929184908110610d3157fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610dac576003805482908110610d6c57fe5b600091825260209091200154600160a060020a0316838381518110610d8d57fe5b600160a060020a03909216602092830290910190910152600191909101905b600101610d08565b81604051805910610dc25750595b90808252806020026020018201604052509350600090505b81811015610e2357828181518110610dee57fe5b90602001906020020151848281518110610e0457fe5b600160a060020a03909216602092830290910190910152600101610dda565b505050919050565b60055481565b30600160a060020a031633600160a060020a0316141515610e5157600080fd5b6003548160328211801590610e665750818111155b8015610e7157508015155b8015610e7c57508115155b1515610e8757600080fd5b60048390557fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a8360405190815260200160405180910390a1505050565b33600160a060020a03811660009081526002602052604090205460ff161515610eec57600080fd5b6000828152602081905260409020548290600160a060020a03161515610f1157600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff1615610f4557600080fd5b6000858152600160208181526040808420600160a060020a033316808652925292839020805460ff191690921790915586917f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef905160405180910390a3610fab8561118a565b5050505050565b6000610fbf848484611345565b9050610fca81610ec4565b9392505050565b603281565b60045481565b600030600160a060020a031633600160a060020a0316141515610ffe57600080fd5b600160a060020a038316600090815260026020526040902054839060ff16151561102757600080fd5b600160a060020a038316600090815260026020526040902054839060ff161561104f57600080fd5b600092505b6003548310156110e85784600160a060020a031660038481548110151561107757fe5b600091825260209091200154600160a060020a031614156110dd57836003848154811015156110a257fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556110e8565b600190920191611054565b600160a060020a03808616600081815260026020526040808220805460ff199081169091559388168252908190208054909316600117909255907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90905160405180910390a283600160a060020a03167ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25050505050565b33600160a060020a03811660009081526002602052604081205490919060ff1615156111b557600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff1615156111ea57600080fd5b600085815260208190526040902060030154859060ff161561120b57600080fd5b61121486610965565b1561133d576000868152602081905260409081902060038101805460ff19166001908117909155815490820154919750600160a060020a03169160028801905180828054600181600116156101000203166002900480156112b65780601f1061128b576101008083540402835291602001916112b6565b820191906000526020600020905b81548152906001019060200180831161129957829003601f168201915b505091505060006040518083038185875af1925050501561130357857f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7560405160405180910390a261133d565b857f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923660405160405180910390a260038501805460ff191690555b505050505050565b600083600160a060020a038116151561135d57600080fd5b600554915060806040519081016040908152600160a060020a0387168252602080830187905281830186905260006060840181905285815290819052208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015181600101556040820151816002019080516113e892916020019061147d565b506060820151600391909101805460ff191691151591909117905550600580546001019055817fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5160405160405180910390a2509392505050565b815481835581811511611466576000838152602090206114669181019083016114fb565b505050565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106114be57805160ff19168380011785556114eb565b828001600101855582156114eb579182015b828111156114eb5782518255916020019190600101906114d0565b506114f79291506114fb565b5090565b610b9c91905b808211156114f757600081556001016115015600a165627a7a72305820d42d65ce3cd184b1c0e98ae5fe9841a03ddd21c504e98c38f8d89df83b2b6be60029` + +// DeployMultiSigWallet deploys a new Ethereum contract, binding an instance of MultiSigWallet to it. +func DeployMultiSigWallet(auth *bind.TransactOpts, backend bind.ContractBackend, _owners []common.Address, _required *big.Int) (common.Address, *types.Transaction, *MultiSigWallet, error) { + parsed, err := abi.JSON(strings.NewReader(MultiSigWalletABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(MultiSigWalletBin), backend, _owners, _required) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &MultiSigWallet{MultiSigWalletCaller: MultiSigWalletCaller{contract: contract}, MultiSigWalletTransactor: MultiSigWalletTransactor{contract: contract}, MultiSigWalletFilterer: MultiSigWalletFilterer{contract: contract}}, nil +} + +// MultiSigWallet is an auto generated Go binding around an Ethereum contract. +type MultiSigWallet struct { + MultiSigWalletCaller // Read-only binding to the contract + MultiSigWalletTransactor // Write-only binding to the contract + MultiSigWalletFilterer // Log filterer for contract events +} + +// MultiSigWalletCaller is an auto generated read-only Go binding around an Ethereum contract. +type MultiSigWalletCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MultiSigWalletTransactor is an auto generated write-only Go binding around an Ethereum contract. +type MultiSigWalletTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MultiSigWalletFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type MultiSigWalletFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MultiSigWalletSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type MultiSigWalletSession struct { + Contract *MultiSigWallet // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// MultiSigWalletCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type MultiSigWalletCallerSession struct { + Contract *MultiSigWalletCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// MultiSigWalletTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type MultiSigWalletTransactorSession struct { + Contract *MultiSigWalletTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// MultiSigWalletRaw is an auto generated low-level Go binding around an Ethereum contract. +type MultiSigWalletRaw struct { + Contract *MultiSigWallet // Generic contract binding to access the raw methods on +} + +// MultiSigWalletCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type MultiSigWalletCallerRaw struct { + Contract *MultiSigWalletCaller // Generic read-only contract binding to access the raw methods on +} + +// MultiSigWalletTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type MultiSigWalletTransactorRaw struct { + Contract *MultiSigWalletTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewMultiSigWallet creates a new instance of MultiSigWallet, bound to a specific deployed contract. +func NewMultiSigWallet(address common.Address, backend bind.ContractBackend) (*MultiSigWallet, error) { + contract, err := bindMultiSigWallet(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &MultiSigWallet{MultiSigWalletCaller: MultiSigWalletCaller{contract: contract}, MultiSigWalletTransactor: MultiSigWalletTransactor{contract: contract}, MultiSigWalletFilterer: MultiSigWalletFilterer{contract: contract}}, nil +} + +// NewMultiSigWalletCaller creates a new read-only instance of MultiSigWallet, bound to a specific deployed contract. +func NewMultiSigWalletCaller(address common.Address, caller bind.ContractCaller) (*MultiSigWalletCaller, error) { + contract, err := bindMultiSigWallet(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &MultiSigWalletCaller{contract: contract}, nil +} + +// NewMultiSigWalletTransactor creates a new write-only instance of MultiSigWallet, bound to a specific deployed contract. +func NewMultiSigWalletTransactor(address common.Address, transactor bind.ContractTransactor) (*MultiSigWalletTransactor, error) { + contract, err := bindMultiSigWallet(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &MultiSigWalletTransactor{contract: contract}, nil +} + +// NewMultiSigWalletFilterer creates a new log filterer instance of MultiSigWallet, bound to a specific deployed contract. +func NewMultiSigWalletFilterer(address common.Address, filterer bind.ContractFilterer) (*MultiSigWalletFilterer, error) { + contract, err := bindMultiSigWallet(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &MultiSigWalletFilterer{contract: contract}, nil +} + +// bindMultiSigWallet binds a generic wrapper to an already deployed contract. +func bindMultiSigWallet(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(MultiSigWalletABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_MultiSigWallet *MultiSigWalletRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MultiSigWallet.Contract.MultiSigWalletCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_MultiSigWallet *MultiSigWalletRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MultiSigWallet.Contract.MultiSigWalletTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_MultiSigWallet *MultiSigWalletRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MultiSigWallet.Contract.MultiSigWalletTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_MultiSigWallet *MultiSigWalletCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MultiSigWallet.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_MultiSigWallet *MultiSigWalletTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MultiSigWallet.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_MultiSigWallet *MultiSigWalletTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MultiSigWallet.Contract.contract.Transact(opts, method, params...) +} + +// MAXOWNERCOUNT is a free data retrieval call binding the contract method 0xd74f8edd. +// +// Solidity: function MAX_OWNER_COUNT() constant returns(uint256) +func (_MultiSigWallet *MultiSigWalletCaller) MAXOWNERCOUNT(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MultiSigWallet.contract.Call(opts, out, "MAX_OWNER_COUNT") + return *ret0, err +} + +// MAXOWNERCOUNT is a free data retrieval call binding the contract method 0xd74f8edd. +// +// Solidity: function MAX_OWNER_COUNT() constant returns(uint256) +func (_MultiSigWallet *MultiSigWalletSession) MAXOWNERCOUNT() (*big.Int, error) { + return _MultiSigWallet.Contract.MAXOWNERCOUNT(&_MultiSigWallet.CallOpts) +} + +// MAXOWNERCOUNT is a free data retrieval call binding the contract method 0xd74f8edd. +// +// Solidity: function MAX_OWNER_COUNT() constant returns(uint256) +func (_MultiSigWallet *MultiSigWalletCallerSession) MAXOWNERCOUNT() (*big.Int, error) { + return _MultiSigWallet.Contract.MAXOWNERCOUNT(&_MultiSigWallet.CallOpts) +} + +// Confirmations is a free data retrieval call binding the contract method 0x3411c81c. +// +// Solidity: function confirmations( uint256, address) constant returns(bool) +func (_MultiSigWallet *MultiSigWalletCaller) Confirmations(opts *bind.CallOpts, arg0 *big.Int, arg1 common.Address) (bool, error) { + var ( + ret0 = new(bool) + ) + out := &[]interface{}{ + ret0, + } + err := _MultiSigWallet.contract.Call(opts, out, "confirmations", arg0, arg1) + return *ret0, err +} + +// Confirmations is a free data retrieval call binding the contract method 0x3411c81c. +// +// Solidity: function confirmations( uint256, address) constant returns(bool) +func (_MultiSigWallet *MultiSigWalletSession) Confirmations(arg0 *big.Int, arg1 common.Address) (bool, error) { + return _MultiSigWallet.Contract.Confirmations(&_MultiSigWallet.CallOpts, arg0, arg1) +} + +// Confirmations is a free data retrieval call binding the contract method 0x3411c81c. +// +// Solidity: function confirmations( uint256, address) constant returns(bool) +func (_MultiSigWallet *MultiSigWalletCallerSession) Confirmations(arg0 *big.Int, arg1 common.Address) (bool, error) { + return _MultiSigWallet.Contract.Confirmations(&_MultiSigWallet.CallOpts, arg0, arg1) +} + +// GetConfirmationCount is a free data retrieval call binding the contract method 0x8b51d13f. +// +// Solidity: function getConfirmationCount(transactionId uint256) constant returns(count uint256) +func (_MultiSigWallet *MultiSigWalletCaller) GetConfirmationCount(opts *bind.CallOpts, transactionId *big.Int) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MultiSigWallet.contract.Call(opts, out, "getConfirmationCount", transactionId) + return *ret0, err +} + +// GetConfirmationCount is a free data retrieval call binding the contract method 0x8b51d13f. +// +// Solidity: function getConfirmationCount(transactionId uint256) constant returns(count uint256) +func (_MultiSigWallet *MultiSigWalletSession) GetConfirmationCount(transactionId *big.Int) (*big.Int, error) { + return _MultiSigWallet.Contract.GetConfirmationCount(&_MultiSigWallet.CallOpts, transactionId) +} + +// GetConfirmationCount is a free data retrieval call binding the contract method 0x8b51d13f. +// +// Solidity: function getConfirmationCount(transactionId uint256) constant returns(count uint256) +func (_MultiSigWallet *MultiSigWalletCallerSession) GetConfirmationCount(transactionId *big.Int) (*big.Int, error) { + return _MultiSigWallet.Contract.GetConfirmationCount(&_MultiSigWallet.CallOpts, transactionId) +} + +// GetConfirmations is a free data retrieval call binding the contract method 0xb5dc40c3. +// +// Solidity: function getConfirmations(transactionId uint256) constant returns(_confirmations address[]) +func (_MultiSigWallet *MultiSigWalletCaller) GetConfirmations(opts *bind.CallOpts, transactionId *big.Int) ([]common.Address, error) { + var ( + ret0 = new([]common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _MultiSigWallet.contract.Call(opts, out, "getConfirmations", transactionId) + return *ret0, err +} + +// GetConfirmations is a free data retrieval call binding the contract method 0xb5dc40c3. +// +// Solidity: function getConfirmations(transactionId uint256) constant returns(_confirmations address[]) +func (_MultiSigWallet *MultiSigWalletSession) GetConfirmations(transactionId *big.Int) ([]common.Address, error) { + return _MultiSigWallet.Contract.GetConfirmations(&_MultiSigWallet.CallOpts, transactionId) +} + +// GetConfirmations is a free data retrieval call binding the contract method 0xb5dc40c3. +// +// Solidity: function getConfirmations(transactionId uint256) constant returns(_confirmations address[]) +func (_MultiSigWallet *MultiSigWalletCallerSession) GetConfirmations(transactionId *big.Int) ([]common.Address, error) { + return _MultiSigWallet.Contract.GetConfirmations(&_MultiSigWallet.CallOpts, transactionId) +} + +// GetOwners is a free data retrieval call binding the contract method 0xa0e67e2b. +// +// Solidity: function getOwners() constant returns(address[]) +func (_MultiSigWallet *MultiSigWalletCaller) GetOwners(opts *bind.CallOpts) ([]common.Address, error) { + var ( + ret0 = new([]common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _MultiSigWallet.contract.Call(opts, out, "getOwners") + return *ret0, err +} + +// GetOwners is a free data retrieval call binding the contract method 0xa0e67e2b. +// +// Solidity: function getOwners() constant returns(address[]) +func (_MultiSigWallet *MultiSigWalletSession) GetOwners() ([]common.Address, error) { + return _MultiSigWallet.Contract.GetOwners(&_MultiSigWallet.CallOpts) +} + +// GetOwners is a free data retrieval call binding the contract method 0xa0e67e2b. +// +// Solidity: function getOwners() constant returns(address[]) +func (_MultiSigWallet *MultiSigWalletCallerSession) GetOwners() ([]common.Address, error) { + return _MultiSigWallet.Contract.GetOwners(&_MultiSigWallet.CallOpts) +} + +// GetTransactionCount is a free data retrieval call binding the contract method 0x54741525. +// +// Solidity: function getTransactionCount(pending bool, executed bool) constant returns(count uint256) +func (_MultiSigWallet *MultiSigWalletCaller) GetTransactionCount(opts *bind.CallOpts, pending bool, executed bool) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MultiSigWallet.contract.Call(opts, out, "getTransactionCount", pending, executed) + return *ret0, err +} + +// GetTransactionCount is a free data retrieval call binding the contract method 0x54741525. +// +// Solidity: function getTransactionCount(pending bool, executed bool) constant returns(count uint256) +func (_MultiSigWallet *MultiSigWalletSession) GetTransactionCount(pending bool, executed bool) (*big.Int, error) { + return _MultiSigWallet.Contract.GetTransactionCount(&_MultiSigWallet.CallOpts, pending, executed) +} + +// GetTransactionCount is a free data retrieval call binding the contract method 0x54741525. +// +// Solidity: function getTransactionCount(pending bool, executed bool) constant returns(count uint256) +func (_MultiSigWallet *MultiSigWalletCallerSession) GetTransactionCount(pending bool, executed bool) (*big.Int, error) { + return _MultiSigWallet.Contract.GetTransactionCount(&_MultiSigWallet.CallOpts, pending, executed) +} + +// GetTransactionIds is a free data retrieval call binding the contract method 0xa8abe69a. +// +// Solidity: function getTransactionIds(from uint256, to uint256, pending bool, executed bool) constant returns(_transactionIds uint256[]) +func (_MultiSigWallet *MultiSigWalletCaller) GetTransactionIds(opts *bind.CallOpts, from *big.Int, to *big.Int, pending bool, executed bool) ([]*big.Int, error) { + var ( + ret0 = new([]*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MultiSigWallet.contract.Call(opts, out, "getTransactionIds", from, to, pending, executed) + return *ret0, err +} + +// GetTransactionIds is a free data retrieval call binding the contract method 0xa8abe69a. +// +// Solidity: function getTransactionIds(from uint256, to uint256, pending bool, executed bool) constant returns(_transactionIds uint256[]) +func (_MultiSigWallet *MultiSigWalletSession) GetTransactionIds(from *big.Int, to *big.Int, pending bool, executed bool) ([]*big.Int, error) { + return _MultiSigWallet.Contract.GetTransactionIds(&_MultiSigWallet.CallOpts, from, to, pending, executed) +} + +// GetTransactionIds is a free data retrieval call binding the contract method 0xa8abe69a. +// +// Solidity: function getTransactionIds(from uint256, to uint256, pending bool, executed bool) constant returns(_transactionIds uint256[]) +func (_MultiSigWallet *MultiSigWalletCallerSession) GetTransactionIds(from *big.Int, to *big.Int, pending bool, executed bool) ([]*big.Int, error) { + return _MultiSigWallet.Contract.GetTransactionIds(&_MultiSigWallet.CallOpts, from, to, pending, executed) +} + +// IsConfirmed is a free data retrieval call binding the contract method 0x784547a7. +// +// Solidity: function isConfirmed(transactionId uint256) constant returns(bool) +func (_MultiSigWallet *MultiSigWalletCaller) IsConfirmed(opts *bind.CallOpts, transactionId *big.Int) (bool, error) { + var ( + ret0 = new(bool) + ) + out := &[]interface{}{ + ret0, + } + err := _MultiSigWallet.contract.Call(opts, out, "isConfirmed", transactionId) + return *ret0, err +} + +// IsConfirmed is a free data retrieval call binding the contract method 0x784547a7. +// +// Solidity: function isConfirmed(transactionId uint256) constant returns(bool) +func (_MultiSigWallet *MultiSigWalletSession) IsConfirmed(transactionId *big.Int) (bool, error) { + return _MultiSigWallet.Contract.IsConfirmed(&_MultiSigWallet.CallOpts, transactionId) +} + +// IsConfirmed is a free data retrieval call binding the contract method 0x784547a7. +// +// Solidity: function isConfirmed(transactionId uint256) constant returns(bool) +func (_MultiSigWallet *MultiSigWalletCallerSession) IsConfirmed(transactionId *big.Int) (bool, error) { + return _MultiSigWallet.Contract.IsConfirmed(&_MultiSigWallet.CallOpts, transactionId) +} + +// IsOwner is a free data retrieval call binding the contract method 0x2f54bf6e. +// +// Solidity: function isOwner( address) constant returns(bool) +func (_MultiSigWallet *MultiSigWalletCaller) IsOwner(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var ( + ret0 = new(bool) + ) + out := &[]interface{}{ + ret0, + } + err := _MultiSigWallet.contract.Call(opts, out, "isOwner", arg0) + return *ret0, err +} + +// IsOwner is a free data retrieval call binding the contract method 0x2f54bf6e. +// +// Solidity: function isOwner( address) constant returns(bool) +func (_MultiSigWallet *MultiSigWalletSession) IsOwner(arg0 common.Address) (bool, error) { + return _MultiSigWallet.Contract.IsOwner(&_MultiSigWallet.CallOpts, arg0) +} + +// IsOwner is a free data retrieval call binding the contract method 0x2f54bf6e. +// +// Solidity: function isOwner( address) constant returns(bool) +func (_MultiSigWallet *MultiSigWalletCallerSession) IsOwner(arg0 common.Address) (bool, error) { + return _MultiSigWallet.Contract.IsOwner(&_MultiSigWallet.CallOpts, arg0) +} + +// Owners is a free data retrieval call binding the contract method 0x025e7c27. +// +// Solidity: function owners( uint256) constant returns(address) +func (_MultiSigWallet *MultiSigWalletCaller) Owners(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _MultiSigWallet.contract.Call(opts, out, "owners", arg0) + return *ret0, err +} + +// Owners is a free data retrieval call binding the contract method 0x025e7c27. +// +// Solidity: function owners( uint256) constant returns(address) +func (_MultiSigWallet *MultiSigWalletSession) Owners(arg0 *big.Int) (common.Address, error) { + return _MultiSigWallet.Contract.Owners(&_MultiSigWallet.CallOpts, arg0) +} + +// Owners is a free data retrieval call binding the contract method 0x025e7c27. +// +// Solidity: function owners( uint256) constant returns(address) +func (_MultiSigWallet *MultiSigWalletCallerSession) Owners(arg0 *big.Int) (common.Address, error) { + return _MultiSigWallet.Contract.Owners(&_MultiSigWallet.CallOpts, arg0) +} + +// Required is a free data retrieval call binding the contract method 0xdc8452cd. +// +// Solidity: function required() constant returns(uint256) +func (_MultiSigWallet *MultiSigWalletCaller) Required(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MultiSigWallet.contract.Call(opts, out, "required") + return *ret0, err +} + +// Required is a free data retrieval call binding the contract method 0xdc8452cd. +// +// Solidity: function required() constant returns(uint256) +func (_MultiSigWallet *MultiSigWalletSession) Required() (*big.Int, error) { + return _MultiSigWallet.Contract.Required(&_MultiSigWallet.CallOpts) +} + +// Required is a free data retrieval call binding the contract method 0xdc8452cd. +// +// Solidity: function required() constant returns(uint256) +func (_MultiSigWallet *MultiSigWalletCallerSession) Required() (*big.Int, error) { + return _MultiSigWallet.Contract.Required(&_MultiSigWallet.CallOpts) +} + +// TransactionCount is a free data retrieval call binding the contract method 0xb77bf600. +// +// Solidity: function transactionCount() constant returns(uint256) +func (_MultiSigWallet *MultiSigWalletCaller) TransactionCount(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MultiSigWallet.contract.Call(opts, out, "transactionCount") + return *ret0, err +} + +// TransactionCount is a free data retrieval call binding the contract method 0xb77bf600. +// +// Solidity: function transactionCount() constant returns(uint256) +func (_MultiSigWallet *MultiSigWalletSession) TransactionCount() (*big.Int, error) { + return _MultiSigWallet.Contract.TransactionCount(&_MultiSigWallet.CallOpts) +} + +// TransactionCount is a free data retrieval call binding the contract method 0xb77bf600. +// +// Solidity: function transactionCount() constant returns(uint256) +func (_MultiSigWallet *MultiSigWalletCallerSession) TransactionCount() (*big.Int, error) { + return _MultiSigWallet.Contract.TransactionCount(&_MultiSigWallet.CallOpts) +} + +// Transactions is a free data retrieval call binding the contract method 0x9ace38c2. +// +// Solidity: function transactions( uint256) constant returns(destination address, value uint256, data bytes, executed bool) +func (_MultiSigWallet *MultiSigWalletCaller) Transactions(opts *bind.CallOpts, arg0 *big.Int) (struct { + Destination common.Address + Value *big.Int + Data []byte + Executed bool +}, error) { + ret := new(struct { + Destination common.Address + Value *big.Int + Data []byte + Executed bool + }) + out := &[]interface{}{ + ret, + } + err := _MultiSigWallet.contract.Call(opts, out, "transactions", arg0) + return *ret, err +} + +// Transactions is a free data retrieval call binding the contract method 0x9ace38c2. +// +// Solidity: function transactions( uint256) constant returns(destination address, value uint256, data bytes, executed bool) +func (_MultiSigWallet *MultiSigWalletSession) Transactions(arg0 *big.Int) (struct { + Destination common.Address + Value *big.Int + Data []byte + Executed bool +}, error) { + return _MultiSigWallet.Contract.Transactions(&_MultiSigWallet.CallOpts, arg0) +} + +// Transactions is a free data retrieval call binding the contract method 0x9ace38c2. +// +// Solidity: function transactions( uint256) constant returns(destination address, value uint256, data bytes, executed bool) +func (_MultiSigWallet *MultiSigWalletCallerSession) Transactions(arg0 *big.Int) (struct { + Destination common.Address + Value *big.Int + Data []byte + Executed bool +}, error) { + return _MultiSigWallet.Contract.Transactions(&_MultiSigWallet.CallOpts, arg0) +} + +// AddOwner is a paid mutator transaction binding the contract method 0x7065cb48. +// +// Solidity: function addOwner(owner address) returns() +func (_MultiSigWallet *MultiSigWalletTransactor) AddOwner(opts *bind.TransactOpts, owner common.Address) (*types.Transaction, error) { + return _MultiSigWallet.contract.Transact(opts, "addOwner", owner) +} + +// AddOwner is a paid mutator transaction binding the contract method 0x7065cb48. +// +// Solidity: function addOwner(owner address) returns() +func (_MultiSigWallet *MultiSigWalletSession) AddOwner(owner common.Address) (*types.Transaction, error) { + return _MultiSigWallet.Contract.AddOwner(&_MultiSigWallet.TransactOpts, owner) +} + +// AddOwner is a paid mutator transaction binding the contract method 0x7065cb48. +// +// Solidity: function addOwner(owner address) returns() +func (_MultiSigWallet *MultiSigWalletTransactorSession) AddOwner(owner common.Address) (*types.Transaction, error) { + return _MultiSigWallet.Contract.AddOwner(&_MultiSigWallet.TransactOpts, owner) +} + +// ChangeRequirement is a paid mutator transaction binding the contract method 0xba51a6df. +// +// Solidity: function changeRequirement(_required uint256) returns() +func (_MultiSigWallet *MultiSigWalletTransactor) ChangeRequirement(opts *bind.TransactOpts, _required *big.Int) (*types.Transaction, error) { + return _MultiSigWallet.contract.Transact(opts, "changeRequirement", _required) +} + +// ChangeRequirement is a paid mutator transaction binding the contract method 0xba51a6df. +// +// Solidity: function changeRequirement(_required uint256) returns() +func (_MultiSigWallet *MultiSigWalletSession) ChangeRequirement(_required *big.Int) (*types.Transaction, error) { + return _MultiSigWallet.Contract.ChangeRequirement(&_MultiSigWallet.TransactOpts, _required) +} + +// ChangeRequirement is a paid mutator transaction binding the contract method 0xba51a6df. +// +// Solidity: function changeRequirement(_required uint256) returns() +func (_MultiSigWallet *MultiSigWalletTransactorSession) ChangeRequirement(_required *big.Int) (*types.Transaction, error) { + return _MultiSigWallet.Contract.ChangeRequirement(&_MultiSigWallet.TransactOpts, _required) +} + +// ConfirmTransaction is a paid mutator transaction binding the contract method 0xc01a8c84. +// +// Solidity: function confirmTransaction(transactionId uint256) returns() +func (_MultiSigWallet *MultiSigWalletTransactor) ConfirmTransaction(opts *bind.TransactOpts, transactionId *big.Int) (*types.Transaction, error) { + return _MultiSigWallet.contract.Transact(opts, "confirmTransaction", transactionId) +} + +// ConfirmTransaction is a paid mutator transaction binding the contract method 0xc01a8c84. +// +// Solidity: function confirmTransaction(transactionId uint256) returns() +func (_MultiSigWallet *MultiSigWalletSession) ConfirmTransaction(transactionId *big.Int) (*types.Transaction, error) { + return _MultiSigWallet.Contract.ConfirmTransaction(&_MultiSigWallet.TransactOpts, transactionId) +} + +// ConfirmTransaction is a paid mutator transaction binding the contract method 0xc01a8c84. +// +// Solidity: function confirmTransaction(transactionId uint256) returns() +func (_MultiSigWallet *MultiSigWalletTransactorSession) ConfirmTransaction(transactionId *big.Int) (*types.Transaction, error) { + return _MultiSigWallet.Contract.ConfirmTransaction(&_MultiSigWallet.TransactOpts, transactionId) +} + +// ExecuteTransaction is a paid mutator transaction binding the contract method 0xee22610b. +// +// Solidity: function executeTransaction(transactionId uint256) returns() +func (_MultiSigWallet *MultiSigWalletTransactor) ExecuteTransaction(opts *bind.TransactOpts, transactionId *big.Int) (*types.Transaction, error) { + return _MultiSigWallet.contract.Transact(opts, "executeTransaction", transactionId) +} + +// ExecuteTransaction is a paid mutator transaction binding the contract method 0xee22610b. +// +// Solidity: function executeTransaction(transactionId uint256) returns() +func (_MultiSigWallet *MultiSigWalletSession) ExecuteTransaction(transactionId *big.Int) (*types.Transaction, error) { + return _MultiSigWallet.Contract.ExecuteTransaction(&_MultiSigWallet.TransactOpts, transactionId) +} + +// ExecuteTransaction is a paid mutator transaction binding the contract method 0xee22610b. +// +// Solidity: function executeTransaction(transactionId uint256) returns() +func (_MultiSigWallet *MultiSigWalletTransactorSession) ExecuteTransaction(transactionId *big.Int) (*types.Transaction, error) { + return _MultiSigWallet.Contract.ExecuteTransaction(&_MultiSigWallet.TransactOpts, transactionId) +} + +// RemoveOwner is a paid mutator transaction binding the contract method 0x173825d9. +// +// Solidity: function removeOwner(owner address) returns() +func (_MultiSigWallet *MultiSigWalletTransactor) RemoveOwner(opts *bind.TransactOpts, owner common.Address) (*types.Transaction, error) { + return _MultiSigWallet.contract.Transact(opts, "removeOwner", owner) +} + +// RemoveOwner is a paid mutator transaction binding the contract method 0x173825d9. +// +// Solidity: function removeOwner(owner address) returns() +func (_MultiSigWallet *MultiSigWalletSession) RemoveOwner(owner common.Address) (*types.Transaction, error) { + return _MultiSigWallet.Contract.RemoveOwner(&_MultiSigWallet.TransactOpts, owner) +} + +// RemoveOwner is a paid mutator transaction binding the contract method 0x173825d9. +// +// Solidity: function removeOwner(owner address) returns() +func (_MultiSigWallet *MultiSigWalletTransactorSession) RemoveOwner(owner common.Address) (*types.Transaction, error) { + return _MultiSigWallet.Contract.RemoveOwner(&_MultiSigWallet.TransactOpts, owner) +} + +// ReplaceOwner is a paid mutator transaction binding the contract method 0xe20056e6. +// +// Solidity: function replaceOwner(owner address, newOwner address) returns() +func (_MultiSigWallet *MultiSigWalletTransactor) ReplaceOwner(opts *bind.TransactOpts, owner common.Address, newOwner common.Address) (*types.Transaction, error) { + return _MultiSigWallet.contract.Transact(opts, "replaceOwner", owner, newOwner) +} + +// ReplaceOwner is a paid mutator transaction binding the contract method 0xe20056e6. +// +// Solidity: function replaceOwner(owner address, newOwner address) returns() +func (_MultiSigWallet *MultiSigWalletSession) ReplaceOwner(owner common.Address, newOwner common.Address) (*types.Transaction, error) { + return _MultiSigWallet.Contract.ReplaceOwner(&_MultiSigWallet.TransactOpts, owner, newOwner) +} + +// ReplaceOwner is a paid mutator transaction binding the contract method 0xe20056e6. +// +// Solidity: function replaceOwner(owner address, newOwner address) returns() +func (_MultiSigWallet *MultiSigWalletTransactorSession) ReplaceOwner(owner common.Address, newOwner common.Address) (*types.Transaction, error) { + return _MultiSigWallet.Contract.ReplaceOwner(&_MultiSigWallet.TransactOpts, owner, newOwner) +} + +// RevokeConfirmation is a paid mutator transaction binding the contract method 0x20ea8d86. +// +// Solidity: function revokeConfirmation(transactionId uint256) returns() +func (_MultiSigWallet *MultiSigWalletTransactor) RevokeConfirmation(opts *bind.TransactOpts, transactionId *big.Int) (*types.Transaction, error) { + return _MultiSigWallet.contract.Transact(opts, "revokeConfirmation", transactionId) +} + +// RevokeConfirmation is a paid mutator transaction binding the contract method 0x20ea8d86. +// +// Solidity: function revokeConfirmation(transactionId uint256) returns() +func (_MultiSigWallet *MultiSigWalletSession) RevokeConfirmation(transactionId *big.Int) (*types.Transaction, error) { + return _MultiSigWallet.Contract.RevokeConfirmation(&_MultiSigWallet.TransactOpts, transactionId) +} + +// RevokeConfirmation is a paid mutator transaction binding the contract method 0x20ea8d86. +// +// Solidity: function revokeConfirmation(transactionId uint256) returns() +func (_MultiSigWallet *MultiSigWalletTransactorSession) RevokeConfirmation(transactionId *big.Int) (*types.Transaction, error) { + return _MultiSigWallet.Contract.RevokeConfirmation(&_MultiSigWallet.TransactOpts, transactionId) +} + +// SubmitTransaction is a paid mutator transaction binding the contract method 0xc6427474. +// +// Solidity: function submitTransaction(destination address, value uint256, data bytes) returns(transactionId uint256) +func (_MultiSigWallet *MultiSigWalletTransactor) SubmitTransaction(opts *bind.TransactOpts, destination common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _MultiSigWallet.contract.Transact(opts, "submitTransaction", destination, value, data) +} + +// SubmitTransaction is a paid mutator transaction binding the contract method 0xc6427474. +// +// Solidity: function submitTransaction(destination address, value uint256, data bytes) returns(transactionId uint256) +func (_MultiSigWallet *MultiSigWalletSession) SubmitTransaction(destination common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _MultiSigWallet.Contract.SubmitTransaction(&_MultiSigWallet.TransactOpts, destination, value, data) +} + +// SubmitTransaction is a paid mutator transaction binding the contract method 0xc6427474. +// +// Solidity: function submitTransaction(destination address, value uint256, data bytes) returns(transactionId uint256) +func (_MultiSigWallet *MultiSigWalletTransactorSession) SubmitTransaction(destination common.Address, value *big.Int, data []byte) (*types.Transaction, error) { + return _MultiSigWallet.Contract.SubmitTransaction(&_MultiSigWallet.TransactOpts, destination, value, data) +} + +// MultiSigWalletConfirmationIterator is returned from FilterConfirmation and is used to iterate over the raw logs and unpacked data for Confirmation events raised by the MultiSigWallet contract. +type MultiSigWalletConfirmationIterator struct { + Event *MultiSigWalletConfirmation // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MultiSigWalletConfirmationIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletConfirmation) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletConfirmation) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MultiSigWalletConfirmationIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MultiSigWalletConfirmationIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MultiSigWalletConfirmation represents a Confirmation event raised by the MultiSigWallet contract. +type MultiSigWalletConfirmation struct { + Sender common.Address + TransactionId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterConfirmation is a free log retrieval operation binding the contract event 0x4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef. +// +// Solidity: event Confirmation(sender indexed address, transactionId indexed uint256) +func (_MultiSigWallet *MultiSigWalletFilterer) FilterConfirmation(opts *bind.FilterOpts, sender []common.Address, transactionId []*big.Int) (*MultiSigWalletConfirmationIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MultiSigWallet.contract.FilterLogs(opts, "Confirmation", senderRule, transactionIdRule) + if err != nil { + return nil, err + } + return &MultiSigWalletConfirmationIterator{contract: _MultiSigWallet.contract, event: "Confirmation", logs: logs, sub: sub}, nil +} + +// WatchConfirmation is a free log subscription operation binding the contract event 0x4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef. +// +// Solidity: event Confirmation(sender indexed address, transactionId indexed uint256) +func (_MultiSigWallet *MultiSigWalletFilterer) WatchConfirmation(opts *bind.WatchOpts, sink chan<- *MultiSigWalletConfirmation, sender []common.Address, transactionId []*big.Int) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MultiSigWallet.contract.WatchLogs(opts, "Confirmation", senderRule, transactionIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MultiSigWalletConfirmation) + if err := _MultiSigWallet.contract.UnpackLog(event, "Confirmation", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MultiSigWalletDepositIterator is returned from FilterDeposit and is used to iterate over the raw logs and unpacked data for Deposit events raised by the MultiSigWallet contract. +type MultiSigWalletDepositIterator struct { + Event *MultiSigWalletDeposit // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MultiSigWalletDepositIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletDeposit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletDeposit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MultiSigWalletDepositIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MultiSigWalletDepositIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MultiSigWalletDeposit represents a Deposit event raised by the MultiSigWallet contract. +type MultiSigWalletDeposit struct { + Sender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeposit is a free log retrieval operation binding the contract event 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c. +// +// Solidity: event Deposit(sender indexed address, value uint256) +func (_MultiSigWallet *MultiSigWalletFilterer) FilterDeposit(opts *bind.FilterOpts, sender []common.Address) (*MultiSigWalletDepositIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _MultiSigWallet.contract.FilterLogs(opts, "Deposit", senderRule) + if err != nil { + return nil, err + } + return &MultiSigWalletDepositIterator{contract: _MultiSigWallet.contract, event: "Deposit", logs: logs, sub: sub}, nil +} + +// WatchDeposit is a free log subscription operation binding the contract event 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c. +// +// Solidity: event Deposit(sender indexed address, value uint256) +func (_MultiSigWallet *MultiSigWalletFilterer) WatchDeposit(opts *bind.WatchOpts, sink chan<- *MultiSigWalletDeposit, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _MultiSigWallet.contract.WatchLogs(opts, "Deposit", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MultiSigWalletDeposit) + if err := _MultiSigWallet.contract.UnpackLog(event, "Deposit", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MultiSigWalletExecutionIterator is returned from FilterExecution and is used to iterate over the raw logs and unpacked data for Execution events raised by the MultiSigWallet contract. +type MultiSigWalletExecutionIterator struct { + Event *MultiSigWalletExecution // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MultiSigWalletExecutionIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletExecution) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletExecution) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MultiSigWalletExecutionIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MultiSigWalletExecutionIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MultiSigWalletExecution represents a Execution event raised by the MultiSigWallet contract. +type MultiSigWalletExecution struct { + TransactionId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecution is a free log retrieval operation binding the contract event 0x33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed75. +// +// Solidity: event Execution(transactionId indexed uint256) +func (_MultiSigWallet *MultiSigWalletFilterer) FilterExecution(opts *bind.FilterOpts, transactionId []*big.Int) (*MultiSigWalletExecutionIterator, error) { + + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MultiSigWallet.contract.FilterLogs(opts, "Execution", transactionIdRule) + if err != nil { + return nil, err + } + return &MultiSigWalletExecutionIterator{contract: _MultiSigWallet.contract, event: "Execution", logs: logs, sub: sub}, nil +} + +// WatchExecution is a free log subscription operation binding the contract event 0x33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed75. +// +// Solidity: event Execution(transactionId indexed uint256) +func (_MultiSigWallet *MultiSigWalletFilterer) WatchExecution(opts *bind.WatchOpts, sink chan<- *MultiSigWalletExecution, transactionId []*big.Int) (event.Subscription, error) { + + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MultiSigWallet.contract.WatchLogs(opts, "Execution", transactionIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MultiSigWalletExecution) + if err := _MultiSigWallet.contract.UnpackLog(event, "Execution", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MultiSigWalletExecutionFailureIterator is returned from FilterExecutionFailure and is used to iterate over the raw logs and unpacked data for ExecutionFailure events raised by the MultiSigWallet contract. +type MultiSigWalletExecutionFailureIterator struct { + Event *MultiSigWalletExecutionFailure // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MultiSigWalletExecutionFailureIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletExecutionFailure) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletExecutionFailure) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MultiSigWalletExecutionFailureIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MultiSigWalletExecutionFailureIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MultiSigWalletExecutionFailure represents a ExecutionFailure event raised by the MultiSigWallet contract. +type MultiSigWalletExecutionFailure struct { + TransactionId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecutionFailure is a free log retrieval operation binding the contract event 0x526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b79236. +// +// Solidity: event ExecutionFailure(transactionId indexed uint256) +func (_MultiSigWallet *MultiSigWalletFilterer) FilterExecutionFailure(opts *bind.FilterOpts, transactionId []*big.Int) (*MultiSigWalletExecutionFailureIterator, error) { + + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MultiSigWallet.contract.FilterLogs(opts, "ExecutionFailure", transactionIdRule) + if err != nil { + return nil, err + } + return &MultiSigWalletExecutionFailureIterator{contract: _MultiSigWallet.contract, event: "ExecutionFailure", logs: logs, sub: sub}, nil +} + +// WatchExecutionFailure is a free log subscription operation binding the contract event 0x526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b79236. +// +// Solidity: event ExecutionFailure(transactionId indexed uint256) +func (_MultiSigWallet *MultiSigWalletFilterer) WatchExecutionFailure(opts *bind.WatchOpts, sink chan<- *MultiSigWalletExecutionFailure, transactionId []*big.Int) (event.Subscription, error) { + + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MultiSigWallet.contract.WatchLogs(opts, "ExecutionFailure", transactionIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MultiSigWalletExecutionFailure) + if err := _MultiSigWallet.contract.UnpackLog(event, "ExecutionFailure", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MultiSigWalletOwnerAdditionIterator is returned from FilterOwnerAddition and is used to iterate over the raw logs and unpacked data for OwnerAddition events raised by the MultiSigWallet contract. +type MultiSigWalletOwnerAdditionIterator struct { + Event *MultiSigWalletOwnerAddition // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MultiSigWalletOwnerAdditionIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletOwnerAddition) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletOwnerAddition) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MultiSigWalletOwnerAdditionIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MultiSigWalletOwnerAdditionIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MultiSigWalletOwnerAddition represents a OwnerAddition event raised by the MultiSigWallet contract. +type MultiSigWalletOwnerAddition struct { + Owner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnerAddition is a free log retrieval operation binding the contract event 0xf39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d. +// +// Solidity: event OwnerAddition(owner indexed address) +func (_MultiSigWallet *MultiSigWalletFilterer) FilterOwnerAddition(opts *bind.FilterOpts, owner []common.Address) (*MultiSigWalletOwnerAdditionIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + + logs, sub, err := _MultiSigWallet.contract.FilterLogs(opts, "OwnerAddition", ownerRule) + if err != nil { + return nil, err + } + return &MultiSigWalletOwnerAdditionIterator{contract: _MultiSigWallet.contract, event: "OwnerAddition", logs: logs, sub: sub}, nil +} + +// WatchOwnerAddition is a free log subscription operation binding the contract event 0xf39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d. +// +// Solidity: event OwnerAddition(owner indexed address) +func (_MultiSigWallet *MultiSigWalletFilterer) WatchOwnerAddition(opts *bind.WatchOpts, sink chan<- *MultiSigWalletOwnerAddition, owner []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + + logs, sub, err := _MultiSigWallet.contract.WatchLogs(opts, "OwnerAddition", ownerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MultiSigWalletOwnerAddition) + if err := _MultiSigWallet.contract.UnpackLog(event, "OwnerAddition", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MultiSigWalletOwnerRemovalIterator is returned from FilterOwnerRemoval and is used to iterate over the raw logs and unpacked data for OwnerRemoval events raised by the MultiSigWallet contract. +type MultiSigWalletOwnerRemovalIterator struct { + Event *MultiSigWalletOwnerRemoval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MultiSigWalletOwnerRemovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletOwnerRemoval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletOwnerRemoval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MultiSigWalletOwnerRemovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MultiSigWalletOwnerRemovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MultiSigWalletOwnerRemoval represents a OwnerRemoval event raised by the MultiSigWallet contract. +type MultiSigWalletOwnerRemoval struct { + Owner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnerRemoval is a free log retrieval operation binding the contract event 0x8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90. +// +// Solidity: event OwnerRemoval(owner indexed address) +func (_MultiSigWallet *MultiSigWalletFilterer) FilterOwnerRemoval(opts *bind.FilterOpts, owner []common.Address) (*MultiSigWalletOwnerRemovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + + logs, sub, err := _MultiSigWallet.contract.FilterLogs(opts, "OwnerRemoval", ownerRule) + if err != nil { + return nil, err + } + return &MultiSigWalletOwnerRemovalIterator{contract: _MultiSigWallet.contract, event: "OwnerRemoval", logs: logs, sub: sub}, nil +} + +// WatchOwnerRemoval is a free log subscription operation binding the contract event 0x8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90. +// +// Solidity: event OwnerRemoval(owner indexed address) +func (_MultiSigWallet *MultiSigWalletFilterer) WatchOwnerRemoval(opts *bind.WatchOpts, sink chan<- *MultiSigWalletOwnerRemoval, owner []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + + logs, sub, err := _MultiSigWallet.contract.WatchLogs(opts, "OwnerRemoval", ownerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MultiSigWalletOwnerRemoval) + if err := _MultiSigWallet.contract.UnpackLog(event, "OwnerRemoval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MultiSigWalletRequirementChangeIterator is returned from FilterRequirementChange and is used to iterate over the raw logs and unpacked data for RequirementChange events raised by the MultiSigWallet contract. +type MultiSigWalletRequirementChangeIterator struct { + Event *MultiSigWalletRequirementChange // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MultiSigWalletRequirementChangeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletRequirementChange) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletRequirementChange) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MultiSigWalletRequirementChangeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MultiSigWalletRequirementChangeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MultiSigWalletRequirementChange represents a RequirementChange event raised by the MultiSigWallet contract. +type MultiSigWalletRequirementChange struct { + Required *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRequirementChange is a free log retrieval operation binding the contract event 0xa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a. +// +// Solidity: event RequirementChange(required uint256) +func (_MultiSigWallet *MultiSigWalletFilterer) FilterRequirementChange(opts *bind.FilterOpts) (*MultiSigWalletRequirementChangeIterator, error) { + + logs, sub, err := _MultiSigWallet.contract.FilterLogs(opts, "RequirementChange") + if err != nil { + return nil, err + } + return &MultiSigWalletRequirementChangeIterator{contract: _MultiSigWallet.contract, event: "RequirementChange", logs: logs, sub: sub}, nil +} + +// WatchRequirementChange is a free log subscription operation binding the contract event 0xa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a. +// +// Solidity: event RequirementChange(required uint256) +func (_MultiSigWallet *MultiSigWalletFilterer) WatchRequirementChange(opts *bind.WatchOpts, sink chan<- *MultiSigWalletRequirementChange) (event.Subscription, error) { + + logs, sub, err := _MultiSigWallet.contract.WatchLogs(opts, "RequirementChange") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MultiSigWalletRequirementChange) + if err := _MultiSigWallet.contract.UnpackLog(event, "RequirementChange", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MultiSigWalletRevocationIterator is returned from FilterRevocation and is used to iterate over the raw logs and unpacked data for Revocation events raised by the MultiSigWallet contract. +type MultiSigWalletRevocationIterator struct { + Event *MultiSigWalletRevocation // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MultiSigWalletRevocationIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletRevocation) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletRevocation) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MultiSigWalletRevocationIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MultiSigWalletRevocationIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MultiSigWalletRevocation represents a Revocation event raised by the MultiSigWallet contract. +type MultiSigWalletRevocation struct { + Sender common.Address + TransactionId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRevocation is a free log retrieval operation binding the contract event 0xf6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9. +// +// Solidity: event Revocation(sender indexed address, transactionId indexed uint256) +func (_MultiSigWallet *MultiSigWalletFilterer) FilterRevocation(opts *bind.FilterOpts, sender []common.Address, transactionId []*big.Int) (*MultiSigWalletRevocationIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MultiSigWallet.contract.FilterLogs(opts, "Revocation", senderRule, transactionIdRule) + if err != nil { + return nil, err + } + return &MultiSigWalletRevocationIterator{contract: _MultiSigWallet.contract, event: "Revocation", logs: logs, sub: sub}, nil +} + +// WatchRevocation is a free log subscription operation binding the contract event 0xf6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9. +// +// Solidity: event Revocation(sender indexed address, transactionId indexed uint256) +func (_MultiSigWallet *MultiSigWalletFilterer) WatchRevocation(opts *bind.WatchOpts, sink chan<- *MultiSigWalletRevocation, sender []common.Address, transactionId []*big.Int) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MultiSigWallet.contract.WatchLogs(opts, "Revocation", senderRule, transactionIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MultiSigWalletRevocation) + if err := _MultiSigWallet.contract.UnpackLog(event, "Revocation", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MultiSigWalletSubmissionIterator is returned from FilterSubmission and is used to iterate over the raw logs and unpacked data for Submission events raised by the MultiSigWallet contract. +type MultiSigWalletSubmissionIterator struct { + Event *MultiSigWalletSubmission // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MultiSigWalletSubmissionIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletSubmission) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MultiSigWalletSubmission) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MultiSigWalletSubmissionIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MultiSigWalletSubmissionIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MultiSigWalletSubmission represents a Submission event raised by the MultiSigWallet contract. +type MultiSigWalletSubmission struct { + TransactionId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSubmission is a free log retrieval operation binding the contract event 0xc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e51. +// +// Solidity: event Submission(transactionId indexed uint256) +func (_MultiSigWallet *MultiSigWalletFilterer) FilterSubmission(opts *bind.FilterOpts, transactionId []*big.Int) (*MultiSigWalletSubmissionIterator, error) { + + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MultiSigWallet.contract.FilterLogs(opts, "Submission", transactionIdRule) + if err != nil { + return nil, err + } + return &MultiSigWalletSubmissionIterator{contract: _MultiSigWallet.contract, event: "Submission", logs: logs, sub: sub}, nil +} + +// WatchSubmission is a free log subscription operation binding the contract event 0xc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e51. +// +// Solidity: event Submission(transactionId indexed uint256) +func (_MultiSigWallet *MultiSigWalletFilterer) WatchSubmission(opts *bind.WatchOpts, sink chan<- *MultiSigWalletSubmission, transactionId []*big.Int) (event.Subscription, error) { + + var transactionIdRule []interface{} + for _, transactionIdItem := range transactionId { + transactionIdRule = append(transactionIdRule, transactionIdItem) + } + + logs, sub, err := _MultiSigWallet.contract.WatchLogs(opts, "Submission", transactionIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MultiSigWalletSubmission) + if err := _MultiSigWallet.contract.UnpackLog(event, "Submission", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} diff --git a/contracts/multisigwallet/multisigwallet.go b/contracts/multisigwallet/multisigwallet.go new file mode 100644 index 0000000000..55eac82c13 --- /dev/null +++ b/contracts/multisigwallet/multisigwallet.go @@ -0,0 +1,57 @@ +// Copyright (c) 2018 XDPoSChain +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +package multisigwallet + +import ( + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/multisigwallet/contract" + "math/big" +) + +type MultiSigWallet struct { + *contract.MultiSigWalletSession + contractBackend bind.ContractBackend +} + +func NewMultiSigWallet(transactOpts *bind.TransactOpts, contractAddr common.Address, contractBackend bind.ContractBackend) (*MultiSigWallet, error) { + blockSigner, err := contract.NewMultiSigWallet(contractAddr, contractBackend) + if err != nil { + return nil, err + } + + return &MultiSigWallet{ + &contract.MultiSigWalletSession{ + Contract: blockSigner, + TransactOpts: *transactOpts, + }, + contractBackend, + }, nil +} + +func DeployMultiSigWallet(transactOpts *bind.TransactOpts, contractBackend bind.ContractBackend, _owners []common.Address, _required *big.Int) (common.Address, *MultiSigWallet, error) { + blockSignerAddr, _, _, err := contract.DeployMultiSigWallet(transactOpts, contractBackend, _owners, _required) + if err != nil { + return blockSignerAddr, nil, err + } + + blockSigner, err := NewMultiSigWallet(transactOpts, blockSignerAddr, contractBackend) + if err != nil { + return blockSignerAddr, nil, err + } + + return blockSignerAddr, blockSigner, nil +} diff --git a/contracts/trc21issuer/contract/TRC21.go b/contracts/trc21issuer/contract/TRC21.go new file mode 100644 index 0000000000..4687bd1f34 --- /dev/null +++ b/contracts/trc21issuer/contract/TRC21.go @@ -0,0 +1,2525 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contract + +import ( + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// ITRC21ABI is the input ABI used to generate the binding from. +const ITRC21ABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"estimateFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"who\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"issuer\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Fee\",\"type\":\"event\"}]" + +// ITRC21Bin is the compiled bytecode used for deploying new contracts. +const ITRC21Bin = `0x` + +// DeployITRC21 deploys a new Ethereum contract, binding an instance of ITRC21 to it. +func DeployITRC21(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ITRC21, error) { + parsed, err := abi.JSON(strings.NewReader(ITRC21ABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(ITRC21Bin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ITRC21{ITRC21Caller: ITRC21Caller{contract: contract}, ITRC21Transactor: ITRC21Transactor{contract: contract}, ITRC21Filterer: ITRC21Filterer{contract: contract}}, nil +} + +// ITRC21 is an auto generated Go binding around an Ethereum contract. +type ITRC21 struct { + ITRC21Caller // Read-only binding to the contract + ITRC21Transactor // Write-only binding to the contract + ITRC21Filterer // Log filterer for contract events +} + +// ITRC21Caller is an auto generated read-only Go binding around an Ethereum contract. +type ITRC21Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ITRC21Transactor is an auto generated write-only Go binding around an Ethereum contract. +type ITRC21Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ITRC21Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ITRC21Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ITRC21Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ITRC21Session struct { + Contract *ITRC21 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ITRC21CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ITRC21CallerSession struct { + Contract *ITRC21Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ITRC21TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ITRC21TransactorSession struct { + Contract *ITRC21Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ITRC21Raw is an auto generated low-level Go binding around an Ethereum contract. +type ITRC21Raw struct { + Contract *ITRC21 // Generic contract binding to access the raw methods on +} + +// ITRC21CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ITRC21CallerRaw struct { + Contract *ITRC21Caller // Generic read-only contract binding to access the raw methods on +} + +// ITRC21TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ITRC21TransactorRaw struct { + Contract *ITRC21Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewITRC21 creates a new instance of ITRC21, bound to a specific deployed contract. +func NewITRC21(address common.Address, backend bind.ContractBackend) (*ITRC21, error) { + contract, err := bindITRC21(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ITRC21{ITRC21Caller: ITRC21Caller{contract: contract}, ITRC21Transactor: ITRC21Transactor{contract: contract}, ITRC21Filterer: ITRC21Filterer{contract: contract}}, nil +} + +// NewITRC21Caller creates a new read-only instance of ITRC21, bound to a specific deployed contract. +func NewITRC21Caller(address common.Address, caller bind.ContractCaller) (*ITRC21Caller, error) { + contract, err := bindITRC21(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ITRC21Caller{contract: contract}, nil +} + +// NewITRC21Transactor creates a new write-only instance of ITRC21, bound to a specific deployed contract. +func NewITRC21Transactor(address common.Address, transactor bind.ContractTransactor) (*ITRC21Transactor, error) { + contract, err := bindITRC21(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ITRC21Transactor{contract: contract}, nil +} + +// NewITRC21Filterer creates a new log filterer instance of ITRC21, bound to a specific deployed contract. +func NewITRC21Filterer(address common.Address, filterer bind.ContractFilterer) (*ITRC21Filterer, error) { + contract, err := bindITRC21(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ITRC21Filterer{contract: contract}, nil +} + +// bindITRC21 binds a generic wrapper to an already deployed contract. +func bindITRC21(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(ITRC21ABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ITRC21 *ITRC21Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ITRC21.Contract.ITRC21Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ITRC21 *ITRC21Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ITRC21.Contract.ITRC21Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ITRC21 *ITRC21Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ITRC21.Contract.ITRC21Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ITRC21 *ITRC21CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ITRC21.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ITRC21 *ITRC21TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ITRC21.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ITRC21 *ITRC21TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ITRC21.Contract.contract.Transact(opts, method, params...) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_ITRC21 *ITRC21Caller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _ITRC21.contract.Call(opts, out, "allowance", owner, spender) + return *ret0, err +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_ITRC21 *ITRC21Session) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _ITRC21.Contract.Allowance(&_ITRC21.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_ITRC21 *ITRC21CallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _ITRC21.Contract.Allowance(&_ITRC21.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(who address) constant returns(uint256) +func (_ITRC21 *ITRC21Caller) BalanceOf(opts *bind.CallOpts, who common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _ITRC21.contract.Call(opts, out, "balanceOf", who) + return *ret0, err +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(who address) constant returns(uint256) +func (_ITRC21 *ITRC21Session) BalanceOf(who common.Address) (*big.Int, error) { + return _ITRC21.Contract.BalanceOf(&_ITRC21.CallOpts, who) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(who address) constant returns(uint256) +func (_ITRC21 *ITRC21CallerSession) BalanceOf(who common.Address) (*big.Int, error) { + return _ITRC21.Contract.BalanceOf(&_ITRC21.CallOpts, who) +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_ITRC21 *ITRC21Caller) EstimateFee(opts *bind.CallOpts, value *big.Int) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _ITRC21.contract.Call(opts, out, "estimateFee", value) + return *ret0, err +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_ITRC21 *ITRC21Session) EstimateFee(value *big.Int) (*big.Int, error) { + return _ITRC21.Contract.EstimateFee(&_ITRC21.CallOpts, value) +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_ITRC21 *ITRC21CallerSession) EstimateFee(value *big.Int) (*big.Int, error) { + return _ITRC21.Contract.EstimateFee(&_ITRC21.CallOpts, value) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_ITRC21 *ITRC21Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _ITRC21.contract.Call(opts, out, "totalSupply") + return *ret0, err +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_ITRC21 *ITRC21Session) TotalSupply() (*big.Int, error) { + return _ITRC21.Contract.TotalSupply(&_ITRC21.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_ITRC21 *ITRC21CallerSession) TotalSupply() (*big.Int, error) { + return _ITRC21.Contract.TotalSupply(&_ITRC21.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_ITRC21 *ITRC21Transactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.contract.Transact(opts, "approve", spender, value) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_ITRC21 *ITRC21Session) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.Contract.Approve(&_ITRC21.TransactOpts, spender, value) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_ITRC21 *ITRC21TransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.Contract.Approve(&_ITRC21.TransactOpts, spender, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_ITRC21 *ITRC21Transactor) Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.contract.Transact(opts, "transfer", to, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_ITRC21 *ITRC21Session) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.Contract.Transfer(&_ITRC21.TransactOpts, to, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_ITRC21 *ITRC21TransactorSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.Contract.Transfer(&_ITRC21.TransactOpts, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_ITRC21 *ITRC21Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.contract.Transact(opts, "transferFrom", from, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_ITRC21 *ITRC21Session) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.Contract.TransferFrom(&_ITRC21.TransactOpts, from, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_ITRC21 *ITRC21TransactorSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ITRC21.Contract.TransferFrom(&_ITRC21.TransactOpts, from, to, value) +} + +// ITRC21ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ITRC21 contract. +type ITRC21ApprovalIterator struct { + Event *ITRC21Approval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ITRC21ApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ITRC21Approval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ITRC21Approval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ITRC21ApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ITRC21ApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ITRC21Approval represents a Approval event raised by the ITRC21 contract. +type ITRC21Approval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(owner indexed address, spender indexed address, value uint256) +func (_ITRC21 *ITRC21Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*ITRC21ApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _ITRC21.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &ITRC21ApprovalIterator{contract: _ITRC21.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(owner indexed address, spender indexed address, value uint256) +func (_ITRC21 *ITRC21Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ITRC21Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _ITRC21.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ITRC21Approval) + if err := _ITRC21.contract.UnpackLog(event, "Approval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ITRC21FeeIterator is returned from FilterFee and is used to iterate over the raw logs and unpacked data for Fee events raised by the ITRC21 contract. +type ITRC21FeeIterator struct { + Event *ITRC21Fee // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ITRC21FeeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ITRC21Fee) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ITRC21Fee) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ITRC21FeeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ITRC21FeeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ITRC21Fee represents a Fee event raised by the ITRC21 contract. +type ITRC21Fee struct { + From common.Address + To common.Address + Issuer common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFee is a free log retrieval operation binding the contract event 0xfcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd99. +// +// Solidity: event Fee(from indexed address, to indexed address, issuer indexed address, value uint256) +func (_ITRC21 *ITRC21Filterer) FilterFee(opts *bind.FilterOpts, from []common.Address, to []common.Address, issuer []common.Address) (*ITRC21FeeIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var issuerRule []interface{} + for _, issuerItem := range issuer { + issuerRule = append(issuerRule, issuerItem) + } + + logs, sub, err := _ITRC21.contract.FilterLogs(opts, "Fee", fromRule, toRule, issuerRule) + if err != nil { + return nil, err + } + return &ITRC21FeeIterator{contract: _ITRC21.contract, event: "Fee", logs: logs, sub: sub}, nil +} + +// WatchFee is a free log subscription operation binding the contract event 0xfcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd99. +// +// Solidity: event Fee(from indexed address, to indexed address, issuer indexed address, value uint256) +func (_ITRC21 *ITRC21Filterer) WatchFee(opts *bind.WatchOpts, sink chan<- *ITRC21Fee, from []common.Address, to []common.Address, issuer []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var issuerRule []interface{} + for _, issuerItem := range issuer { + issuerRule = append(issuerRule, issuerItem) + } + + logs, sub, err := _ITRC21.contract.WatchLogs(opts, "Fee", fromRule, toRule, issuerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ITRC21Fee) + if err := _ITRC21.contract.UnpackLog(event, "Fee", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ITRC21TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ITRC21 contract. +type ITRC21TransferIterator struct { + Event *ITRC21Transfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ITRC21TransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ITRC21Transfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ITRC21Transfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ITRC21TransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ITRC21TransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ITRC21Transfer represents a Transfer event raised by the ITRC21 contract. +type ITRC21Transfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(from indexed address, to indexed address, value uint256) +func (_ITRC21 *ITRC21Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ITRC21TransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ITRC21.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &ITRC21TransferIterator{contract: _ITRC21.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(from indexed address, to indexed address, value uint256) +func (_ITRC21 *ITRC21Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ITRC21Transfer, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ITRC21.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ITRC21Transfer) + if err := _ITRC21.contract.UnpackLog(event, "Transfer", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MyTRC21ABI is the input ABI used to generate the binding from. +const MyTRC21ABI = "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"estimateFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"issuer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"symbol\",\"type\":\"string\"},{\"name\":\"decimals\",\"type\":\"uint8\"},{\"name\":\"cap\",\"type\":\"uint256\"},{\"name\":\"minFee\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"issuer\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Fee\",\"type\":\"event\"}]" + +// MyTRC21Bin is the compiled bytecode used for deploying new contracts. +const MyTRC21Bin = `0x60806040523480156200001157600080fd5b5060405162000b3138038062000b3183398101604090815281516020808401519284015160608501516080860151938601805190969590950194919390929091620000639160059190880190620001e7565b50835162000079906006906020870190620001e7565b506007805460ff191660ff85161790556200009e3383640100000000620000d1810204565b620000b23364010000000062000190810204565b620000c681640100000000620001c8810204565b50505050506200028c565b600160a060020a0382161515620000e757600080fd5b60045462000104908264010000000062000842620001cd82021704565b600455600160a060020a0382166000908152602081905260409020546200013a908264010000000062000842620001cd82021704565b600160a060020a0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600160a060020a0381161515620001a657600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b600155565b600082820183811015620001e057600080fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200022a57805160ff19168380011785556200025a565b828001600101855582156200025a579182015b828111156200025a5782518255916020019190600101906200023d565b50620002689291506200026c565b5090565b6200028991905b8082111562000268576000815560010162000273565b90565b610895806200029c6000396000f3006080604052600436106100b95763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100be578063095ea7b314610148578063127e8e4d1461018057806318160ddd146101aa5780631d143848146101bf57806323b872dd146101f057806324ec75901461021a578063313ce5671461022f57806370a082311461025a57806395d89b411461027b578063a9059cbb14610290578063dd62ed3e146102b4575b600080fd5b3480156100ca57600080fd5b506100d36102db565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561010d5781810151838201526020016100f5565b50505050905090810190601f16801561013a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015457600080fd5b5061016c600160a060020a0360043516602435610371565b604080519115158252519081900360200190f35b34801561018c57600080fd5b5061019860043561042b565b60408051918252519081900360200190f35b3480156101b657600080fd5b50610198610457565b3480156101cb57600080fd5b506101d461045d565b60408051600160a060020a039092168252519081900360200190f35b3480156101fc57600080fd5b5061016c600160a060020a036004358116906024351660443561046c565b34801561022657600080fd5b506101986105ac565b34801561023b57600080fd5b506102446105b2565b6040805160ff9092168252519081900360200190f35b34801561026657600080fd5b50610198600160a060020a03600435166105bb565b34801561028757600080fd5b506100d36105d6565b34801561029c57600080fd5b5061016c600160a060020a0360043516602435610637565b3480156102c057600080fd5b50610198600160a060020a03600435811690602435166106f0565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103675780601f1061033c57610100808354040283529160200191610367565b820191906000526020600020905b81548152906001019060200180831161034a57829003601f168201915b5050505050905090565b6000600160a060020a038316151561038857600080fd5b6001543360009081526020819052604090205410156103a657600080fd5b336000818152600360209081526040808320600160a060020a03888116855292529091208490556002546001546103e29392919091169061071b565b604080518381529051600160a060020a0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a350600192915050565b60015460009061045190610445848463ffffffff61080d16565b9063ffffffff61084216565b92915050565b60045490565b600254600160a060020a031690565b6000806104846001548461084290919063ffffffff16565b9050600160a060020a038416151561049b57600080fd5b808311156104a857600080fd5b600160a060020a03851660009081526003602090815260408083203384529091529020548111156104d857600080fd5b600160a060020a038516600090815260036020908152604080832033845290915290205461050c908263ffffffff61085416565b600160a060020a038616600090815260036020908152604080832033845290915290205561053b85858561071b565b600254600154610558918791600160a060020a039091169061071b565b6002546001546040805191825251600160a060020a039283169287169133917ffcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd999181900360200190a4506001949350505050565b60015490565b60075460ff1690565b600160a060020a031660009081526020819052604090205490565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103675780601f1061033c57610100808354040283529160200191610367565b60008061064f6001548461084290919063ffffffff16565b9050600160a060020a038416151561066657600080fd5b8083111561067357600080fd5b61067e33858561071b565b60025460015461069b913391600160a060020a039091169061071b565b6002546001546040805191825251600160a060020a039283169287169133917ffcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd999181900360200190a4600191505b5092915050565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b600160a060020a03831660009081526020819052604090205481111561074057600080fd5b600160a060020a038216151561075557600080fd5b600160a060020a03831660009081526020819052604090205461077e908263ffffffff61085416565b600160a060020a0380851660009081526020819052604080822093909355908416815220546107b3908263ffffffff61084216565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008083151561082057600091506106e9565b5082820282848281151561083057fe5b041461083b57600080fd5b9392505050565b60008282018381101561083b57600080fd5b60008282111561086357600080fd5b509003905600a165627a7a72305820fafa860f05b0db36e3b8067a75d9068ddc0c82bea68b125e228ef1a02a3a62140029` + +// DeployMyTRC21 deploys a new Ethereum contract, binding an instance of MyTRC21 to it. +func DeployMyTRC21(auth *bind.TransactOpts, backend bind.ContractBackend, name string, symbol string, decimals uint8, cap *big.Int, minFee *big.Int) (common.Address, *types.Transaction, *MyTRC21, error) { + parsed, err := abi.JSON(strings.NewReader(MyTRC21ABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(MyTRC21Bin), backend, name, symbol, decimals, cap, minFee) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &MyTRC21{MyTRC21Caller: MyTRC21Caller{contract: contract}, MyTRC21Transactor: MyTRC21Transactor{contract: contract}, MyTRC21Filterer: MyTRC21Filterer{contract: contract}}, nil +} + +// MyTRC21 is an auto generated Go binding around an Ethereum contract. +type MyTRC21 struct { + MyTRC21Caller // Read-only binding to the contract + MyTRC21Transactor // Write-only binding to the contract + MyTRC21Filterer // Log filterer for contract events +} + +// MyTRC21Caller is an auto generated read-only Go binding around an Ethereum contract. +type MyTRC21Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MyTRC21Transactor is an auto generated write-only Go binding around an Ethereum contract. +type MyTRC21Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MyTRC21Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type MyTRC21Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MyTRC21Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type MyTRC21Session struct { + Contract *MyTRC21 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// MyTRC21CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type MyTRC21CallerSession struct { + Contract *MyTRC21Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// MyTRC21TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type MyTRC21TransactorSession struct { + Contract *MyTRC21Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// MyTRC21Raw is an auto generated low-level Go binding around an Ethereum contract. +type MyTRC21Raw struct { + Contract *MyTRC21 // Generic contract binding to access the raw methods on +} + +// MyTRC21CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type MyTRC21CallerRaw struct { + Contract *MyTRC21Caller // Generic read-only contract binding to access the raw methods on +} + +// MyTRC21TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type MyTRC21TransactorRaw struct { + Contract *MyTRC21Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewMyTRC21 creates a new instance of MyTRC21, bound to a specific deployed contract. +func NewMyTRC21(address common.Address, backend bind.ContractBackend) (*MyTRC21, error) { + contract, err := bindMyTRC21(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &MyTRC21{MyTRC21Caller: MyTRC21Caller{contract: contract}, MyTRC21Transactor: MyTRC21Transactor{contract: contract}, MyTRC21Filterer: MyTRC21Filterer{contract: contract}}, nil +} + +// NewMyTRC21Caller creates a new read-only instance of MyTRC21, bound to a specific deployed contract. +func NewMyTRC21Caller(address common.Address, caller bind.ContractCaller) (*MyTRC21Caller, error) { + contract, err := bindMyTRC21(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &MyTRC21Caller{contract: contract}, nil +} + +// NewMyTRC21Transactor creates a new write-only instance of MyTRC21, bound to a specific deployed contract. +func NewMyTRC21Transactor(address common.Address, transactor bind.ContractTransactor) (*MyTRC21Transactor, error) { + contract, err := bindMyTRC21(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &MyTRC21Transactor{contract: contract}, nil +} + +// NewMyTRC21Filterer creates a new log filterer instance of MyTRC21, bound to a specific deployed contract. +func NewMyTRC21Filterer(address common.Address, filterer bind.ContractFilterer) (*MyTRC21Filterer, error) { + contract, err := bindMyTRC21(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &MyTRC21Filterer{contract: contract}, nil +} + +// bindMyTRC21 binds a generic wrapper to an already deployed contract. +func bindMyTRC21(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(MyTRC21ABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_MyTRC21 *MyTRC21Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MyTRC21.Contract.MyTRC21Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_MyTRC21 *MyTRC21Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MyTRC21.Contract.MyTRC21Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_MyTRC21 *MyTRC21Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MyTRC21.Contract.MyTRC21Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_MyTRC21 *MyTRC21CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MyTRC21.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_MyTRC21 *MyTRC21TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MyTRC21.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_MyTRC21 *MyTRC21TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MyTRC21.Contract.contract.Transact(opts, method, params...) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_MyTRC21 *MyTRC21Caller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "allowance", owner, spender) + return *ret0, err +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_MyTRC21 *MyTRC21Session) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _MyTRC21.Contract.Allowance(&_MyTRC21.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_MyTRC21 *MyTRC21CallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _MyTRC21.Contract.Allowance(&_MyTRC21.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(owner address) constant returns(uint256) +func (_MyTRC21 *MyTRC21Caller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "balanceOf", owner) + return *ret0, err +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(owner address) constant returns(uint256) +func (_MyTRC21 *MyTRC21Session) BalanceOf(owner common.Address) (*big.Int, error) { + return _MyTRC21.Contract.BalanceOf(&_MyTRC21.CallOpts, owner) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(owner address) constant returns(uint256) +func (_MyTRC21 *MyTRC21CallerSession) BalanceOf(owner common.Address) (*big.Int, error) { + return _MyTRC21.Contract.BalanceOf(&_MyTRC21.CallOpts, owner) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() constant returns(uint8) +func (_MyTRC21 *MyTRC21Caller) Decimals(opts *bind.CallOpts) (uint8, error) { + var ( + ret0 = new(uint8) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "decimals") + return *ret0, err +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() constant returns(uint8) +func (_MyTRC21 *MyTRC21Session) Decimals() (uint8, error) { + return _MyTRC21.Contract.Decimals(&_MyTRC21.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() constant returns(uint8) +func (_MyTRC21 *MyTRC21CallerSession) Decimals() (uint8, error) { + return _MyTRC21.Contract.Decimals(&_MyTRC21.CallOpts) +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_MyTRC21 *MyTRC21Caller) EstimateFee(opts *bind.CallOpts, value *big.Int) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "estimateFee", value) + return *ret0, err +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_MyTRC21 *MyTRC21Session) EstimateFee(value *big.Int) (*big.Int, error) { + return _MyTRC21.Contract.EstimateFee(&_MyTRC21.CallOpts, value) +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_MyTRC21 *MyTRC21CallerSession) EstimateFee(value *big.Int) (*big.Int, error) { + return _MyTRC21.Contract.EstimateFee(&_MyTRC21.CallOpts, value) +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_MyTRC21 *MyTRC21Caller) Issuer(opts *bind.CallOpts) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "issuer") + return *ret0, err +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_MyTRC21 *MyTRC21Session) Issuer() (common.Address, error) { + return _MyTRC21.Contract.Issuer(&_MyTRC21.CallOpts) +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_MyTRC21 *MyTRC21CallerSession) Issuer() (common.Address, error) { + return _MyTRC21.Contract.Issuer(&_MyTRC21.CallOpts) +} + +// MinFee is a free data retrieval call binding the contract method 0x24ec7590. +// +// Solidity: function minFee() constant returns(uint256) +func (_MyTRC21 *MyTRC21Caller) MinFee(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "minFee") + return *ret0, err +} + +// MinFee is a free data retrieval call binding the contract method 0x24ec7590. +// +// Solidity: function minFee() constant returns(uint256) +func (_MyTRC21 *MyTRC21Session) MinFee() (*big.Int, error) { + return _MyTRC21.Contract.MinFee(&_MyTRC21.CallOpts) +} + +// MinFee is a free data retrieval call binding the contract method 0x24ec7590. +// +// Solidity: function minFee() constant returns(uint256) +func (_MyTRC21 *MyTRC21CallerSession) MinFee() (*big.Int, error) { + return _MyTRC21.Contract.MinFee(&_MyTRC21.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() constant returns(string) +func (_MyTRC21 *MyTRC21Caller) Name(opts *bind.CallOpts) (string, error) { + var ( + ret0 = new(string) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "name") + return *ret0, err +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() constant returns(string) +func (_MyTRC21 *MyTRC21Session) Name() (string, error) { + return _MyTRC21.Contract.Name(&_MyTRC21.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() constant returns(string) +func (_MyTRC21 *MyTRC21CallerSession) Name() (string, error) { + return _MyTRC21.Contract.Name(&_MyTRC21.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() constant returns(string) +func (_MyTRC21 *MyTRC21Caller) Symbol(opts *bind.CallOpts) (string, error) { + var ( + ret0 = new(string) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "symbol") + return *ret0, err +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() constant returns(string) +func (_MyTRC21 *MyTRC21Session) Symbol() (string, error) { + return _MyTRC21.Contract.Symbol(&_MyTRC21.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() constant returns(string) +func (_MyTRC21 *MyTRC21CallerSession) Symbol() (string, error) { + return _MyTRC21.Contract.Symbol(&_MyTRC21.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_MyTRC21 *MyTRC21Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _MyTRC21.contract.Call(opts, out, "totalSupply") + return *ret0, err +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_MyTRC21 *MyTRC21Session) TotalSupply() (*big.Int, error) { + return _MyTRC21.Contract.TotalSupply(&_MyTRC21.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_MyTRC21 *MyTRC21CallerSession) TotalSupply() (*big.Int, error) { + return _MyTRC21.Contract.TotalSupply(&_MyTRC21.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21Transactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "approve", spender, value) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21Session) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.Approve(&_MyTRC21.TransactOpts, spender, value) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21TransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.Approve(&_MyTRC21.TransactOpts, spender, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21Transactor) Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "transfer", to, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21Session) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.Transfer(&_MyTRC21.TransactOpts, to, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21TransactorSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.Transfer(&_MyTRC21.TransactOpts, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.contract.Transact(opts, "transferFrom", from, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21Session) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.TransferFrom(&_MyTRC21.TransactOpts, from, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_MyTRC21 *MyTRC21TransactorSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _MyTRC21.Contract.TransferFrom(&_MyTRC21.TransactOpts, from, to, value) +} + +// MyTRC21ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the MyTRC21 contract. +type MyTRC21ApprovalIterator struct { + Event *MyTRC21Approval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MyTRC21ApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MyTRC21Approval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MyTRC21Approval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MyTRC21ApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MyTRC21ApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MyTRC21Approval represents a Approval event raised by the MyTRC21 contract. +type MyTRC21Approval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(owner indexed address, spender indexed address, value uint256) +func (_MyTRC21 *MyTRC21Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*MyTRC21ApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _MyTRC21.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &MyTRC21ApprovalIterator{contract: _MyTRC21.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(owner indexed address, spender indexed address, value uint256) +func (_MyTRC21 *MyTRC21Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *MyTRC21Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _MyTRC21.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MyTRC21Approval) + if err := _MyTRC21.contract.UnpackLog(event, "Approval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MyTRC21FeeIterator is returned from FilterFee and is used to iterate over the raw logs and unpacked data for Fee events raised by the MyTRC21 contract. +type MyTRC21FeeIterator struct { + Event *MyTRC21Fee // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MyTRC21FeeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MyTRC21Fee) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MyTRC21Fee) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MyTRC21FeeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MyTRC21FeeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MyTRC21Fee represents a Fee event raised by the MyTRC21 contract. +type MyTRC21Fee struct { + From common.Address + To common.Address + Issuer common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFee is a free log retrieval operation binding the contract event 0xfcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd99. +// +// Solidity: event Fee(from indexed address, to indexed address, issuer indexed address, value uint256) +func (_MyTRC21 *MyTRC21Filterer) FilterFee(opts *bind.FilterOpts, from []common.Address, to []common.Address, issuer []common.Address) (*MyTRC21FeeIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var issuerRule []interface{} + for _, issuerItem := range issuer { + issuerRule = append(issuerRule, issuerItem) + } + + logs, sub, err := _MyTRC21.contract.FilterLogs(opts, "Fee", fromRule, toRule, issuerRule) + if err != nil { + return nil, err + } + return &MyTRC21FeeIterator{contract: _MyTRC21.contract, event: "Fee", logs: logs, sub: sub}, nil +} + +// WatchFee is a free log subscription operation binding the contract event 0xfcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd99. +// +// Solidity: event Fee(from indexed address, to indexed address, issuer indexed address, value uint256) +func (_MyTRC21 *MyTRC21Filterer) WatchFee(opts *bind.WatchOpts, sink chan<- *MyTRC21Fee, from []common.Address, to []common.Address, issuer []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var issuerRule []interface{} + for _, issuerItem := range issuer { + issuerRule = append(issuerRule, issuerItem) + } + + logs, sub, err := _MyTRC21.contract.WatchLogs(opts, "Fee", fromRule, toRule, issuerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MyTRC21Fee) + if err := _MyTRC21.contract.UnpackLog(event, "Fee", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// MyTRC21TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the MyTRC21 contract. +type MyTRC21TransferIterator struct { + Event *MyTRC21Transfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MyTRC21TransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MyTRC21Transfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MyTRC21Transfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MyTRC21TransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MyTRC21TransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MyTRC21Transfer represents a Transfer event raised by the MyTRC21 contract. +type MyTRC21Transfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(from indexed address, to indexed address, value uint256) +func (_MyTRC21 *MyTRC21Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MyTRC21TransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MyTRC21.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &MyTRC21TransferIterator{contract: _MyTRC21.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(from indexed address, to indexed address, value uint256) +func (_MyTRC21 *MyTRC21Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *MyTRC21Transfer, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MyTRC21.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MyTRC21Transfer) + if err := _MyTRC21.contract.UnpackLog(event, "Transfer", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// TRC21ABI is the input ABI used to generate the binding from. +const TRC21ABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"estimateFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"issuer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"issuer\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Fee\",\"type\":\"event\"}]" + +// TRC21Bin is the compiled bytecode used for deploying new contracts. +const TRC21Bin = `0x608060405234801561001057600080fd5b506106aa806100206000396000f3006080604052600436106100985763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b3811461009d578063127e8e4d146100d557806318160ddd146100ff5780631d1438481461011457806323b872dd1461014557806324ec75901461016f57806370a0823114610184578063a9059cbb146101a5578063dd62ed3e146101c9575b600080fd5b3480156100a957600080fd5b506100c1600160a060020a03600435166024356101f0565b604080519115158252519081900360200190f35b3480156100e157600080fd5b506100ed6004356102aa565b60408051918252519081900360200190f35b34801561010b57600080fd5b506100ed6102d6565b34801561012057600080fd5b506101296102dc565b60408051600160a060020a039092168252519081900360200190f35b34801561015157600080fd5b506100c1600160a060020a03600435811690602435166044356102eb565b34801561017b57600080fd5b506100ed61042b565b34801561019057600080fd5b506100ed600160a060020a0360043516610431565b3480156101b157600080fd5b506100c1600160a060020a036004351660243561044c565b3480156101d557600080fd5b506100ed600160a060020a0360043581169060243516610505565b6000600160a060020a038316151561020757600080fd5b60015433600090815260208190526040902054101561022557600080fd5b336000818152600360209081526040808320600160a060020a038881168552925290912084905560025460015461026193929190911690610530565b604080518381529051600160a060020a0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a350600192915050565b6001546000906102d0906102c4848463ffffffff61062216565b9063ffffffff61065716565b92915050565b60045490565b600254600160a060020a031690565b6000806103036001548461065790919063ffffffff16565b9050600160a060020a038416151561031a57600080fd5b8083111561032757600080fd5b600160a060020a038516600090815260036020908152604080832033845290915290205481111561035757600080fd5b600160a060020a038516600090815260036020908152604080832033845290915290205461038b908263ffffffff61066916565b600160a060020a03861660009081526003602090815260408083203384529091529020556103ba858585610530565b6002546001546103d7918791600160a060020a0390911690610530565b6002546001546040805191825251600160a060020a039283169287169133917ffcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd999181900360200190a4506001949350505050565b60015490565b600160a060020a031660009081526020819052604090205490565b6000806104646001548461065790919063ffffffff16565b9050600160a060020a038416151561047b57600080fd5b8083111561048857600080fd5b610493338585610530565b6002546001546104b0913391600160a060020a0390911690610530565b6002546001546040805191825251600160a060020a039283169287169133917ffcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd999181900360200190a4600191505b5092915050565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b600160a060020a03831660009081526020819052604090205481111561055557600080fd5b600160a060020a038216151561056a57600080fd5b600160a060020a038316600090815260208190526040902054610593908263ffffffff61066916565b600160a060020a0380851660009081526020819052604080822093909355908416815220546105c8908263ffffffff61065716565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008083151561063557600091506104fe565b5082820282848281151561064557fe5b041461065057600080fd5b9392505050565b60008282018381101561065057600080fd5b60008282111561067857600080fd5b509003905600a165627a7a72305820a40ecfbb2241cf25b0b2e3e120bec997e2d61dc709b4b92c70939c9b604b417f0029` + +// DeployTRC21 deploys a new Ethereum contract, binding an instance of TRC21 to it. +func DeployTRC21(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *TRC21, error) { + parsed, err := abi.JSON(strings.NewReader(TRC21ABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(TRC21Bin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &TRC21{TRC21Caller: TRC21Caller{contract: contract}, TRC21Transactor: TRC21Transactor{contract: contract}, TRC21Filterer: TRC21Filterer{contract: contract}}, nil +} + +// TRC21 is an auto generated Go binding around an Ethereum contract. +type TRC21 struct { + TRC21Caller // Read-only binding to the contract + TRC21Transactor // Write-only binding to the contract + TRC21Filterer // Log filterer for contract events +} + +// TRC21Caller is an auto generated read-only Go binding around an Ethereum contract. +type TRC21Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TRC21Transactor is an auto generated write-only Go binding around an Ethereum contract. +type TRC21Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TRC21Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type TRC21Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TRC21Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type TRC21Session struct { + Contract *TRC21 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TRC21CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type TRC21CallerSession struct { + Contract *TRC21Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// TRC21TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type TRC21TransactorSession struct { + Contract *TRC21Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TRC21Raw is an auto generated low-level Go binding around an Ethereum contract. +type TRC21Raw struct { + Contract *TRC21 // Generic contract binding to access the raw methods on +} + +// TRC21CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type TRC21CallerRaw struct { + Contract *TRC21Caller // Generic read-only contract binding to access the raw methods on +} + +// TRC21TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type TRC21TransactorRaw struct { + Contract *TRC21Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewTRC21 creates a new instance of TRC21, bound to a specific deployed contract. +func NewTRC21(address common.Address, backend bind.ContractBackend) (*TRC21, error) { + contract, err := bindTRC21(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &TRC21{TRC21Caller: TRC21Caller{contract: contract}, TRC21Transactor: TRC21Transactor{contract: contract}, TRC21Filterer: TRC21Filterer{contract: contract}}, nil +} + +// NewTRC21Caller creates a new read-only instance of TRC21, bound to a specific deployed contract. +func NewTRC21Caller(address common.Address, caller bind.ContractCaller) (*TRC21Caller, error) { + contract, err := bindTRC21(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &TRC21Caller{contract: contract}, nil +} + +// NewTRC21Transactor creates a new write-only instance of TRC21, bound to a specific deployed contract. +func NewTRC21Transactor(address common.Address, transactor bind.ContractTransactor) (*TRC21Transactor, error) { + contract, err := bindTRC21(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &TRC21Transactor{contract: contract}, nil +} + +// NewTRC21Filterer creates a new log filterer instance of TRC21, bound to a specific deployed contract. +func NewTRC21Filterer(address common.Address, filterer bind.ContractFilterer) (*TRC21Filterer, error) { + contract, err := bindTRC21(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &TRC21Filterer{contract: contract}, nil +} + +// bindTRC21 binds a generic wrapper to an already deployed contract. +func bindTRC21(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(TRC21ABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TRC21 *TRC21Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TRC21.Contract.TRC21Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TRC21 *TRC21Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TRC21.Contract.TRC21Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TRC21 *TRC21Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TRC21.Contract.TRC21Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TRC21 *TRC21CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TRC21.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TRC21 *TRC21TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TRC21.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TRC21 *TRC21TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TRC21.Contract.contract.Transact(opts, method, params...) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_TRC21 *TRC21Caller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21.contract.Call(opts, out, "allowance", owner, spender) + return *ret0, err +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_TRC21 *TRC21Session) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _TRC21.Contract.Allowance(&_TRC21.CallOpts, owner, spender) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(owner address, spender address) constant returns(uint256) +func (_TRC21 *TRC21CallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) { + return _TRC21.Contract.Allowance(&_TRC21.CallOpts, owner, spender) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(owner address) constant returns(uint256) +func (_TRC21 *TRC21Caller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21.contract.Call(opts, out, "balanceOf", owner) + return *ret0, err +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(owner address) constant returns(uint256) +func (_TRC21 *TRC21Session) BalanceOf(owner common.Address) (*big.Int, error) { + return _TRC21.Contract.BalanceOf(&_TRC21.CallOpts, owner) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(owner address) constant returns(uint256) +func (_TRC21 *TRC21CallerSession) BalanceOf(owner common.Address) (*big.Int, error) { + return _TRC21.Contract.BalanceOf(&_TRC21.CallOpts, owner) +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_TRC21 *TRC21Caller) EstimateFee(opts *bind.CallOpts, value *big.Int) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21.contract.Call(opts, out, "estimateFee", value) + return *ret0, err +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_TRC21 *TRC21Session) EstimateFee(value *big.Int) (*big.Int, error) { + return _TRC21.Contract.EstimateFee(&_TRC21.CallOpts, value) +} + +// EstimateFee is a free data retrieval call binding the contract method 0x127e8e4d. +// +// Solidity: function estimateFee(value uint256) constant returns(uint256) +func (_TRC21 *TRC21CallerSession) EstimateFee(value *big.Int) (*big.Int, error) { + return _TRC21.Contract.EstimateFee(&_TRC21.CallOpts, value) +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_TRC21 *TRC21Caller) Issuer(opts *bind.CallOpts) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21.contract.Call(opts, out, "issuer") + return *ret0, err +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_TRC21 *TRC21Session) Issuer() (common.Address, error) { + return _TRC21.Contract.Issuer(&_TRC21.CallOpts) +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_TRC21 *TRC21CallerSession) Issuer() (common.Address, error) { + return _TRC21.Contract.Issuer(&_TRC21.CallOpts) +} + +// MinFee is a free data retrieval call binding the contract method 0x24ec7590. +// +// Solidity: function minFee() constant returns(uint256) +func (_TRC21 *TRC21Caller) MinFee(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21.contract.Call(opts, out, "minFee") + return *ret0, err +} + +// MinFee is a free data retrieval call binding the contract method 0x24ec7590. +// +// Solidity: function minFee() constant returns(uint256) +func (_TRC21 *TRC21Session) MinFee() (*big.Int, error) { + return _TRC21.Contract.MinFee(&_TRC21.CallOpts) +} + +// MinFee is a free data retrieval call binding the contract method 0x24ec7590. +// +// Solidity: function minFee() constant returns(uint256) +func (_TRC21 *TRC21CallerSession) MinFee() (*big.Int, error) { + return _TRC21.Contract.MinFee(&_TRC21.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_TRC21 *TRC21Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21.contract.Call(opts, out, "totalSupply") + return *ret0, err +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_TRC21 *TRC21Session) TotalSupply() (*big.Int, error) { + return _TRC21.Contract.TotalSupply(&_TRC21.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() constant returns(uint256) +func (_TRC21 *TRC21CallerSession) TotalSupply() (*big.Int, error) { + return _TRC21.Contract.TotalSupply(&_TRC21.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_TRC21 *TRC21Transactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.contract.Transact(opts, "approve", spender, value) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_TRC21 *TRC21Session) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.Contract.Approve(&_TRC21.TransactOpts, spender, value) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(spender address, value uint256) returns(bool) +func (_TRC21 *TRC21TransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.Contract.Approve(&_TRC21.TransactOpts, spender, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_TRC21 *TRC21Transactor) Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.contract.Transact(opts, "transfer", to, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_TRC21 *TRC21Session) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.Contract.Transfer(&_TRC21.TransactOpts, to, value) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(to address, value uint256) returns(bool) +func (_TRC21 *TRC21TransactorSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.Contract.Transfer(&_TRC21.TransactOpts, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_TRC21 *TRC21Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.contract.Transact(opts, "transferFrom", from, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_TRC21 *TRC21Session) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.Contract.TransferFrom(&_TRC21.TransactOpts, from, to, value) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(from address, to address, value uint256) returns(bool) +func (_TRC21 *TRC21TransactorSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _TRC21.Contract.TransferFrom(&_TRC21.TransactOpts, from, to, value) +} + +// TRC21ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the TRC21 contract. +type TRC21ApprovalIterator struct { + Event *TRC21Approval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TRC21ApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TRC21Approval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TRC21Approval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TRC21ApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TRC21ApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TRC21Approval represents a Approval event raised by the TRC21 contract. +type TRC21Approval struct { + Owner common.Address + Spender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(owner indexed address, spender indexed address, value uint256) +func (_TRC21 *TRC21Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*TRC21ApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _TRC21.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return &TRC21ApprovalIterator{contract: _TRC21.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(owner indexed address, spender indexed address, value uint256) +func (_TRC21 *TRC21Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *TRC21Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var spenderRule []interface{} + for _, spenderItem := range spender { + spenderRule = append(spenderRule, spenderItem) + } + + logs, sub, err := _TRC21.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TRC21Approval) + if err := _TRC21.contract.UnpackLog(event, "Approval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// TRC21FeeIterator is returned from FilterFee and is used to iterate over the raw logs and unpacked data for Fee events raised by the TRC21 contract. +type TRC21FeeIterator struct { + Event *TRC21Fee // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TRC21FeeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TRC21Fee) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TRC21Fee) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TRC21FeeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TRC21FeeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TRC21Fee represents a Fee event raised by the TRC21 contract. +type TRC21Fee struct { + From common.Address + To common.Address + Issuer common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFee is a free log retrieval operation binding the contract event 0xfcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd99. +// +// Solidity: event Fee(from indexed address, to indexed address, issuer indexed address, value uint256) +func (_TRC21 *TRC21Filterer) FilterFee(opts *bind.FilterOpts, from []common.Address, to []common.Address, issuer []common.Address) (*TRC21FeeIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var issuerRule []interface{} + for _, issuerItem := range issuer { + issuerRule = append(issuerRule, issuerItem) + } + + logs, sub, err := _TRC21.contract.FilterLogs(opts, "Fee", fromRule, toRule, issuerRule) + if err != nil { + return nil, err + } + return &TRC21FeeIterator{contract: _TRC21.contract, event: "Fee", logs: logs, sub: sub}, nil +} + +// WatchFee is a free log subscription operation binding the contract event 0xfcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd99. +// +// Solidity: event Fee(from indexed address, to indexed address, issuer indexed address, value uint256) +func (_TRC21 *TRC21Filterer) WatchFee(opts *bind.WatchOpts, sink chan<- *TRC21Fee, from []common.Address, to []common.Address, issuer []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var issuerRule []interface{} + for _, issuerItem := range issuer { + issuerRule = append(issuerRule, issuerItem) + } + + logs, sub, err := _TRC21.contract.WatchLogs(opts, "Fee", fromRule, toRule, issuerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TRC21Fee) + if err := _TRC21.contract.UnpackLog(event, "Fee", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// TRC21TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the TRC21 contract. +type TRC21TransferIterator struct { + Event *TRC21Transfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TRC21TransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TRC21Transfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TRC21Transfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TRC21TransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TRC21TransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TRC21Transfer represents a Transfer event raised by the TRC21 contract. +type TRC21Transfer struct { + From common.Address + To common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(from indexed address, to indexed address, value uint256) +func (_TRC21 *TRC21Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*TRC21TransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _TRC21.contract.FilterLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return &TRC21TransferIterator{contract: _TRC21.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(from indexed address, to indexed address, value uint256) +func (_TRC21 *TRC21Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *TRC21Transfer, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _TRC21.contract.WatchLogs(opts, "Transfer", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TRC21Transfer) + if err := _TRC21.contract.UnpackLog(event, "Transfer", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} diff --git a/contracts/trc21issuer/contract/TRC21Issuer.go b/contracts/trc21issuer/contract/TRC21Issuer.go new file mode 100644 index 0000000000..b5ce55facc --- /dev/null +++ b/contracts/trc21issuer/contract/TRC21Issuer.go @@ -0,0 +1,776 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contract + +import ( + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// AbstractTokenTRC21ABI is the input ABI used to generate the binding from. +const AbstractTokenTRC21ABI = "[{\"constant\":true,\"inputs\":[],\"name\":\"issuer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]" + +// AbstractTokenTRC21Bin is the compiled bytecode used for deploying new contracts. +const AbstractTokenTRC21Bin = `0x` + +// DeployAbstractTokenTRC21 deploys a new Ethereum contract, binding an instance of AbstractTokenTRC21 to it. +func DeployAbstractTokenTRC21(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *AbstractTokenTRC21, error) { + parsed, err := abi.JSON(strings.NewReader(AbstractTokenTRC21ABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(AbstractTokenTRC21Bin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &AbstractTokenTRC21{AbstractTokenTRC21Caller: AbstractTokenTRC21Caller{contract: contract}, AbstractTokenTRC21Transactor: AbstractTokenTRC21Transactor{contract: contract}, AbstractTokenTRC21Filterer: AbstractTokenTRC21Filterer{contract: contract}}, nil +} + +// AbstractTokenTRC21 is an auto generated Go binding around an Ethereum contract. +type AbstractTokenTRC21 struct { + AbstractTokenTRC21Caller // Read-only binding to the contract + AbstractTokenTRC21Transactor // Write-only binding to the contract + AbstractTokenTRC21Filterer // Log filterer for contract events +} + +// AbstractTokenTRC21Caller is an auto generated read-only Go binding around an Ethereum contract. +type AbstractTokenTRC21Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AbstractTokenTRC21Transactor is an auto generated write-only Go binding around an Ethereum contract. +type AbstractTokenTRC21Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AbstractTokenTRC21Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AbstractTokenTRC21Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AbstractTokenTRC21Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AbstractTokenTRC21Session struct { + Contract *AbstractTokenTRC21 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AbstractTokenTRC21CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AbstractTokenTRC21CallerSession struct { + Contract *AbstractTokenTRC21Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AbstractTokenTRC21TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AbstractTokenTRC21TransactorSession struct { + Contract *AbstractTokenTRC21Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AbstractTokenTRC21Raw is an auto generated low-level Go binding around an Ethereum contract. +type AbstractTokenTRC21Raw struct { + Contract *AbstractTokenTRC21 // Generic contract binding to access the raw methods on +} + +// AbstractTokenTRC21CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AbstractTokenTRC21CallerRaw struct { + Contract *AbstractTokenTRC21Caller // Generic read-only contract binding to access the raw methods on +} + +// AbstractTokenTRC21TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AbstractTokenTRC21TransactorRaw struct { + Contract *AbstractTokenTRC21Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewAbstractTokenTRC21 creates a new instance of AbstractTokenTRC21, bound to a specific deployed contract. +func NewAbstractTokenTRC21(address common.Address, backend bind.ContractBackend) (*AbstractTokenTRC21, error) { + contract, err := bindAbstractTokenTRC21(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &AbstractTokenTRC21{AbstractTokenTRC21Caller: AbstractTokenTRC21Caller{contract: contract}, AbstractTokenTRC21Transactor: AbstractTokenTRC21Transactor{contract: contract}, AbstractTokenTRC21Filterer: AbstractTokenTRC21Filterer{contract: contract}}, nil +} + +// NewAbstractTokenTRC21Caller creates a new read-only instance of AbstractTokenTRC21, bound to a specific deployed contract. +func NewAbstractTokenTRC21Caller(address common.Address, caller bind.ContractCaller) (*AbstractTokenTRC21Caller, error) { + contract, err := bindAbstractTokenTRC21(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AbstractTokenTRC21Caller{contract: contract}, nil +} + +// NewAbstractTokenTRC21Transactor creates a new write-only instance of AbstractTokenTRC21, bound to a specific deployed contract. +func NewAbstractTokenTRC21Transactor(address common.Address, transactor bind.ContractTransactor) (*AbstractTokenTRC21Transactor, error) { + contract, err := bindAbstractTokenTRC21(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AbstractTokenTRC21Transactor{contract: contract}, nil +} + +// NewAbstractTokenTRC21Filterer creates a new log filterer instance of AbstractTokenTRC21, bound to a specific deployed contract. +func NewAbstractTokenTRC21Filterer(address common.Address, filterer bind.ContractFilterer) (*AbstractTokenTRC21Filterer, error) { + contract, err := bindAbstractTokenTRC21(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AbstractTokenTRC21Filterer{contract: contract}, nil +} + +// bindAbstractTokenTRC21 binds a generic wrapper to an already deployed contract. +func bindAbstractTokenTRC21(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(AbstractTokenTRC21ABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AbstractTokenTRC21 *AbstractTokenTRC21Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AbstractTokenTRC21.Contract.AbstractTokenTRC21Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AbstractTokenTRC21 *AbstractTokenTRC21Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbstractTokenTRC21.Contract.AbstractTokenTRC21Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AbstractTokenTRC21 *AbstractTokenTRC21Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AbstractTokenTRC21.Contract.AbstractTokenTRC21Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AbstractTokenTRC21 *AbstractTokenTRC21CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AbstractTokenTRC21.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AbstractTokenTRC21 *AbstractTokenTRC21TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AbstractTokenTRC21.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AbstractTokenTRC21 *AbstractTokenTRC21TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AbstractTokenTRC21.Contract.contract.Transact(opts, method, params...) +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_AbstractTokenTRC21 *AbstractTokenTRC21Caller) Issuer(opts *bind.CallOpts) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _AbstractTokenTRC21.contract.Call(opts, out, "issuer") + return *ret0, err +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_AbstractTokenTRC21 *AbstractTokenTRC21Session) Issuer() (common.Address, error) { + return _AbstractTokenTRC21.Contract.Issuer(&_AbstractTokenTRC21.CallOpts) +} + +// Issuer is a free data retrieval call binding the contract method 0x1d143848. +// +// Solidity: function issuer() constant returns(address) +func (_AbstractTokenTRC21 *AbstractTokenTRC21CallerSession) Issuer() (common.Address, error) { + return _AbstractTokenTRC21.Contract.Issuer(&_AbstractTokenTRC21.CallOpts) +} + +// TRC21IssuerABI is the input ABI used to generate the binding from. +const TRC21IssuerABI = "[{\"constant\":true,\"inputs\":[],\"name\":\"minCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenCapacity\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokens\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"apply\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"charge\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"issuer\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Apply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"supporter\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Charge\",\"type\":\"event\"}]" + +// TRC21IssuerBin is the compiled bytecode used for deploying new contracts. +const TRC21IssuerBin = `0x608060405234801561001057600080fd5b5060405160208061047d8339810160405251600055610449806100346000396000f30060806040526004361061006c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa615b081146100715780638f3a981c146100985780639d63848a146100b9578063c6b32f341461011e578063fc6bd76a14610134575b600080fd5b34801561007d57600080fd5b50610086610148565b60408051918252519081900360200190f35b3480156100a457600080fd5b50610086600160a060020a036004351661014e565b3480156100c557600080fd5b506100ce610169565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561010a5781810151838201526020016100f2565b505050509050019250505060405180910390f35b610132600160a060020a03600435166101cb565b005b610132600160a060020a036004351661035d565b60005490565b600160a060020a031660009081526002602052604090205490565b606060018054806020026020016040519081016040528092919081815260200182805480156101c157602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116101a3575b5050505050905090565b600081600160a060020a03811615156101e357600080fd5b6000543410156101f257600080fd5b82915033600160a060020a031682600160a060020a0316631d1438486040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561025657600080fd5b505af115801561026a573d6000803e3d6000fd5b505050506040513d602081101561028057600080fd5b5051600160a060020a03161461029557600080fd5b600180548082019091557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385169081179091556000908152600260205260409020546103039034610404565b600160a060020a0384166000818152600260209081526040918290209390935580513481529051919233927f2d485624158277d5113a56388c3abf5c20e3511dd112123ba376d16b21e4d7169281900390910190a3505050565b80600160a060020a038116151561037357600080fd5b60005434101561038257600080fd5b600160a060020a0382166000908152600260205260409020546103ab903463ffffffff61040416565b600160a060020a0383166000818152600260209081526040918290209390935580513481529051919233927f5cffac866325fd9b2a8ea8df2f110a0058313b279402d15ae28dd324a2282e069281900390910190a35050565b60008282018381101561041657600080fd5b93925050505600a165627a7a7230582017d25c61c6dd745630f85ec71140358aef38c084b91e940943bb4a15314b5e660029` + +// DeployTRC21Issuer deploys a new Ethereum contract, binding an instance of TRC21Issuer to it. +func DeployTRC21Issuer(auth *bind.TransactOpts, backend bind.ContractBackend, value *big.Int) (common.Address, *types.Transaction, *TRC21Issuer, error) { + parsed, err := abi.JSON(strings.NewReader(TRC21IssuerABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(TRC21IssuerBin), backend, value) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &TRC21Issuer{TRC21IssuerCaller: TRC21IssuerCaller{contract: contract}, TRC21IssuerTransactor: TRC21IssuerTransactor{contract: contract}, TRC21IssuerFilterer: TRC21IssuerFilterer{contract: contract}}, nil +} + +// TRC21Issuer is an auto generated Go binding around an Ethereum contract. +type TRC21Issuer struct { + TRC21IssuerCaller // Read-only binding to the contract + TRC21IssuerTransactor // Write-only binding to the contract + TRC21IssuerFilterer // Log filterer for contract events +} + +// TRC21IssuerCaller is an auto generated read-only Go binding around an Ethereum contract. +type TRC21IssuerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TRC21IssuerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type TRC21IssuerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TRC21IssuerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type TRC21IssuerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// TRC21IssuerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type TRC21IssuerSession struct { + Contract *TRC21Issuer // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TRC21IssuerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type TRC21IssuerCallerSession struct { + Contract *TRC21IssuerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// TRC21IssuerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type TRC21IssuerTransactorSession struct { + Contract *TRC21IssuerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// TRC21IssuerRaw is an auto generated low-level Go binding around an Ethereum contract. +type TRC21IssuerRaw struct { + Contract *TRC21Issuer // Generic contract binding to access the raw methods on +} + +// TRC21IssuerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type TRC21IssuerCallerRaw struct { + Contract *TRC21IssuerCaller // Generic read-only contract binding to access the raw methods on +} + +// TRC21IssuerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type TRC21IssuerTransactorRaw struct { + Contract *TRC21IssuerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewTRC21Issuer creates a new instance of TRC21Issuer, bound to a specific deployed contract. +func NewTRC21Issuer(address common.Address, backend bind.ContractBackend) (*TRC21Issuer, error) { + contract, err := bindTRC21Issuer(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &TRC21Issuer{TRC21IssuerCaller: TRC21IssuerCaller{contract: contract}, TRC21IssuerTransactor: TRC21IssuerTransactor{contract: contract}, TRC21IssuerFilterer: TRC21IssuerFilterer{contract: contract}}, nil +} + +// NewTRC21IssuerCaller creates a new read-only instance of TRC21Issuer, bound to a specific deployed contract. +func NewTRC21IssuerCaller(address common.Address, caller bind.ContractCaller) (*TRC21IssuerCaller, error) { + contract, err := bindTRC21Issuer(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &TRC21IssuerCaller{contract: contract}, nil +} + +// NewTRC21IssuerTransactor creates a new write-only instance of TRC21Issuer, bound to a specific deployed contract. +func NewTRC21IssuerTransactor(address common.Address, transactor bind.ContractTransactor) (*TRC21IssuerTransactor, error) { + contract, err := bindTRC21Issuer(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &TRC21IssuerTransactor{contract: contract}, nil +} + +// NewTRC21IssuerFilterer creates a new log filterer instance of TRC21Issuer, bound to a specific deployed contract. +func NewTRC21IssuerFilterer(address common.Address, filterer bind.ContractFilterer) (*TRC21IssuerFilterer, error) { + contract, err := bindTRC21Issuer(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &TRC21IssuerFilterer{contract: contract}, nil +} + +// bindTRC21Issuer binds a generic wrapper to an already deployed contract. +func bindTRC21Issuer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(TRC21IssuerABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TRC21Issuer *TRC21IssuerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TRC21Issuer.Contract.TRC21IssuerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TRC21Issuer *TRC21IssuerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TRC21Issuer.Contract.TRC21IssuerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TRC21Issuer *TRC21IssuerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TRC21Issuer.Contract.TRC21IssuerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_TRC21Issuer *TRC21IssuerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TRC21Issuer.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_TRC21Issuer *TRC21IssuerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TRC21Issuer.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_TRC21Issuer *TRC21IssuerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TRC21Issuer.Contract.contract.Transact(opts, method, params...) +} + +// GetTokenCapacity is a free data retrieval call binding the contract method 0x8f3a981c. +// +// Solidity: function getTokenCapacity(token address) constant returns(uint256) +func (_TRC21Issuer *TRC21IssuerCaller) GetTokenCapacity(opts *bind.CallOpts, token common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21Issuer.contract.Call(opts, out, "getTokenCapacity", token) + return *ret0, err +} + +// GetTokenCapacity is a free data retrieval call binding the contract method 0x8f3a981c. +// +// Solidity: function getTokenCapacity(token address) constant returns(uint256) +func (_TRC21Issuer *TRC21IssuerSession) GetTokenCapacity(token common.Address) (*big.Int, error) { + return _TRC21Issuer.Contract.GetTokenCapacity(&_TRC21Issuer.CallOpts, token) +} + +// GetTokenCapacity is a free data retrieval call binding the contract method 0x8f3a981c. +// +// Solidity: function getTokenCapacity(token address) constant returns(uint256) +func (_TRC21Issuer *TRC21IssuerCallerSession) GetTokenCapacity(token common.Address) (*big.Int, error) { + return _TRC21Issuer.Contract.GetTokenCapacity(&_TRC21Issuer.CallOpts, token) +} + +// MinCap is a free data retrieval call binding the contract method 0x3fa615b0. +// +// Solidity: function minCap() constant returns(uint256) +func (_TRC21Issuer *TRC21IssuerCaller) MinCap(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21Issuer.contract.Call(opts, out, "minCap") + return *ret0, err +} + +// MinCap is a free data retrieval call binding the contract method 0x3fa615b0. +// +// Solidity: function minCap() constant returns(uint256) +func (_TRC21Issuer *TRC21IssuerSession) MinCap() (*big.Int, error) { + return _TRC21Issuer.Contract.MinCap(&_TRC21Issuer.CallOpts) +} + +// MinCap is a free data retrieval call binding the contract method 0x3fa615b0. +// +// Solidity: function minCap() constant returns(uint256) +func (_TRC21Issuer *TRC21IssuerCallerSession) MinCap() (*big.Int, error) { + return _TRC21Issuer.Contract.MinCap(&_TRC21Issuer.CallOpts) +} + +// Tokens is a free data retrieval call binding the contract method 0x9d63848a. +// +// Solidity: function tokens() constant returns(address[]) +func (_TRC21Issuer *TRC21IssuerCaller) Tokens(opts *bind.CallOpts) ([]common.Address, error) { + var ( + ret0 = new([]common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _TRC21Issuer.contract.Call(opts, out, "tokens") + return *ret0, err +} + +// Tokens is a free data retrieval call binding the contract method 0x9d63848a. +// +// Solidity: function tokens() constant returns(address[]) +func (_TRC21Issuer *TRC21IssuerSession) Tokens() ([]common.Address, error) { + return _TRC21Issuer.Contract.Tokens(&_TRC21Issuer.CallOpts) +} + +// Tokens is a free data retrieval call binding the contract method 0x9d63848a. +// +// Solidity: function tokens() constant returns(address[]) +func (_TRC21Issuer *TRC21IssuerCallerSession) Tokens() ([]common.Address, error) { + return _TRC21Issuer.Contract.Tokens(&_TRC21Issuer.CallOpts) +} + +// Apply is a paid mutator transaction binding the contract method 0xc6b32f34. +// +// Solidity: function apply(token address) returns() +func (_TRC21Issuer *TRC21IssuerTransactor) Apply(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _TRC21Issuer.contract.Transact(opts, "apply", token) +} + +// Apply is a paid mutator transaction binding the contract method 0xc6b32f34. +// +// Solidity: function apply(token address) returns() +func (_TRC21Issuer *TRC21IssuerSession) Apply(token common.Address) (*types.Transaction, error) { + return _TRC21Issuer.Contract.Apply(&_TRC21Issuer.TransactOpts, token) +} + +// Apply is a paid mutator transaction binding the contract method 0xc6b32f34. +// +// Solidity: function apply(token address) returns() +func (_TRC21Issuer *TRC21IssuerTransactorSession) Apply(token common.Address) (*types.Transaction, error) { + return _TRC21Issuer.Contract.Apply(&_TRC21Issuer.TransactOpts, token) +} + +// Charge is a paid mutator transaction binding the contract method 0xfc6bd76a. +// +// Solidity: function charge(token address) returns() +func (_TRC21Issuer *TRC21IssuerTransactor) Charge(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _TRC21Issuer.contract.Transact(opts, "charge", token) +} + +// Charge is a paid mutator transaction binding the contract method 0xfc6bd76a. +// +// Solidity: function charge(token address) returns() +func (_TRC21Issuer *TRC21IssuerSession) Charge(token common.Address) (*types.Transaction, error) { + return _TRC21Issuer.Contract.Charge(&_TRC21Issuer.TransactOpts, token) +} + +// Charge is a paid mutator transaction binding the contract method 0xfc6bd76a. +// +// Solidity: function charge(token address) returns() +func (_TRC21Issuer *TRC21IssuerTransactorSession) Charge(token common.Address) (*types.Transaction, error) { + return _TRC21Issuer.Contract.Charge(&_TRC21Issuer.TransactOpts, token) +} + +// TRC21IssuerApplyIterator is returned from FilterApply and is used to iterate over the raw logs and unpacked data for Apply events raised by the TRC21Issuer contract. +type TRC21IssuerApplyIterator struct { + Event *TRC21IssuerApply // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TRC21IssuerApplyIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TRC21IssuerApply) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TRC21IssuerApply) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TRC21IssuerApplyIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TRC21IssuerApplyIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TRC21IssuerApply represents a Apply event raised by the TRC21Issuer contract. +type TRC21IssuerApply struct { + Issuer common.Address + Token common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApply is a free log retrieval operation binding the contract event 0x2d485624158277d5113a56388c3abf5c20e3511dd112123ba376d16b21e4d716. +// +// Solidity: event Apply(issuer indexed address, token indexed address, value uint256) +func (_TRC21Issuer *TRC21IssuerFilterer) FilterApply(opts *bind.FilterOpts, issuer []common.Address, token []common.Address) (*TRC21IssuerApplyIterator, error) { + + var issuerRule []interface{} + for _, issuerItem := range issuer { + issuerRule = append(issuerRule, issuerItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _TRC21Issuer.contract.FilterLogs(opts, "Apply", issuerRule, tokenRule) + if err != nil { + return nil, err + } + return &TRC21IssuerApplyIterator{contract: _TRC21Issuer.contract, event: "Apply", logs: logs, sub: sub}, nil +} + +// WatchApply is a free log subscription operation binding the contract event 0x2d485624158277d5113a56388c3abf5c20e3511dd112123ba376d16b21e4d716. +// +// Solidity: event Apply(issuer indexed address, token indexed address, value uint256) +func (_TRC21Issuer *TRC21IssuerFilterer) WatchApply(opts *bind.WatchOpts, sink chan<- *TRC21IssuerApply, issuer []common.Address, token []common.Address) (event.Subscription, error) { + + var issuerRule []interface{} + for _, issuerItem := range issuer { + issuerRule = append(issuerRule, issuerItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _TRC21Issuer.contract.WatchLogs(opts, "Apply", issuerRule, tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TRC21IssuerApply) + if err := _TRC21Issuer.contract.UnpackLog(event, "Apply", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// TRC21IssuerChargeIterator is returned from FilterCharge and is used to iterate over the raw logs and unpacked data for Charge events raised by the TRC21Issuer contract. +type TRC21IssuerChargeIterator struct { + Event *TRC21IssuerCharge // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *TRC21IssuerChargeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(TRC21IssuerCharge) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(TRC21IssuerCharge) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *TRC21IssuerChargeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *TRC21IssuerChargeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// TRC21IssuerCharge represents a Charge event raised by the TRC21Issuer contract. +type TRC21IssuerCharge struct { + Supporter common.Address + Token common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCharge is a free log retrieval operation binding the contract event 0x5cffac866325fd9b2a8ea8df2f110a0058313b279402d15ae28dd324a2282e06. +// +// Solidity: event Charge(supporter indexed address, token indexed address, value uint256) +func (_TRC21Issuer *TRC21IssuerFilterer) FilterCharge(opts *bind.FilterOpts, supporter []common.Address, token []common.Address) (*TRC21IssuerChargeIterator, error) { + + var supporterRule []interface{} + for _, supporterItem := range supporter { + supporterRule = append(supporterRule, supporterItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _TRC21Issuer.contract.FilterLogs(opts, "Charge", supporterRule, tokenRule) + if err != nil { + return nil, err + } + return &TRC21IssuerChargeIterator{contract: _TRC21Issuer.contract, event: "Charge", logs: logs, sub: sub}, nil +} + +// WatchCharge is a free log subscription operation binding the contract event 0x5cffac866325fd9b2a8ea8df2f110a0058313b279402d15ae28dd324a2282e06. +// +// Solidity: event Charge(supporter indexed address, token indexed address, value uint256) +func (_TRC21Issuer *TRC21IssuerFilterer) WatchCharge(opts *bind.WatchOpts, sink chan<- *TRC21IssuerCharge, supporter []common.Address, token []common.Address) (event.Subscription, error) { + + var supporterRule []interface{} + for _, supporterItem := range supporter { + supporterRule = append(supporterRule, supporterItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _TRC21Issuer.contract.WatchLogs(opts, "Charge", supporterRule, tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(TRC21IssuerCharge) + if err := _TRC21Issuer.contract.UnpackLog(event, "Charge", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} diff --git a/contracts/trc21issuer/trc21.go b/contracts/trc21issuer/trc21.go new file mode 100644 index 0000000000..2004de9801 --- /dev/null +++ b/contracts/trc21issuer/trc21.go @@ -0,0 +1,41 @@ +package trc21issuer + +import ( + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/trc21issuer/contract" + "math/big" +) + +type MyTRC21 struct { + *contract.MyTRC21Session + contractBackend bind.ContractBackend +} + +func NewTRC21(transactOpts *bind.TransactOpts, contractAddr common.Address, contractBackend bind.ContractBackend) (*MyTRC21, error) { + smartContract, err := contract.NewMyTRC21(contractAddr, contractBackend) + if err != nil { + return nil, err + } + + return &MyTRC21{ + &contract.MyTRC21Session{ + Contract: smartContract, + TransactOpts: *transactOpts, + }, + contractBackend, + }, nil +} + +func DeployTRC21(transactOpts *bind.TransactOpts, contractBackend bind.ContractBackend, name string, symbol string, decimals uint8, cap, fee *big.Int) (common.Address, *MyTRC21, error) { + contractAddr, _, _, err := contract.DeployMyTRC21(transactOpts, contractBackend, name, symbol, decimals, cap, fee) + if err != nil { + return contractAddr, nil, err + } + smartContract, err := NewTRC21(transactOpts, contractAddr, contractBackend) + if err != nil { + return contractAddr, nil, err + } + + return contractAddr, smartContract, nil +} diff --git a/contracts/trc21issuer/trc21issuer.go b/contracts/trc21issuer/trc21issuer.go new file mode 100644 index 0000000000..0d5d5b6dfe --- /dev/null +++ b/contracts/trc21issuer/trc21issuer.go @@ -0,0 +1,41 @@ +package trc21issuer + +import ( + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/trc21issuer/contract" + "math/big" +) + +type TRC21Issuer struct { + *contract.TRC21IssuerSession + contractBackend bind.ContractBackend +} + +func NewTRC21Issuer(transactOpts *bind.TransactOpts, contractAddr common.Address, contractBackend bind.ContractBackend) (*TRC21Issuer, error) { + contractObject, err := contract.NewTRC21Issuer(contractAddr, contractBackend) + if err != nil { + return nil, err + } + + return &TRC21Issuer{ + &contract.TRC21IssuerSession{ + Contract: contractObject, + TransactOpts: *transactOpts, + }, + contractBackend, + }, nil +} + +func DeployTRC21Issuer(transactOpts *bind.TransactOpts, contractBackend bind.ContractBackend, minApply *big.Int) (common.Address, *TRC21Issuer, error) { + contractAddr, _, _, err := contract.DeployTRC21Issuer(transactOpts, contractBackend, minApply) + if err != nil { + return contractAddr, nil, err + } + contractObject, err := NewTRC21Issuer(transactOpts, contractAddr, contractBackend) + if err != nil { + return contractAddr, nil, err + } + + return contractAddr, contractObject, nil +} diff --git a/contracts/utils.go b/contracts/utils.go index 23c5bcd212..ee0183ee61 100644 --- a/contracts/utils.go +++ b/contracts/utils.go @@ -21,7 +21,7 @@ import ( "crypto/cipher" cryptoRand "crypto/rand" "encoding/base64" - "fmt" + "errors" "io" "math/big" "math/rand" @@ -30,9 +30,9 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/consensus/XDPoS/utils" + "github.com/ethereum/go-ethereum/contracts/blocksigner/contract" randomizeContract "github.com/ethereum/go-ethereum/contracts/randomize/contract" + "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" ) @@ -42,6 +42,7 @@ const ( extraSeal = 65 // Fixed number of extra-data suffix bytes reserved for signer seal ) +// RewardLog represents the reward info for logging type RewardLog struct { Sign uint64 `json:"sign"` Reward *big.Int `json:"reward"` @@ -81,7 +82,7 @@ func BuildTxSecretRandomize(nonce uint64, randomizeAddr common.Address, epocNumb return tx, nil } -// Send opening to randomize SMC. +// Send opening key into randomize smartcontract. func BuildTxOpeningRandomize(nonce uint64, randomizeAddr common.Address, randomizeKey []byte) (*types.Transaction, error) { data := common.Hex2Bytes(common.HexSetOpening) inputData := append(data, randomizeKey...) @@ -90,175 +91,7 @@ func BuildTxOpeningRandomize(nonce uint64, randomizeAddr common.Address, randomi return tx, nil } -// Get random from randomize contract. -func GetRandomizeFromContract(client bind.ContractBackend, addrMasternode common.Address) (int64, error) { - randomize, err := randomizeContract.NewXDCRandomize(common.RandomizeSMCBinary, client) - if err != nil { - log.Error("Fail to get instance of randomize", "error", err) - } - opts := new(bind.CallOpts) - secrets, err := randomize.GetSecret(opts, addrMasternode) - if err != nil { - log.Error("Fail get secrets from randomize", "error", err) - } - opening, err := randomize.GetOpening(opts, addrMasternode) - if err != nil { - log.Error("Fail get opening from randomize", "error", err) - } - - return DecryptRandomizeFromSecretsAndOpening(secrets, opening) -} - -// Generate m2 listing from randomize array. -func GenM2FromRandomize(randomizes []int64, lenSigners int64) ([]int64, error) { - blockValidator := NewSlice(int64(0), lenSigners, 1) - randIndexs := make([]int64, lenSigners) - total := int64(0) - var temp int64 = 0 - for _, j := range randomizes { - total += j - } - rand.Seed(total) - for i := len(blockValidator) - 1; i >= 0; i-- { - blockLength := len(blockValidator) - 1 - if blockLength <= 1 { - blockLength = 1 - } - randomIndex := int64(rand.Intn(blockLength)) - temp = blockValidator[randomIndex] - blockValidator[randomIndex] = blockValidator[i] - blockValidator[i] = temp - blockValidator = append(blockValidator[:i], blockValidator[i+1:]...) - randIndexs[i] = temp - } - - return randIndexs, nil -} - -// Get validators from m2 array integer. -func BuildValidatorFromM2(listM2 []int64) []byte { - var validatorBytes []byte - for _, numberM2 := range listM2 { - // Convert number to byte. - m2Byte := common.LeftPadBytes([]byte(fmt.Sprintf("%d", numberM2)), utils.M2ByteLength) - validatorBytes = append(validatorBytes, m2Byte...) - } - - return validatorBytes -} - -// Decode validator hex string. -func DecodeValidatorsHexData(validatorsStr string) ([]int64, error) { - validatorsByte, err := hexutil.Decode(validatorsStr) - if err != nil { - return nil, err - } - - return utils.ExtractValidatorsFromBytes(validatorsByte), nil -} - -// Decrypt randomize from secrets and opening. -func DecryptRandomizeFromSecretsAndOpening(secrets [][32]byte, opening [32]byte) (int64, error) { - var random int64 - if len(secrets) > 0 { - for _, secret := range secrets { - trimSecret := bytes.TrimLeft(secret[:], "\x00") - decryptSecret := Decrypt(opening[:], string(trimSecret)) - if isInt(decryptSecret) { - intNumber, err := strconv.Atoi(decryptSecret) - if err != nil { - log.Error("Can not convert string to integer", "error", err) - return -1, err - } - random = int64(intNumber) - } - } - } - - return random, nil -} - -// Dynamic generate array sequence of numbers. -func NewSlice(start int64, end int64, step int64) []int64 { - s := make([]int64, end-start) - for i := range s { - s[i] = start - start += step - } - - return s -} - -// Shuffle array. -func Shuffle(slice []int64) []int64 { - newSlice := make([]int64, len(slice)) - copy(newSlice, slice) - - for i := 0; i < len(slice)-1; i++ { - rand.Seed(time.Now().UnixNano()) - randIndex := rand.Intn(len(newSlice)) - x := newSlice[i] - newSlice[i] = newSlice[randIndex] - newSlice[randIndex] = x - } - - return newSlice -} - -// encrypt string to base64 crypto using AES -func Encrypt(key []byte, text string) string { - plaintext := []byte(text) - - block, err := aes.NewCipher(key) - if err != nil { - log.Error("Fail to encrypt", "err", err) - return "" - } - - // The IV needs to be unique, but not secure. Therefore it's common to - // include it at the beginning of the ciphertext. - ciphertext := make([]byte, aes.BlockSize+len(plaintext)) - iv := ciphertext[:aes.BlockSize] - if _, err := io.ReadFull(cryptoRand.Reader, iv); err != nil { - log.Error("Fail to encrypt iv", "err", err) - return "" - } - - stream := cipher.NewCFBEncrypter(block, iv) - stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext) - - // convert to base64 - return base64.URLEncoding.EncodeToString(ciphertext) -} - -// decrypt from base64 to decrypted string -func Decrypt(key []byte, cryptoText string) string { - ciphertext, _ := base64.URLEncoding.DecodeString(cryptoText) - - block, err := aes.NewCipher(key) - if err != nil { - log.Error("Fail to decrypt", "err", err) - return "" - } - - // The IV needs to be unique, but not secure. Therefore it's common to - // include it at the beginning of the ciphertext. - if len(ciphertext) < aes.BlockSize { - log.Error("ciphertext too short") - return "" - } - iv := ciphertext[:aes.BlockSize] - ciphertext = ciphertext[aes.BlockSize:] - - stream := cipher.NewCFBDecrypter(block, iv) - - // XORKeyStream can work in-place if the two arguments are the same. - stream.XORKeyStream(ciphertext, ciphertext) - - return string(ciphertext[:]) -} - -// Generate random string. +// RandStringByte generates a random string of specified length func RandStringByte(n int) []byte { letterBytes := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789" b := make([]byte, n) @@ -269,11 +102,223 @@ func RandStringByte(n int) []byte { return b } -// Helper function check string is numeric. -func isInt(strNumber string) bool { - if _, err := strconv.Atoi(strNumber); err == nil { - return true - } else { +// Encrypt encrypts the plaintext using AES +func Encrypt(key []byte, text string) string { + plaintext := []byte(text) + + block, err := aes.NewCipher(key) + if err != nil { + log.Error("Fail to encrypt", "error", err) + return "" + } + + ciphertext := make([]byte, aes.BlockSize+len(plaintext)) + iv := ciphertext[:aes.BlockSize] + if _, err := io.ReadFull(cryptoRand.Reader, iv); err != nil { + log.Error("Fail to encrypt iv", "error", err) + return "" + } + + stream := cipher.NewCFBEncrypter(block, iv) + stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext) + + return base64.URLEncoding.EncodeToString(ciphertext) +} + +// Decrypt decrypts ciphertext using AES +func Decrypt(key []byte, cryptoText string) string { + ciphertext, _ := base64.URLEncoding.DecodeString(cryptoText) + + block, err := aes.NewCipher(key) + if err != nil { + log.Error("Fail to decrypt", "error", err) + return "" + } + + if len(ciphertext) < aes.BlockSize { + log.Error("Ciphertext too short") + return "" + } + iv := ciphertext[:aes.BlockSize] + ciphertext = ciphertext[aes.BlockSize:] + + stream := cipher.NewCFBDecrypter(block, iv) + stream.XORKeyStream(ciphertext, ciphertext) + + return string(ciphertext) +} + +// GetSignersFromContract returns the list of signers from the block signer contract +func GetSignersFromContract(statedb *state.StateDB, block *types.Block) ([]common.Address, error) { + return state.GetSigners(statedb, block), nil +} + +// GetRandomizeFromContract returns random number from contract +func GetRandomizeFromContract(client bind.ContractBackend, addr common.Address) (int64, error) { + randomize, err := randomizeContract.NewXDCRandomize(common.RandomizeSMCBinary, client) + if err != nil { + return 0, err + } + opts := new(bind.CallOpts) + secrets, err := randomize.GetSecret(opts, addr) + if err != nil { + return 0, err + } + // Since there could be multiple secrets (array), we just use first one + if len(secrets) == 0 { + return 0, errors.New("no secrets found") + } + // Decrypt the secret to get the random number + opening, err := randomize.GetOpening(opts, addr) + if err != nil { + return 0, err + } + if len(opening) == 0 { + return 0, errors.New("no opening found") + } + + // Decrypt secret with opening key + decrypted := Decrypt(opening[:], string(secrets[0][:])) + result, err := strconv.ParseInt(decrypted, 10, 64) + if err != nil { + // If can't parse, return a pseudo-random based on address + return int64(addr.Big().Int64() % 100), nil + } + return result, nil +} + +// GenM2FromRandomize generates M2 validator list from random numbers +func GenM2FromRandomize(candidates []int64, lenSigners int64) ([]int64, error) { + if len(candidates) == 0 { + return nil, errors.New("empty candidates") + } + + // Create a copy of candidates for shuffling + m2 := make([]int64, len(candidates)) + copy(m2, candidates) + + // Fisher-Yates shuffle using candidates as seeds + for i := len(m2) - 1; i > 0; i-- { + seed := candidates[i%len(candidates)] + j := int(seed) % (i + 1) + if j < 0 { + j = -j + } + m2[i], m2[j] = m2[j], m2[i] + } + + return m2, nil +} + +// BuildValidatorFromM2 builds validator bytes from M2 list +func BuildValidatorFromM2(m2 []int64) []byte { + var validators []byte + for _, v := range m2 { + validators = append(validators, byte(v)) + } + return validators +} + +// GetBlockSigners returns signers who signed a specific block +func GetBlockSigners(client bind.ContractBackend, blockHash common.Hash) ([]common.Address, error) { + blockSigners, err := contract.NewBlockSigner(common.BlockSignersBinary, client) + if err != nil { + return nil, err + } + opts := &bind.CallOpts{} + addrs, err := blockSigners.GetSigners(opts, blockHash) + if err != nil { + return nil, err + } + return addrs, nil +} + +// ExtractAddressFromBytes extracts addresses from a byte slice +func ExtractAddressFromBytes(penaltiesBytes []byte) []common.Address { + var addresses []common.Address + if len(penaltiesBytes) == 0 { + return addresses + } + // Each address is 20 bytes + addressLen := common.AddressLength + for i := 0; i+addressLen <= len(penaltiesBytes); i += addressLen { + addresses = append(addresses, common.BytesToAddress(penaltiesBytes[i:i+addressLen])) + } + return addresses +} + +// CalculateRewardForSigner calculates rewards for signers +func CalculateRewardForSigner(chainReward *big.Int, signers map[common.Address]*RewardLog, totalSigner uint64) (map[common.Address]*big.Int, error) { + rewardSigners := make(map[common.Address]*big.Int) + + if totalSigner == 0 { + return rewardSigners, nil + } + + rewardPerSign := new(big.Int).Div(chainReward, big.NewInt(int64(totalSigner))) + + for addr, rLog := range signers { + reward := new(big.Int).Mul(rewardPerSign, big.NewInt(int64(rLog.Sign))) + rewardSigners[addr] = reward + } + + return rewardSigners, nil +} + +// CalculateRewardForHolders calculates rewards for token holders +func CalculateRewardForHolders(foundationWalletAddr common.Address, statedb *state.StateDB, signer common.Address, calcReward *big.Int, blockNumber uint64) (map[common.Address]*big.Int, error) { + rewards := make(map[common.Address]*big.Int) + + // Simple distribution: foundation gets foundation percent, signer gets rest + foundationReward := new(big.Int).Mul(calcReward, big.NewInt(int64(common.RewardFoundationPercent))) + foundationReward.Div(foundationReward, big.NewInt(100)) + + signerReward := new(big.Int).Sub(calcReward, foundationReward) + + if foundationWalletAddr != (common.Address{}) { + rewards[foundationWalletAddr] = foundationReward + } + rewards[signer] = signerReward + + return rewards, nil +} + +// DecodeExtraFields decodes extra data fields from header +func DecodeExtraFields(extra []byte) (common.Address, []byte, error) { + if len(extra) < extraVanity { + return common.Address{}, nil, errors.New("extra-data too short") + } + + // Extract vanity + vanity := extra[:extraVanity] + + // Extract signer + if len(extra) < extraVanity+extraSeal { + return common.Address{}, vanity, errors.New("missing signature") + } + + signature := extra[len(extra)-extraSeal:] + _ = signature // Would be used to recover signer + + return common.Address{}, vanity, nil +} + +// CompareSignersLists compares two lists of signers +func CompareSignersLists(list1, list2 []common.Address) bool { + if len(list1) != len(list2) { return false } + + for i := range list1 { + if list1[i] != list2[i] { + return false + } + } + + return true +} + +// BytesEqual compares two byte slices +func BytesEqual(a, b []byte) bool { + return bytes.Equal(a, b) } diff --git a/contracts/utils_test.go b/contracts/utils_test.go new file mode 100644 index 0000000000..89f7c0c75d --- /dev/null +++ b/contracts/utils_test.go @@ -0,0 +1,212 @@ +// Copyright (c) 2018 XDPoSChain +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +package contracts + +import ( + "bytes" + "context" + "crypto/ecdsa" + "math/big" + "math/rand" + "testing" + "time" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus/XDPoS/utils" + "github.com/ethereum/go-ethereum/contracts/blocksigner" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" +) + +var ( + acc1Key, _ = crypto.HexToECDSA("8a1f9a8f95be41cd7ccb6168179afb4504aefe388d1e14474d32c45c72ce7b7a") + acc2Key, _ = crypto.HexToECDSA("49a7b37aa6f6645917e7b807e9d1c00d4fa71f18343b0d4122a4d2df64dd6fee") + acc3Key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + acc4Key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee04aefe388d1e14474d32c45c72ce7b7a") + acc1Addr = crypto.PubkeyToAddress(acc1Key.PublicKey) + acc2Addr = crypto.PubkeyToAddress(acc2Key.PublicKey) + acc3Addr = crypto.PubkeyToAddress(acc3Key.PublicKey) + acc4Addr = crypto.PubkeyToAddress(acc4Key.PublicKey) +) + +func getCommonBackend() *backends.SimulatedBackend { + genesis := types.GenesisAlloc{acc1Addr: {Balance: big.NewInt(1000000000000)}} + backend := backends.NewXDCSimulatedBackend(genesis, 10000000, params.TestXDPoSMockChainConfig) + backend.Commit() + + return backend +} + +func TestSendTxSign(t *testing.T) { + accounts := []common.Address{acc2Addr, acc3Addr, acc4Addr} + keys := []*ecdsa.PrivateKey{acc2Key, acc3Key, acc4Key} + backend := getCommonBackend() + signer := types.HomesteadSigner{} + ctx := context.Background() + + transactOpts := bind.NewKeyedTransactor(acc1Key) + blockSignerAddr, blockSigner, err := blocksigner.DeployBlockSigner(transactOpts, backend, big.NewInt(99)) + if err != nil { + t.Fatalf("Can't get block signer: %v", err) + } + backend.Commit() + + nonces := make(map[*ecdsa.PrivateKey]int) + oldBlocks := make(map[common.Hash]common.Address) + + signTx := func(ctx context.Context, backend *backends.SimulatedBackend, signer types.HomesteadSigner, nonces map[*ecdsa.PrivateKey]int, accKey *ecdsa.PrivateKey, blockNumber *big.Int, blockHash common.Hash) *types.Transaction { + tx, _ := types.SignTx(CreateTxSign(blockNumber, blockHash, uint64(nonces[accKey]), blockSignerAddr), signer, accKey) + backend.SendTransaction(ctx, tx) + backend.Commit() + nonces[accKey]++ + + return tx + } + + // Tx sign for signer. + signCount := int64(0) + blockHashes := make([]common.Hash, 10) + for i := int64(0); i < 10; i++ { + blockHash := randomHash() + blockHashes[i] = blockHash + randIndex := rand.Intn(len(keys)) + accKey := keys[randIndex] + signTx(ctx, backend, signer, nonces, accKey, new(big.Int).SetInt64(i), blockHash) + oldBlocks[blockHash] = accounts[randIndex] + signCount++ + + // Tx sign for validators. + for _, key := range keys { + if key != accKey { + signTx(ctx, backend, signer, nonces, key, new(big.Int).SetInt64(i), blockHash) + signCount++ + } + } + } + + for _, blockHash := range blockHashes { + signers, err := blockSigner.GetSigners(blockHash) + if err != nil { + t.Fatalf("Can't get signers: %v", err) + } + + if signers[0] != oldBlocks[blockHash] { + t.Errorf("Tx sign for block signer not match %v - %v", signers[0].String(), oldBlocks[blockHash].String()) + } + + if len(signers) != len(keys) { + t.Error("Tx sign for block validators not match") + } + } +} + +// Generate random string. +func randomHash() common.Hash { + letterBytes := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789" + var b common.Hash + for i := range b { + rand.Seed(time.Now().UnixNano()) + b[i] = letterBytes[rand.Intn(len(letterBytes))] + } + return b +} + +// Unit test for get random position of masternodes. +func TestRandomMasterNode(t *testing.T) { + oldSlice := NewSlice(0, 10, 1) + newSlice := Shuffle(oldSlice) + for _, newNumber := range newSlice { + for i, oldNumber := range oldSlice { + if oldNumber == newNumber { + // Delete find element. + oldSlice = append(oldSlice[:i], oldSlice[i+1:]...) + } + } + } + if len(oldSlice) != 0 { + t.Errorf("Test generate random masternode fail %v - %v", oldSlice, newSlice) + } +} + +func TestEncryptDecrypt(t *testing.T) { + //byteInteger := common.LeftPadBytes([]byte(new(big.Int).SetInt64(4).String()), 32) + randomByte := RandStringByte(32) + encrypt := Encrypt(randomByte, new(big.Int).SetInt64(4).String()) + decrypt := Decrypt(randomByte, encrypt) + t.Log("Encrypt", encrypt, "Test", string(randomByte), "Decrypt", decrypt, "trim", string(bytes.TrimLeft([]byte(decrypt), "\x00"))) +} + +func isArrayEqual(a [][]int64, b [][]int64) bool { + if len(a) != len(b) { + return false + } + for i, vs := range a { + for j, v := range vs { + if v != b[i][j] { + return false + } + } + } + return true +} + +// Unit test for +func TestGenM2FromRandomize(t *testing.T) { + var a []int64 + for i := 0; i <= 10; i++ { + rand.Seed(time.Now().UTC().UnixNano()) + a = append(a, int64(rand.Intn(9999))) + } + b, err := GenM2FromRandomize(a, common.MaxMasternodes) + t.Log("randomize", b, "len", len(b)) + if err != nil { + t.Error("Fail to test gen m2 for randomize.", err) + } + // Test Permutation Without Fixed-point. + M1List := NewSlice(int64(0), common.MaxMasternodes, 1) + for i, m1 := range M1List { + if m1 == b[i] { + t.Errorf("Error check Permutation Without Fixed-point %v - %v - %v", i, b[i], a) + } + } +} + +// Unit test for validator m2. +func TestBuildValidatorFromM2(t *testing.T) { + a := []int64{84, 58, 27, 96, 127, 60, 136, 20, 121, 31, 87, 85, 40, 120, 149, 109, 141, 145, 11, 110, 147, 35, 76, 46, 34, 108, 72, 103, 102, 12, 23, 47, 70, 86, 125, 112, 128, 13, 130, 98, 126, 62, 132, 111, 134, 6, 106, 67, 24, 91, 101, 50, 94, 43, 77, 73, 129, 71, 51, 10, 92, 29, 80, 95, 33, 100, 124, 75, 38, 133, 79, 83, 61, 36, 122, 99, 16, 28, 18, 116, 140, 97, 119, 82, 148, 48, 56, 32, 93, 107, 69, 68, 123, 81, 22, 137, 25, 115, 44, 8, 42, 131, 143, 17, 55, 89, 9, 15, 19, 59, 146, 54, 5, 30, 41, 144, 117, 1, 104, 49, 105, 45, 88, 78, 74, 135, 0, 21, 57, 3, 66, 52, 63, 138, 4, 114, 37, 118, 14, 2, 26, 7, 65, 139, 39, 64, 90, 142, 53, 113} + b := BuildValidatorFromM2(a) + c := utils.ExtractValidatorsFromBytes(b) + if !isArrayEqual([][]int64{a}, [][]int64{c}) { + t.Errorf("Fail to get m2 result %v", b) + } +} + +// Unit test for decode validator string data. +func TestDecodeValidatorsHexData(t *testing.T) { + a := "0x000000310000003000000032000000310000003000000032000000310000003000000032000000310000003000000031000000320000003000000031000000320000003000000031000000320000003000000030000000310000003200000030000000310000003200000030000000310000003200000030000000300000003100000032000000300000003100000032000000300000003100000032000000300000003200000030000000310000003200000030000000310000003200000030000000310000003000000030" + b, err := DecodeValidatorsHexData(a) + if err != nil { + t.Error("Fail to decode validator from hex string", err) + } + c := []int64{1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 2, 0, 1, 2, 0, 1, 2, 0, 1, 0, 0} + if !isArrayEqual([][]int64{b}, [][]int64{c}) { + t.Errorf("Fail to get m2 result %v", b) + } + t.Log("b", b) +} diff --git a/contracts/validator/contract/validator.go b/contracts/validator/contract/validator.go new file mode 100644 index 0000000000..ff1a6db421 --- /dev/null +++ b/contracts/validator/contract/validator.go @@ -0,0 +1,2050 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contract + +import ( + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// SafeMathABI is the input ABI used to generate the binding from. +const SafeMathABI = "[]" + +// SafeMathBin is the compiled bytecode used for deploying new contracts. +const SafeMathBin = `0x604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146060604052600080fd00a165627a7a72305820b9407d48ebc7efee5c9f08b3b3a957df2939281f5913225e8c1291f069b900490029` + +// DeploySafeMath deploys a new Ethereum contract, binding an instance of SafeMath to it. +func DeploySafeMath(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SafeMath, error) { + parsed, err := abi.JSON(strings.NewReader(SafeMathABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(SafeMathBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SafeMath{SafeMathCaller: SafeMathCaller{contract: contract}, SafeMathTransactor: SafeMathTransactor{contract: contract}, SafeMathFilterer: SafeMathFilterer{contract: contract}}, nil +} + +// SafeMath is an auto generated Go binding around an Ethereum contract. +type SafeMath struct { + SafeMathCaller // Read-only binding to the contract + SafeMathTransactor // Write-only binding to the contract + SafeMathFilterer // Log filterer for contract events +} + +// SafeMathCaller is an auto generated read-only Go binding around an Ethereum contract. +type SafeMathCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeMathTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SafeMathTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeMathFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SafeMathFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SafeMathSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SafeMathSession struct { + Contract *SafeMath // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SafeMathCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SafeMathCallerSession struct { + Contract *SafeMathCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SafeMathTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SafeMathTransactorSession struct { + Contract *SafeMathTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SafeMathRaw is an auto generated low-level Go binding around an Ethereum contract. +type SafeMathRaw struct { + Contract *SafeMath // Generic contract binding to access the raw methods on +} + +// SafeMathCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SafeMathCallerRaw struct { + Contract *SafeMathCaller // Generic read-only contract binding to access the raw methods on +} + +// SafeMathTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SafeMathTransactorRaw struct { + Contract *SafeMathTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSafeMath creates a new instance of SafeMath, bound to a specific deployed contract. +func NewSafeMath(address common.Address, backend bind.ContractBackend) (*SafeMath, error) { + contract, err := bindSafeMath(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &SafeMath{SafeMathCaller: SafeMathCaller{contract: contract}, SafeMathTransactor: SafeMathTransactor{contract: contract}, SafeMathFilterer: SafeMathFilterer{contract: contract}}, nil +} + +// NewSafeMathCaller creates a new read-only instance of SafeMath, bound to a specific deployed contract. +func NewSafeMathCaller(address common.Address, caller bind.ContractCaller) (*SafeMathCaller, error) { + contract, err := bindSafeMath(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SafeMathCaller{contract: contract}, nil +} + +// NewSafeMathTransactor creates a new write-only instance of SafeMath, bound to a specific deployed contract. +func NewSafeMathTransactor(address common.Address, transactor bind.ContractTransactor) (*SafeMathTransactor, error) { + contract, err := bindSafeMath(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SafeMathTransactor{contract: contract}, nil +} + +// NewSafeMathFilterer creates a new log filterer instance of SafeMath, bound to a specific deployed contract. +func NewSafeMathFilterer(address common.Address, filterer bind.ContractFilterer) (*SafeMathFilterer, error) { + contract, err := bindSafeMath(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SafeMathFilterer{contract: contract}, nil +} + +// bindSafeMath binds a generic wrapper to an already deployed contract. +func bindSafeMath(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(SafeMathABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SafeMath *SafeMathRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SafeMath.Contract.SafeMathCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SafeMath *SafeMathRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SafeMath.Contract.SafeMathTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SafeMath *SafeMathRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SafeMath.Contract.SafeMathTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SafeMath *SafeMathCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SafeMath.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SafeMath *SafeMathTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SafeMath.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SafeMath *SafeMathTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SafeMath.Contract.contract.Transact(opts, method, params...) +} + +// XDCValidatorABI is the input ABI used to generate the binding from. +const XDCValidatorABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"propose\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"owners\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"},{\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"unvote\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getCandidates\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ownerCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasVotedInvalid\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"getWithdrawCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"ownerToCandidate\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getVoters\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getWithdrawBlockNumbers\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"},{\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"getVoterCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getLatestKYC\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"candidates\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getCandidateCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_invalidCandidate\",\"type\":\"address\"}],\"name\":\"invalidPercent\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"KYCString\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"vote\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"invalidKYCCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"candidateCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"voterWithdrawDelay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"resign\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getCandidateOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getHashCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maxValidatorNumber\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"candidateWithdrawDelay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"isCandidate\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minCandidateCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOwnerCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_invalidCandidate\",\"type\":\"address\"}],\"name\":\"voteInvalidKYC\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"kychash\",\"type\":\"string\"}],\"name\":\"uploadKYC\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minVoterCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_candidates\",\"type\":\"address[]\"},{\"name\":\"_caps\",\"type\":\"uint256[]\"},{\"name\":\"_firstOwner\",\"type\":\"address\"},{\"name\":\"_minCandidateCap\",\"type\":\"uint256\"},{\"name\":\"_minVoterCap\",\"type\":\"uint256\"},{\"name\":\"_maxValidatorNumber\",\"type\":\"uint256\"},{\"name\":\"_candidateWithdrawDelay\",\"type\":\"uint256\"},{\"name\":\"_voterWithdrawDelay\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Vote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_voter\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Unvote\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Propose\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"Resign\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"kycHash\",\"type\":\"string\"}],\"name\":\"UploadedKYC\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_masternodeOwner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_masternodes\",\"type\":\"address[]\"}],\"name\":\"InvalidatedNode\",\"type\":\"event\"}]" + +// XDCValidatorBin is the compiled bytecode used for deploying new contracts. +const XDCValidatorBin = `606060405260006009556000600a5534156200001a57600080fd5b60405162003dcc38038062003dcc83398101604052808051820191906020018051820191906020018051906020019091908051906020019091908051906020019091908051906020019091908051906020019091908051906020019091905050600085600b8190555084600c8190555083600d8190555082600e8190555081600f81905550885160098190555060078054806001018281620000bd9190620004f1565b9160005260206000209001600089909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600a60008154809291906001019190505550600090505b8851811015620004e25760088054806001018281620001439190620004f1565b916000526020600020900160008b848151811015156200015f57fe5b90602001906020020151909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506060604051908101604052808873ffffffffffffffffffffffffffffffffffffffff1681526020016001151581526020018983815181101515620001ea57fe5b90602001906020020151815250600160008b848151811015156200020a57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555060408201518160010155905050600260008a83815181101515620002d557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060010182816200032d9190620004f1565b9160005260206000209001600089909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806001018281620003cf9190620004f1565b916000526020600020900160008b84815181101515620003eb57fe5b90602001906020020151909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600b54600160008b848151811015156200044c57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808060010191505062000123565b50505050505050505062000548565b8154818355818115116200051b578183600052602060002091820191016200051a919062000520565b5b505050565b6200054591905b808211156200054157600081600090555060010162000527565b5090565b90565b61387480620005586000396000f300606060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063012679511461019b578063025e7c27146101c957806302aa9be21461022c57806306a49fce1461026e5780630db02622146102d85780630e3e4fb81461030157806315febd68146103715780632a3640b1146103a85780632d15cc041461042a5780632f9c4bba146104b8578063302b687214610522578063326586521461058e5780633477ee2e14610640578063441a3e70146106a357806358e7525f146106cf5780635b860d271461071c5780635b9cd8cc146107695780636dd7d8ea1461082457806372e44a3814610852578063a9a981a31461089f578063a9ff959e146108c8578063ae6e43f5146108f1578063b642facd1461092a578063c45607df146109a3578063d09f1ab4146109f0578063d161c76714610a19578063d51b9e9314610a42578063d55b7dff14610a93578063ef18374a14610abc578063f2ee3c7d14610ae5578063f5c9512514610b1e578063f8ac9dd514610b4c575b600080fd5b6101c7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b75565b005b34156101d457600080fd5b6101ea60048080359060200190919050506111fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561023757600080fd5b61026c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061123b565b005b341561027957600080fd5b610281611796565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156102c45780820151818401526020810190506102a9565b505050509050019250505060405180910390f35b34156102e357600080fd5b6102eb61182a565b6040518082815260200191505060405180910390f35b341561030c57600080fd5b610357600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611830565b604051808215151515815260200191505060405180910390f35b341561037c57600080fd5b610392600480803590602001909190505061185f565b6040518082815260200191505060405180910390f35b34156103b357600080fd5b6103e8600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506118bb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561043557600080fd5b610461600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611909565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156104a4578082015181840152602081019050610489565b505050509050019250505060405180910390f35b34156104c357600080fd5b6104cb6119dc565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561050e5780820151818401526020810190506104f3565b505050509050019250505060405180910390f35b341561052d57600080fd5b610578600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a79565b6040518082815260200191505060405180910390f35b341561059957600080fd5b6105c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611b03565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106055780820151818401526020810190506105ea565b50505050905090810190601f1680156106325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561064b57600080fd5b6106616004808035906020019091905050611da2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156106ae57600080fd5b6106cd6004808035906020019091908035906020019091905050611de1565b005b34156106da57600080fd5b610706600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061208d565b6040518082815260200191505060405180910390f35b341561072757600080fd5b610753600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506120d9565b6040518082815260200191505060405180910390f35b341561077457600080fd5b6107a9600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506121a1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107e95780820151818401526020810190506107ce565b50505050905090810190601f1680156108165780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610850600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061226a565b005b341561085d57600080fd5b610889600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612653565b6040518082815260200191505060405180910390f35b34156108aa57600080fd5b6108b261266b565b6040518082815260200191505060405180910390f35b34156108d357600080fd5b6108db612671565b6040518082815260200191505060405180910390f35b34156108fc57600080fd5b610928600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612677565b005b341561093557600080fd5b610961600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612c36565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109ae57600080fd5b6109da600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612ca2565b6040518082815260200191505060405180910390f35b34156109fb57600080fd5b610a03612cee565b6040518082815260200191505060405180910390f35b3415610a2457600080fd5b610a2c612cf4565b6040518082815260200191505060405180910390f35b3415610a4d57600080fd5b610a79600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612cfa565b604051808215151515815260200191505060405180910390f35b3415610a9e57600080fd5b610aa6612d53565b6040518082815260200191505060405180910390f35b3415610ac757600080fd5b610acf612d59565b6040518082815260200191505060405180910390f35b3415610af057600080fd5b610b1c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612d63565b005b3415610b2957600080fd5b610b4a600480803590602001908201803590602001919091929050506134f1565b005b3415610b5757600080fd5b610b5f6135f0565b6040518082815260200191505060405180910390f35b6000600b543410151515610b8857600080fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050141580610c1c57506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050115b1515610c2757600080fd5b81600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151515610c8457600080fd5b610cd934600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546135f690919063ffffffff16565b915060088054806001018281610cef919061362d565b9160005260206000209001600085909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506060604051908101604052803373ffffffffffffffffffffffffffffffffffffffff16815260200160011515815260200183815250600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555060408201518160010155905050610eb834600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5160016009546135f690919063ffffffff16565b6009819055506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905014156110185760078054806001018281610fb6919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600a600081548092919060010191905055505b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806001018281611069919061362d565b9160005260206000209001600085909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806001018281611109919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550507f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c1338434604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b60078181548110151561120b57fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000828280600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156112cd57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561140657600b546113f882600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361490919063ffffffff16565b1015151561140557600080fd5b5b61145b84600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461361490919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061153384600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361490919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115cb43600f546135f690919063ffffffff16565b9250611632846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020546135f690919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000858152602001908152602001600020819055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180548060010182816116db9190613659565b9160005260206000209001600085909190915055507faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa2338686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050505050565b61179e613685565b600880548060200260200160405190810160405280929190818152602001828054801561182057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116117d6575b5050505050905090565b600a5481565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020549050919050565b6006602052816000526040600020818154811015156118d657fe5b90600052602060002090016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611911613685565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156119d057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611986575b50505050509050919050565b6119e4613699565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611a6f57602002820191906000526020600020905b815481526020019060010190808311611a5b575b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b0b6136ad565b611b1482612cfa565b15611c655760036000611b2684612c36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600160036000611b6f86612c36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815481101515611bba57fe5b90600052602060002090018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c595780601f10611c2e57610100808354040283529160200191611c59565b820191906000526020600020905b815481529060010190602001808311611c3c57829003601f168201915b50505050509050611d9d565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815481101515611cf657fe5b90600052602060002090018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d955780601f10611d6a57610100808354040283529160200191611d95565b820191906000526020600020905b815481529060010190602001808311611d7857829003601f168201915b505050505090505b919050565b600881815481101515611db157fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008282600082111515611df457600080fd5b814310151515611e0357600080fd5b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002054111515611e6457600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611eb357fe5b906000526020600020900154141515611ecb57600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008681526020019081526020016000205492506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020600090556000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010184815481101515611fc457fe5b9060005260206000209001600090553373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050151561201357600080fd5b7ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568338685604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b60008082600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151561213857600080fd5b61214184612c36565b915061214b612d59565b6064600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540281151561219757fe5b0492505050919050565b6003602052816000526040600020818154811015156121bc57fe5b9060005260206000209001600091509150508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122625780601f1061223757610100808354040283529160200191612262565b820191906000526020600020905b81548152906001019060200180831161224557829003601f168201915b505050505081565b600c54341015151561227b57600080fd5b80600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff1615156122d757600080fd5b61232c34600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546135f690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561249b57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480600101828161244b919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b61252d34600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc338334604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b60046020528060005260406000206000915090505481565b60095481565b600f5481565b6000806000833373ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561271957600080fd5b84600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151561277557600080fd5b6000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160146101000a81548160ff0219169083151502179055506127e6600160095461361490919063ffffffff16565b600981905550600094505b6008805490508510156128bb578573ffffffffffffffffffffffffffffffffffffffff1660088681548110151561282457fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156128ae5760088581548110151561287b57fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556128bb565b84806001019550506127f1565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054935061299284600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461361490919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a7243600e546135f690919063ffffffff16565b9250612ad9846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020546135f690919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000858152602001908152602001600020819055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018054806001018281612b829190613659565b9160005260206000209001600085909190915055507f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d33387604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1505050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600d5481565b600e5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff169050919050565b600b5481565b6000600a54905090565b600080612d6e613685565b600080600033600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff161515612dcf57600080fd5b87600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff161515612e2b57600080fd5b612e3433612c36565b9750612e3f89612c36565b9650600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515612ed757600080fd5b6001600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550604b612fc4612d59565b6064600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540281151561301057fe5b041015156134e65760016008805490500360405180591061302e5750595b9080825280602002602001820160405250955060009450600093505b600880549050841015613357578673ffffffffffffffffffffffffffffffffffffffff166130b160088681548110151561308057fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612c36565b73ffffffffffffffffffffffffffffffffffffffff16141561334a576130e3600160095461361490919063ffffffff16565b6009819055506008848154811015156130f857fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868680600101975081518110151561313857fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060088481548110151561318357fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160006008868154811015156131c457fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff021916905560018201600090555050600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006132bb91906136c1565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061330691906136e2565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090555b838060010194505061304a565b600092505b600780549050831015613439578673ffffffffffffffffffffffffffffffffffffffff1660078481548110151561338f57fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561342c576007838154811015156133e657fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600a6000815480929190600190039190505550613439565b828060010193505061335c565b7fe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e8787604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156134d15780820151818401526020810190506134b6565b50505050905001935050505060405180910390a15b505050505050505050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060010182816135429190613703565b91600052602060002090016000848490919290919250919061356592919061372f565b50507f949360d814b28a3b393a68909efe1fee120ee09cac30f360a0f80ab5415a611a338383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a15050565b600c5481565b600080828401905083811015151561360a57fe5b8091505092915050565b600082821115151561362257fe5b818303905092915050565b8154818355818115116136545781836000526020600020918201910161365391906137af565b5b505050565b8154818355818115116136805781836000526020600020918201910161367f91906137af565b5b505050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b50805460008255906000526020600020908101906136df91906137d4565b50565b508054600082559060005260206000209081019061370091906137af565b50565b81548183558181151161372a5781836000526020600020918201910161372991906137d4565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061377057803560ff191683800117855561379e565b8280016001018555821561379e579182015b8281111561379d578235825591602001919060010190613782565b5b5090506137ab91906137af565b5090565b6137d191905b808211156137cd5760008160009055506001016137b5565b5090565b90565b6137fd91905b808211156137f957600081816137f09190613800565b506001016137da565b5090565b90565b50805460018160011615610100020316600290046000825580601f106138265750613845565b601f01602090049060005260206000209081019061384491906137af565b5b505600a165627a7a72305820f5bbb127b52ce86c873faef85cff176563476a5e49a3d88eaa9a06a8f432c9080029` + +// DeployXDCValidator deploys a new Ethereum contract, binding an instance of XDCValidator to it. +func DeployXDCValidator(auth *bind.TransactOpts, backend bind.ContractBackend, _candidates []common.Address, _caps []*big.Int, _firstOwner common.Address, _minCandidateCap *big.Int, _minVoterCap *big.Int, _maxValidatorNumber *big.Int, _candidateWithdrawDelay *big.Int, _voterWithdrawDelay *big.Int) (common.Address, *types.Transaction, *XDCValidator, error) { + parsed, err := abi.JSON(strings.NewReader(XDCValidatorABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(XDCValidatorBin), backend, _candidates, _caps, _firstOwner, _minCandidateCap, _minVoterCap, _maxValidatorNumber, _candidateWithdrawDelay, _voterWithdrawDelay) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &XDCValidator{XDCValidatorCaller: XDCValidatorCaller{contract: contract}, XDCValidatorTransactor: XDCValidatorTransactor{contract: contract}, XDCValidatorFilterer: XDCValidatorFilterer{contract: contract}}, nil +} + +// XDCValidator is an auto generated Go binding around an Ethereum contract. +type XDCValidator struct { + XDCValidatorCaller // Read-only binding to the contract + XDCValidatorTransactor // Write-only binding to the contract + XDCValidatorFilterer // Log filterer for contract events +} + +// XDCValidatorCaller is an auto generated read-only Go binding around an Ethereum contract. +type XDCValidatorCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// XDCValidatorTransactor is an auto generated write-only Go binding around an Ethereum contract. +type XDCValidatorTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// XDCValidatorFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type XDCValidatorFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// XDCValidatorSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type XDCValidatorSession struct { + Contract *XDCValidator // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// XDCValidatorCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type XDCValidatorCallerSession struct { + Contract *XDCValidatorCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// XDCValidatorTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type XDCValidatorTransactorSession struct { + Contract *XDCValidatorTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// XDCValidatorRaw is an auto generated low-level Go binding around an Ethereum contract. +type XDCValidatorRaw struct { + Contract *XDCValidator // Generic contract binding to access the raw methods on +} + +// XDCValidatorCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type XDCValidatorCallerRaw struct { + Contract *XDCValidatorCaller // Generic read-only contract binding to access the raw methods on +} + +// XDCValidatorTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type XDCValidatorTransactorRaw struct { + Contract *XDCValidatorTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewXDCValidator creates a new instance of XDCValidator, bound to a specific deployed contract. +func NewXDCValidator(address common.Address, backend bind.ContractBackend) (*XDCValidator, error) { + contract, err := bindXDCValidator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &XDCValidator{XDCValidatorCaller: XDCValidatorCaller{contract: contract}, XDCValidatorTransactor: XDCValidatorTransactor{contract: contract}, XDCValidatorFilterer: XDCValidatorFilterer{contract: contract}}, nil +} + +// NewXDCValidatorCaller creates a new read-only instance of XDCValidator, bound to a specific deployed contract. +func NewXDCValidatorCaller(address common.Address, caller bind.ContractCaller) (*XDCValidatorCaller, error) { + contract, err := bindXDCValidator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &XDCValidatorCaller{contract: contract}, nil +} + +// NewXDCValidatorTransactor creates a new write-only instance of XDCValidator, bound to a specific deployed contract. +func NewXDCValidatorTransactor(address common.Address, transactor bind.ContractTransactor) (*XDCValidatorTransactor, error) { + contract, err := bindXDCValidator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &XDCValidatorTransactor{contract: contract}, nil +} + +// NewXDCValidatorFilterer creates a new log filterer instance of XDCValidator, bound to a specific deployed contract. +func NewXDCValidatorFilterer(address common.Address, filterer bind.ContractFilterer) (*XDCValidatorFilterer, error) { + contract, err := bindXDCValidator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &XDCValidatorFilterer{contract: contract}, nil +} + +// bindXDCValidator binds a generic wrapper to an already deployed contract. +func bindXDCValidator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(XDCValidatorABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_XDCValidator *XDCValidatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _XDCValidator.Contract.XDCValidatorCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_XDCValidator *XDCValidatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _XDCValidator.Contract.XDCValidatorTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_XDCValidator *XDCValidatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _XDCValidator.Contract.XDCValidatorTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_XDCValidator *XDCValidatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _XDCValidator.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_XDCValidator *XDCValidatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _XDCValidator.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_XDCValidator *XDCValidatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _XDCValidator.Contract.contract.Transact(opts, method, params...) +} + +// KYCString is a free data retrieval call binding the contract method 0x5b9cd8cc. +// +// Solidity: function KYCString( address, uint256) constant returns(string) +func (_XDCValidator *XDCValidatorCaller) KYCString(opts *bind.CallOpts, arg0 common.Address, arg1 *big.Int) (string, error) { + var ( + ret0 = new(string) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "KYCString", arg0, arg1) + return *ret0, err +} + +// KYCString is a free data retrieval call binding the contract method 0x5b9cd8cc. +// +// Solidity: function KYCString( address, uint256) constant returns(string) +func (_XDCValidator *XDCValidatorSession) KYCString(arg0 common.Address, arg1 *big.Int) (string, error) { + return _XDCValidator.Contract.KYCString(&_XDCValidator.CallOpts, arg0, arg1) +} + +// KYCString is a free data retrieval call binding the contract method 0x5b9cd8cc. +// +// Solidity: function KYCString( address, uint256) constant returns(string) +func (_XDCValidator *XDCValidatorCallerSession) KYCString(arg0 common.Address, arg1 *big.Int) (string, error) { + return _XDCValidator.Contract.KYCString(&_XDCValidator.CallOpts, arg0, arg1) +} + +// CandidateCount is a free data retrieval call binding the contract method 0xa9a981a3. +// +// Solidity: function candidateCount() constant returns(uint256) +func (_XDCValidator *XDCValidatorCaller) CandidateCount(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "candidateCount") + return *ret0, err +} + +// CandidateCount is a free data retrieval call binding the contract method 0xa9a981a3. +// +// Solidity: function candidateCount() constant returns(uint256) +func (_XDCValidator *XDCValidatorSession) CandidateCount() (*big.Int, error) { + return _XDCValidator.Contract.CandidateCount(&_XDCValidator.CallOpts) +} + +// CandidateCount is a free data retrieval call binding the contract method 0xa9a981a3. +// +// Solidity: function candidateCount() constant returns(uint256) +func (_XDCValidator *XDCValidatorCallerSession) CandidateCount() (*big.Int, error) { + return _XDCValidator.Contract.CandidateCount(&_XDCValidator.CallOpts) +} + +// CandidateWithdrawDelay is a free data retrieval call binding the contract method 0xd161c767. +// +// Solidity: function candidateWithdrawDelay() constant returns(uint256) +func (_XDCValidator *XDCValidatorCaller) CandidateWithdrawDelay(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "candidateWithdrawDelay") + return *ret0, err +} + +// CandidateWithdrawDelay is a free data retrieval call binding the contract method 0xd161c767. +// +// Solidity: function candidateWithdrawDelay() constant returns(uint256) +func (_XDCValidator *XDCValidatorSession) CandidateWithdrawDelay() (*big.Int, error) { + return _XDCValidator.Contract.CandidateWithdrawDelay(&_XDCValidator.CallOpts) +} + +// CandidateWithdrawDelay is a free data retrieval call binding the contract method 0xd161c767. +// +// Solidity: function candidateWithdrawDelay() constant returns(uint256) +func (_XDCValidator *XDCValidatorCallerSession) CandidateWithdrawDelay() (*big.Int, error) { + return _XDCValidator.Contract.CandidateWithdrawDelay(&_XDCValidator.CallOpts) +} + +// Candidates is a free data retrieval call binding the contract method 0x3477ee2e. +// +// Solidity: function candidates( uint256) constant returns(address) +func (_XDCValidator *XDCValidatorCaller) Candidates(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "candidates", arg0) + return *ret0, err +} + +// Candidates is a free data retrieval call binding the contract method 0x3477ee2e. +// +// Solidity: function candidates( uint256) constant returns(address) +func (_XDCValidator *XDCValidatorSession) Candidates(arg0 *big.Int) (common.Address, error) { + return _XDCValidator.Contract.Candidates(&_XDCValidator.CallOpts, arg0) +} + +// Candidates is a free data retrieval call binding the contract method 0x3477ee2e. +// +// Solidity: function candidates( uint256) constant returns(address) +func (_XDCValidator *XDCValidatorCallerSession) Candidates(arg0 *big.Int) (common.Address, error) { + return _XDCValidator.Contract.Candidates(&_XDCValidator.CallOpts, arg0) +} + +// GetCandidateCap is a free data retrieval call binding the contract method 0x58e7525f. +// +// Solidity: function getCandidateCap(_candidate address) constant returns(uint256) +func (_XDCValidator *XDCValidatorCaller) GetCandidateCap(opts *bind.CallOpts, _candidate common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "getCandidateCap", _candidate) + return *ret0, err +} + +// GetCandidateCap is a free data retrieval call binding the contract method 0x58e7525f. +// +// Solidity: function getCandidateCap(_candidate address) constant returns(uint256) +func (_XDCValidator *XDCValidatorSession) GetCandidateCap(_candidate common.Address) (*big.Int, error) { + return _XDCValidator.Contract.GetCandidateCap(&_XDCValidator.CallOpts, _candidate) +} + +// GetCandidateCap is a free data retrieval call binding the contract method 0x58e7525f. +// +// Solidity: function getCandidateCap(_candidate address) constant returns(uint256) +func (_XDCValidator *XDCValidatorCallerSession) GetCandidateCap(_candidate common.Address) (*big.Int, error) { + return _XDCValidator.Contract.GetCandidateCap(&_XDCValidator.CallOpts, _candidate) +} + +// GetCandidateOwner is a free data retrieval call binding the contract method 0xb642facd. +// +// Solidity: function getCandidateOwner(_candidate address) constant returns(address) +func (_XDCValidator *XDCValidatorCaller) GetCandidateOwner(opts *bind.CallOpts, _candidate common.Address) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "getCandidateOwner", _candidate) + return *ret0, err +} + +// GetCandidateOwner is a free data retrieval call binding the contract method 0xb642facd. +// +// Solidity: function getCandidateOwner(_candidate address) constant returns(address) +func (_XDCValidator *XDCValidatorSession) GetCandidateOwner(_candidate common.Address) (common.Address, error) { + return _XDCValidator.Contract.GetCandidateOwner(&_XDCValidator.CallOpts, _candidate) +} + +// GetCandidateOwner is a free data retrieval call binding the contract method 0xb642facd. +// +// Solidity: function getCandidateOwner(_candidate address) constant returns(address) +func (_XDCValidator *XDCValidatorCallerSession) GetCandidateOwner(_candidate common.Address) (common.Address, error) { + return _XDCValidator.Contract.GetCandidateOwner(&_XDCValidator.CallOpts, _candidate) +} + +// GetCandidates is a free data retrieval call binding the contract method 0x06a49fce. +// +// Solidity: function getCandidates() constant returns(address[]) +func (_XDCValidator *XDCValidatorCaller) GetCandidates(opts *bind.CallOpts) ([]common.Address, error) { + var ( + ret0 = new([]common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "getCandidates") + return *ret0, err +} + +// GetCandidates is a free data retrieval call binding the contract method 0x06a49fce. +// +// Solidity: function getCandidates() constant returns(address[]) +func (_XDCValidator *XDCValidatorSession) GetCandidates() ([]common.Address, error) { + return _XDCValidator.Contract.GetCandidates(&_XDCValidator.CallOpts) +} + +// GetCandidates is a free data retrieval call binding the contract method 0x06a49fce. +// +// Solidity: function getCandidates() constant returns(address[]) +func (_XDCValidator *XDCValidatorCallerSession) GetCandidates() ([]common.Address, error) { + return _XDCValidator.Contract.GetCandidates(&_XDCValidator.CallOpts) +} + +// GetHashCount is a free data retrieval call binding the contract method 0xc45607df. +// +// Solidity: function getHashCount(_address address) constant returns(uint256) +func (_XDCValidator *XDCValidatorCaller) GetHashCount(opts *bind.CallOpts, _address common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "getHashCount", _address) + return *ret0, err +} + +// GetHashCount is a free data retrieval call binding the contract method 0xc45607df. +// +// Solidity: function getHashCount(_address address) constant returns(uint256) +func (_XDCValidator *XDCValidatorSession) GetHashCount(_address common.Address) (*big.Int, error) { + return _XDCValidator.Contract.GetHashCount(&_XDCValidator.CallOpts, _address) +} + +// GetHashCount is a free data retrieval call binding the contract method 0xc45607df. +// +// Solidity: function getHashCount(_address address) constant returns(uint256) +func (_XDCValidator *XDCValidatorCallerSession) GetHashCount(_address common.Address) (*big.Int, error) { + return _XDCValidator.Contract.GetHashCount(&_XDCValidator.CallOpts, _address) +} + +// GetLatestKYC is a free data retrieval call binding the contract method 0x32658652. +// +// Solidity: function getLatestKYC(_address address) constant returns(string) +func (_XDCValidator *XDCValidatorCaller) GetLatestKYC(opts *bind.CallOpts, _address common.Address) (string, error) { + var ( + ret0 = new(string) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "getLatestKYC", _address) + return *ret0, err +} + +// GetLatestKYC is a free data retrieval call binding the contract method 0x32658652. +// +// Solidity: function getLatestKYC(_address address) constant returns(string) +func (_XDCValidator *XDCValidatorSession) GetLatestKYC(_address common.Address) (string, error) { + return _XDCValidator.Contract.GetLatestKYC(&_XDCValidator.CallOpts, _address) +} + +// GetLatestKYC is a free data retrieval call binding the contract method 0x32658652. +// +// Solidity: function getLatestKYC(_address address) constant returns(string) +func (_XDCValidator *XDCValidatorCallerSession) GetLatestKYC(_address common.Address) (string, error) { + return _XDCValidator.Contract.GetLatestKYC(&_XDCValidator.CallOpts, _address) +} + +// GetOwnerCount is a free data retrieval call binding the contract method 0xef18374a. +// +// Solidity: function getOwnerCount() constant returns(uint256) +func (_XDCValidator *XDCValidatorCaller) GetOwnerCount(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "getOwnerCount") + return *ret0, err +} + +// GetOwnerCount is a free data retrieval call binding the contract method 0xef18374a. +// +// Solidity: function getOwnerCount() constant returns(uint256) +func (_XDCValidator *XDCValidatorSession) GetOwnerCount() (*big.Int, error) { + return _XDCValidator.Contract.GetOwnerCount(&_XDCValidator.CallOpts) +} + +// GetOwnerCount is a free data retrieval call binding the contract method 0xef18374a. +// +// Solidity: function getOwnerCount() constant returns(uint256) +func (_XDCValidator *XDCValidatorCallerSession) GetOwnerCount() (*big.Int, error) { + return _XDCValidator.Contract.GetOwnerCount(&_XDCValidator.CallOpts) +} + +// GetVoterCap is a free data retrieval call binding the contract method 0x302b6872. +// +// Solidity: function getVoterCap(_candidate address, _voter address) constant returns(uint256) +func (_XDCValidator *XDCValidatorCaller) GetVoterCap(opts *bind.CallOpts, _candidate common.Address, _voter common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "getVoterCap", _candidate, _voter) + return *ret0, err +} + +// GetVoterCap is a free data retrieval call binding the contract method 0x302b6872. +// +// Solidity: function getVoterCap(_candidate address, _voter address) constant returns(uint256) +func (_XDCValidator *XDCValidatorSession) GetVoterCap(_candidate common.Address, _voter common.Address) (*big.Int, error) { + return _XDCValidator.Contract.GetVoterCap(&_XDCValidator.CallOpts, _candidate, _voter) +} + +// GetVoterCap is a free data retrieval call binding the contract method 0x302b6872. +// +// Solidity: function getVoterCap(_candidate address, _voter address) constant returns(uint256) +func (_XDCValidator *XDCValidatorCallerSession) GetVoterCap(_candidate common.Address, _voter common.Address) (*big.Int, error) { + return _XDCValidator.Contract.GetVoterCap(&_XDCValidator.CallOpts, _candidate, _voter) +} + +// GetVoters is a free data retrieval call binding the contract method 0x2d15cc04. +// +// Solidity: function getVoters(_candidate address) constant returns(address[]) +func (_XDCValidator *XDCValidatorCaller) GetVoters(opts *bind.CallOpts, _candidate common.Address) ([]common.Address, error) { + var ( + ret0 = new([]common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "getVoters", _candidate) + return *ret0, err +} + +// GetVoters is a free data retrieval call binding the contract method 0x2d15cc04. +// +// Solidity: function getVoters(_candidate address) constant returns(address[]) +func (_XDCValidator *XDCValidatorSession) GetVoters(_candidate common.Address) ([]common.Address, error) { + return _XDCValidator.Contract.GetVoters(&_XDCValidator.CallOpts, _candidate) +} + +// GetVoters is a free data retrieval call binding the contract method 0x2d15cc04. +// +// Solidity: function getVoters(_candidate address) constant returns(address[]) +func (_XDCValidator *XDCValidatorCallerSession) GetVoters(_candidate common.Address) ([]common.Address, error) { + return _XDCValidator.Contract.GetVoters(&_XDCValidator.CallOpts, _candidate) +} + +// GetWithdrawBlockNumbers is a free data retrieval call binding the contract method 0x2f9c4bba. +// +// Solidity: function getWithdrawBlockNumbers() constant returns(uint256[]) +func (_XDCValidator *XDCValidatorCaller) GetWithdrawBlockNumbers(opts *bind.CallOpts) ([]*big.Int, error) { + var ( + ret0 = new([]*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "getWithdrawBlockNumbers") + return *ret0, err +} + +// GetWithdrawBlockNumbers is a free data retrieval call binding the contract method 0x2f9c4bba. +// +// Solidity: function getWithdrawBlockNumbers() constant returns(uint256[]) +func (_XDCValidator *XDCValidatorSession) GetWithdrawBlockNumbers() ([]*big.Int, error) { + return _XDCValidator.Contract.GetWithdrawBlockNumbers(&_XDCValidator.CallOpts) +} + +// GetWithdrawBlockNumbers is a free data retrieval call binding the contract method 0x2f9c4bba. +// +// Solidity: function getWithdrawBlockNumbers() constant returns(uint256[]) +func (_XDCValidator *XDCValidatorCallerSession) GetWithdrawBlockNumbers() ([]*big.Int, error) { + return _XDCValidator.Contract.GetWithdrawBlockNumbers(&_XDCValidator.CallOpts) +} + +// GetWithdrawCap is a free data retrieval call binding the contract method 0x15febd68. +// +// Solidity: function getWithdrawCap(_blockNumber uint256) constant returns(uint256) +func (_XDCValidator *XDCValidatorCaller) GetWithdrawCap(opts *bind.CallOpts, _blockNumber *big.Int) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "getWithdrawCap", _blockNumber) + return *ret0, err +} + +// GetWithdrawCap is a free data retrieval call binding the contract method 0x15febd68. +// +// Solidity: function getWithdrawCap(_blockNumber uint256) constant returns(uint256) +func (_XDCValidator *XDCValidatorSession) GetWithdrawCap(_blockNumber *big.Int) (*big.Int, error) { + return _XDCValidator.Contract.GetWithdrawCap(&_XDCValidator.CallOpts, _blockNumber) +} + +// GetWithdrawCap is a free data retrieval call binding the contract method 0x15febd68. +// +// Solidity: function getWithdrawCap(_blockNumber uint256) constant returns(uint256) +func (_XDCValidator *XDCValidatorCallerSession) GetWithdrawCap(_blockNumber *big.Int) (*big.Int, error) { + return _XDCValidator.Contract.GetWithdrawCap(&_XDCValidator.CallOpts, _blockNumber) +} + +// HasVotedInvalid is a free data retrieval call binding the contract method 0x0e3e4fb8. +// +// Solidity: function hasVotedInvalid( address, address) constant returns(bool) +func (_XDCValidator *XDCValidatorCaller) HasVotedInvalid(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (bool, error) { + var ( + ret0 = new(bool) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "hasVotedInvalid", arg0, arg1) + return *ret0, err +} + +// HasVotedInvalid is a free data retrieval call binding the contract method 0x0e3e4fb8. +// +// Solidity: function hasVotedInvalid( address, address) constant returns(bool) +func (_XDCValidator *XDCValidatorSession) HasVotedInvalid(arg0 common.Address, arg1 common.Address) (bool, error) { + return _XDCValidator.Contract.HasVotedInvalid(&_XDCValidator.CallOpts, arg0, arg1) +} + +// HasVotedInvalid is a free data retrieval call binding the contract method 0x0e3e4fb8. +// +// Solidity: function hasVotedInvalid( address, address) constant returns(bool) +func (_XDCValidator *XDCValidatorCallerSession) HasVotedInvalid(arg0 common.Address, arg1 common.Address) (bool, error) { + return _XDCValidator.Contract.HasVotedInvalid(&_XDCValidator.CallOpts, arg0, arg1) +} + +// InvalidKYCCount is a free data retrieval call binding the contract method 0x72e44a38. +// +// Solidity: function invalidKYCCount( address) constant returns(uint256) +func (_XDCValidator *XDCValidatorCaller) InvalidKYCCount(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "invalidKYCCount", arg0) + return *ret0, err +} + +// InvalidKYCCount is a free data retrieval call binding the contract method 0x72e44a38. +// +// Solidity: function invalidKYCCount( address) constant returns(uint256) +func (_XDCValidator *XDCValidatorSession) InvalidKYCCount(arg0 common.Address) (*big.Int, error) { + return _XDCValidator.Contract.InvalidKYCCount(&_XDCValidator.CallOpts, arg0) +} + +// InvalidKYCCount is a free data retrieval call binding the contract method 0x72e44a38. +// +// Solidity: function invalidKYCCount( address) constant returns(uint256) +func (_XDCValidator *XDCValidatorCallerSession) InvalidKYCCount(arg0 common.Address) (*big.Int, error) { + return _XDCValidator.Contract.InvalidKYCCount(&_XDCValidator.CallOpts, arg0) +} + +// InvalidPercent is a free data retrieval call binding the contract method 0x5b860d27. +// +// Solidity: function invalidPercent(_invalidCandidate address) constant returns(uint256) +func (_XDCValidator *XDCValidatorCaller) InvalidPercent(opts *bind.CallOpts, _invalidCandidate common.Address) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "invalidPercent", _invalidCandidate) + return *ret0, err +} + +// InvalidPercent is a free data retrieval call binding the contract method 0x5b860d27. +// +// Solidity: function invalidPercent(_invalidCandidate address) constant returns(uint256) +func (_XDCValidator *XDCValidatorSession) InvalidPercent(_invalidCandidate common.Address) (*big.Int, error) { + return _XDCValidator.Contract.InvalidPercent(&_XDCValidator.CallOpts, _invalidCandidate) +} + +// InvalidPercent is a free data retrieval call binding the contract method 0x5b860d27. +// +// Solidity: function invalidPercent(_invalidCandidate address) constant returns(uint256) +func (_XDCValidator *XDCValidatorCallerSession) InvalidPercent(_invalidCandidate common.Address) (*big.Int, error) { + return _XDCValidator.Contract.InvalidPercent(&_XDCValidator.CallOpts, _invalidCandidate) +} + +// IsCandidate is a free data retrieval call binding the contract method 0xd51b9e93. +// +// Solidity: function isCandidate(_candidate address) constant returns(bool) +func (_XDCValidator *XDCValidatorCaller) IsCandidate(opts *bind.CallOpts, _candidate common.Address) (bool, error) { + var ( + ret0 = new(bool) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "isCandidate", _candidate) + return *ret0, err +} + +// IsCandidate is a free data retrieval call binding the contract method 0xd51b9e93. +// +// Solidity: function isCandidate(_candidate address) constant returns(bool) +func (_XDCValidator *XDCValidatorSession) IsCandidate(_candidate common.Address) (bool, error) { + return _XDCValidator.Contract.IsCandidate(&_XDCValidator.CallOpts, _candidate) +} + +// IsCandidate is a free data retrieval call binding the contract method 0xd51b9e93. +// +// Solidity: function isCandidate(_candidate address) constant returns(bool) +func (_XDCValidator *XDCValidatorCallerSession) IsCandidate(_candidate common.Address) (bool, error) { + return _XDCValidator.Contract.IsCandidate(&_XDCValidator.CallOpts, _candidate) +} + +// MaxValidatorNumber is a free data retrieval call binding the contract method 0xd09f1ab4. +// +// Solidity: function maxValidatorNumber() constant returns(uint256) +func (_XDCValidator *XDCValidatorCaller) MaxValidatorNumber(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "maxValidatorNumber") + return *ret0, err +} + +// MaxValidatorNumber is a free data retrieval call binding the contract method 0xd09f1ab4. +// +// Solidity: function maxValidatorNumber() constant returns(uint256) +func (_XDCValidator *XDCValidatorSession) MaxValidatorNumber() (*big.Int, error) { + return _XDCValidator.Contract.MaxValidatorNumber(&_XDCValidator.CallOpts) +} + +// MaxValidatorNumber is a free data retrieval call binding the contract method 0xd09f1ab4. +// +// Solidity: function maxValidatorNumber() constant returns(uint256) +func (_XDCValidator *XDCValidatorCallerSession) MaxValidatorNumber() (*big.Int, error) { + return _XDCValidator.Contract.MaxValidatorNumber(&_XDCValidator.CallOpts) +} + +// MinCandidateCap is a free data retrieval call binding the contract method 0xd55b7dff. +// +// Solidity: function minCandidateCap() constant returns(uint256) +func (_XDCValidator *XDCValidatorCaller) MinCandidateCap(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "minCandidateCap") + return *ret0, err +} + +// MinCandidateCap is a free data retrieval call binding the contract method 0xd55b7dff. +// +// Solidity: function minCandidateCap() constant returns(uint256) +func (_XDCValidator *XDCValidatorSession) MinCandidateCap() (*big.Int, error) { + return _XDCValidator.Contract.MinCandidateCap(&_XDCValidator.CallOpts) +} + +// MinCandidateCap is a free data retrieval call binding the contract method 0xd55b7dff. +// +// Solidity: function minCandidateCap() constant returns(uint256) +func (_XDCValidator *XDCValidatorCallerSession) MinCandidateCap() (*big.Int, error) { + return _XDCValidator.Contract.MinCandidateCap(&_XDCValidator.CallOpts) +} + +// MinVoterCap is a free data retrieval call binding the contract method 0xf8ac9dd5. +// +// Solidity: function minVoterCap() constant returns(uint256) +func (_XDCValidator *XDCValidatorCaller) MinVoterCap(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "minVoterCap") + return *ret0, err +} + +// MinVoterCap is a free data retrieval call binding the contract method 0xf8ac9dd5. +// +// Solidity: function minVoterCap() constant returns(uint256) +func (_XDCValidator *XDCValidatorSession) MinVoterCap() (*big.Int, error) { + return _XDCValidator.Contract.MinVoterCap(&_XDCValidator.CallOpts) +} + +// MinVoterCap is a free data retrieval call binding the contract method 0xf8ac9dd5. +// +// Solidity: function minVoterCap() constant returns(uint256) +func (_XDCValidator *XDCValidatorCallerSession) MinVoterCap() (*big.Int, error) { + return _XDCValidator.Contract.MinVoterCap(&_XDCValidator.CallOpts) +} + +// OwnerCount is a free data retrieval call binding the contract method 0x0db02622. +// +// Solidity: function ownerCount() constant returns(uint256) +func (_XDCValidator *XDCValidatorCaller) OwnerCount(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "ownerCount") + return *ret0, err +} + +// OwnerCount is a free data retrieval call binding the contract method 0x0db02622. +// +// Solidity: function ownerCount() constant returns(uint256) +func (_XDCValidator *XDCValidatorSession) OwnerCount() (*big.Int, error) { + return _XDCValidator.Contract.OwnerCount(&_XDCValidator.CallOpts) +} + +// OwnerCount is a free data retrieval call binding the contract method 0x0db02622. +// +// Solidity: function ownerCount() constant returns(uint256) +func (_XDCValidator *XDCValidatorCallerSession) OwnerCount() (*big.Int, error) { + return _XDCValidator.Contract.OwnerCount(&_XDCValidator.CallOpts) +} + +// OwnerToCandidate is a free data retrieval call binding the contract method 0x2a3640b1. +// +// Solidity: function ownerToCandidate( address, uint256) constant returns(address) +func (_XDCValidator *XDCValidatorCaller) OwnerToCandidate(opts *bind.CallOpts, arg0 common.Address, arg1 *big.Int) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "ownerToCandidate", arg0, arg1) + return *ret0, err +} + +// OwnerToCandidate is a free data retrieval call binding the contract method 0x2a3640b1. +// +// Solidity: function ownerToCandidate( address, uint256) constant returns(address) +func (_XDCValidator *XDCValidatorSession) OwnerToCandidate(arg0 common.Address, arg1 *big.Int) (common.Address, error) { + return _XDCValidator.Contract.OwnerToCandidate(&_XDCValidator.CallOpts, arg0, arg1) +} + +// OwnerToCandidate is a free data retrieval call binding the contract method 0x2a3640b1. +// +// Solidity: function ownerToCandidate( address, uint256) constant returns(address) +func (_XDCValidator *XDCValidatorCallerSession) OwnerToCandidate(arg0 common.Address, arg1 *big.Int) (common.Address, error) { + return _XDCValidator.Contract.OwnerToCandidate(&_XDCValidator.CallOpts, arg0, arg1) +} + +// Owners is a free data retrieval call binding the contract method 0x025e7c27. +// +// Solidity: function owners( uint256) constant returns(address) +func (_XDCValidator *XDCValidatorCaller) Owners(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var ( + ret0 = new(common.Address) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "owners", arg0) + return *ret0, err +} + +// Owners is a free data retrieval call binding the contract method 0x025e7c27. +// +// Solidity: function owners( uint256) constant returns(address) +func (_XDCValidator *XDCValidatorSession) Owners(arg0 *big.Int) (common.Address, error) { + return _XDCValidator.Contract.Owners(&_XDCValidator.CallOpts, arg0) +} + +// Owners is a free data retrieval call binding the contract method 0x025e7c27. +// +// Solidity: function owners( uint256) constant returns(address) +func (_XDCValidator *XDCValidatorCallerSession) Owners(arg0 *big.Int) (common.Address, error) { + return _XDCValidator.Contract.Owners(&_XDCValidator.CallOpts, arg0) +} + +// VoterWithdrawDelay is a free data retrieval call binding the contract method 0xa9ff959e. +// +// Solidity: function voterWithdrawDelay() constant returns(uint256) +func (_XDCValidator *XDCValidatorCaller) VoterWithdrawDelay(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + } + err := _XDCValidator.contract.Call(opts, out, "voterWithdrawDelay") + return *ret0, err +} + +// VoterWithdrawDelay is a free data retrieval call binding the contract method 0xa9ff959e. +// +// Solidity: function voterWithdrawDelay() constant returns(uint256) +func (_XDCValidator *XDCValidatorSession) VoterWithdrawDelay() (*big.Int, error) { + return _XDCValidator.Contract.VoterWithdrawDelay(&_XDCValidator.CallOpts) +} + +// VoterWithdrawDelay is a free data retrieval call binding the contract method 0xa9ff959e. +// +// Solidity: function voterWithdrawDelay() constant returns(uint256) +func (_XDCValidator *XDCValidatorCallerSession) VoterWithdrawDelay() (*big.Int, error) { + return _XDCValidator.Contract.VoterWithdrawDelay(&_XDCValidator.CallOpts) +} + +// Propose is a paid mutator transaction binding the contract method 0x01267951. +// +// Solidity: function propose(_candidate address) returns() +func (_XDCValidator *XDCValidatorTransactor) Propose(opts *bind.TransactOpts, _candidate common.Address) (*types.Transaction, error) { + return _XDCValidator.contract.Transact(opts, "propose", _candidate) +} + +// Propose is a paid mutator transaction binding the contract method 0x01267951. +// +// Solidity: function propose(_candidate address) returns() +func (_XDCValidator *XDCValidatorSession) Propose(_candidate common.Address) (*types.Transaction, error) { + return _XDCValidator.Contract.Propose(&_XDCValidator.TransactOpts, _candidate) +} + +// Propose is a paid mutator transaction binding the contract method 0x01267951. +// +// Solidity: function propose(_candidate address) returns() +func (_XDCValidator *XDCValidatorTransactorSession) Propose(_candidate common.Address) (*types.Transaction, error) { + return _XDCValidator.Contract.Propose(&_XDCValidator.TransactOpts, _candidate) +} + +// Resign is a paid mutator transaction binding the contract method 0xae6e43f5. +// +// Solidity: function resign(_candidate address) returns() +func (_XDCValidator *XDCValidatorTransactor) Resign(opts *bind.TransactOpts, _candidate common.Address) (*types.Transaction, error) { + return _XDCValidator.contract.Transact(opts, "resign", _candidate) +} + +// Resign is a paid mutator transaction binding the contract method 0xae6e43f5. +// +// Solidity: function resign(_candidate address) returns() +func (_XDCValidator *XDCValidatorSession) Resign(_candidate common.Address) (*types.Transaction, error) { + return _XDCValidator.Contract.Resign(&_XDCValidator.TransactOpts, _candidate) +} + +// Resign is a paid mutator transaction binding the contract method 0xae6e43f5. +// +// Solidity: function resign(_candidate address) returns() +func (_XDCValidator *XDCValidatorTransactorSession) Resign(_candidate common.Address) (*types.Transaction, error) { + return _XDCValidator.Contract.Resign(&_XDCValidator.TransactOpts, _candidate) +} + +// Unvote is a paid mutator transaction binding the contract method 0x02aa9be2. +// +// Solidity: function unvote(_candidate address, _cap uint256) returns() +func (_XDCValidator *XDCValidatorTransactor) Unvote(opts *bind.TransactOpts, _candidate common.Address, _cap *big.Int) (*types.Transaction, error) { + return _XDCValidator.contract.Transact(opts, "unvote", _candidate, _cap) +} + +// Unvote is a paid mutator transaction binding the contract method 0x02aa9be2. +// +// Solidity: function unvote(_candidate address, _cap uint256) returns() +func (_XDCValidator *XDCValidatorSession) Unvote(_candidate common.Address, _cap *big.Int) (*types.Transaction, error) { + return _XDCValidator.Contract.Unvote(&_XDCValidator.TransactOpts, _candidate, _cap) +} + +// Unvote is a paid mutator transaction binding the contract method 0x02aa9be2. +// +// Solidity: function unvote(_candidate address, _cap uint256) returns() +func (_XDCValidator *XDCValidatorTransactorSession) Unvote(_candidate common.Address, _cap *big.Int) (*types.Transaction, error) { + return _XDCValidator.Contract.Unvote(&_XDCValidator.TransactOpts, _candidate, _cap) +} + +// UploadKYC is a paid mutator transaction binding the contract method 0xf5c95125. +// +// Solidity: function uploadKYC(kychash string) returns() +func (_XDCValidator *XDCValidatorTransactor) UploadKYC(opts *bind.TransactOpts, kychash string) (*types.Transaction, error) { + return _XDCValidator.contract.Transact(opts, "uploadKYC", kychash) +} + +// UploadKYC is a paid mutator transaction binding the contract method 0xf5c95125. +// +// Solidity: function uploadKYC(kychash string) returns() +func (_XDCValidator *XDCValidatorSession) UploadKYC(kychash string) (*types.Transaction, error) { + return _XDCValidator.Contract.UploadKYC(&_XDCValidator.TransactOpts, kychash) +} + +// UploadKYC is a paid mutator transaction binding the contract method 0xf5c95125. +// +// Solidity: function uploadKYC(kychash string) returns() +func (_XDCValidator *XDCValidatorTransactorSession) UploadKYC(kychash string) (*types.Transaction, error) { + return _XDCValidator.Contract.UploadKYC(&_XDCValidator.TransactOpts, kychash) +} + +// Vote is a paid mutator transaction binding the contract method 0x6dd7d8ea. +// +// Solidity: function vote(_candidate address) returns() +func (_XDCValidator *XDCValidatorTransactor) Vote(opts *bind.TransactOpts, _candidate common.Address) (*types.Transaction, error) { + return _XDCValidator.contract.Transact(opts, "vote", _candidate) +} + +// Vote is a paid mutator transaction binding the contract method 0x6dd7d8ea. +// +// Solidity: function vote(_candidate address) returns() +func (_XDCValidator *XDCValidatorSession) Vote(_candidate common.Address) (*types.Transaction, error) { + return _XDCValidator.Contract.Vote(&_XDCValidator.TransactOpts, _candidate) +} + +// Vote is a paid mutator transaction binding the contract method 0x6dd7d8ea. +// +// Solidity: function vote(_candidate address) returns() +func (_XDCValidator *XDCValidatorTransactorSession) Vote(_candidate common.Address) (*types.Transaction, error) { + return _XDCValidator.Contract.Vote(&_XDCValidator.TransactOpts, _candidate) +} + +// VoteInvalidKYC is a paid mutator transaction binding the contract method 0xf2ee3c7d. +// +// Solidity: function voteInvalidKYC(_invalidCandidate address) returns() +func (_XDCValidator *XDCValidatorTransactor) VoteInvalidKYC(opts *bind.TransactOpts, _invalidCandidate common.Address) (*types.Transaction, error) { + return _XDCValidator.contract.Transact(opts, "voteInvalidKYC", _invalidCandidate) +} + +// VoteInvalidKYC is a paid mutator transaction binding the contract method 0xf2ee3c7d. +// +// Solidity: function voteInvalidKYC(_invalidCandidate address) returns() +func (_XDCValidator *XDCValidatorSession) VoteInvalidKYC(_invalidCandidate common.Address) (*types.Transaction, error) { + return _XDCValidator.Contract.VoteInvalidKYC(&_XDCValidator.TransactOpts, _invalidCandidate) +} + +// VoteInvalidKYC is a paid mutator transaction binding the contract method 0xf2ee3c7d. +// +// Solidity: function voteInvalidKYC(_invalidCandidate address) returns() +func (_XDCValidator *XDCValidatorTransactorSession) VoteInvalidKYC(_invalidCandidate common.Address) (*types.Transaction, error) { + return _XDCValidator.Contract.VoteInvalidKYC(&_XDCValidator.TransactOpts, _invalidCandidate) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x441a3e70. +// +// Solidity: function withdraw(_blockNumber uint256, _index uint256) returns() +func (_XDCValidator *XDCValidatorTransactor) Withdraw(opts *bind.TransactOpts, _blockNumber *big.Int, _index *big.Int) (*types.Transaction, error) { + return _XDCValidator.contract.Transact(opts, "withdraw", _blockNumber, _index) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x441a3e70. +// +// Solidity: function withdraw(_blockNumber uint256, _index uint256) returns() +func (_XDCValidator *XDCValidatorSession) Withdraw(_blockNumber *big.Int, _index *big.Int) (*types.Transaction, error) { + return _XDCValidator.Contract.Withdraw(&_XDCValidator.TransactOpts, _blockNumber, _index) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x441a3e70. +// +// Solidity: function withdraw(_blockNumber uint256, _index uint256) returns() +func (_XDCValidator *XDCValidatorTransactorSession) Withdraw(_blockNumber *big.Int, _index *big.Int) (*types.Transaction, error) { + return _XDCValidator.Contract.Withdraw(&_XDCValidator.TransactOpts, _blockNumber, _index) +} + +// XDCValidatorInvalidatedNodeIterator is returned from FilterInvalidatedNode and is used to iterate over the raw logs and unpacked data for InvalidatedNode events raised by the XDCValidator contract. +type XDCValidatorInvalidatedNodeIterator struct { + Event *XDCValidatorInvalidatedNode // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *XDCValidatorInvalidatedNodeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(XDCValidatorInvalidatedNode) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(XDCValidatorInvalidatedNode) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *XDCValidatorInvalidatedNodeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *XDCValidatorInvalidatedNodeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// XDCValidatorInvalidatedNode represents a InvalidatedNode event raised by the XDCValidator contract. +type XDCValidatorInvalidatedNode struct { + MasternodeOwner common.Address + Masternodes []common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInvalidatedNode is a free log retrieval operation binding the contract event 0xe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e. +// +// Solidity: event InvalidatedNode(_masternodeOwner address, _masternodes address[]) +func (_XDCValidator *XDCValidatorFilterer) FilterInvalidatedNode(opts *bind.FilterOpts) (*XDCValidatorInvalidatedNodeIterator, error) { + + logs, sub, err := _XDCValidator.contract.FilterLogs(opts, "InvalidatedNode") + if err != nil { + return nil, err + } + return &XDCValidatorInvalidatedNodeIterator{contract: _XDCValidator.contract, event: "InvalidatedNode", logs: logs, sub: sub}, nil +} + +// WatchInvalidatedNode is a free log subscription operation binding the contract event 0xe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e. +// +// Solidity: event InvalidatedNode(_masternodeOwner address, _masternodes address[]) +func (_XDCValidator *XDCValidatorFilterer) WatchInvalidatedNode(opts *bind.WatchOpts, sink chan<- *XDCValidatorInvalidatedNode) (event.Subscription, error) { + + logs, sub, err := _XDCValidator.contract.WatchLogs(opts, "InvalidatedNode") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(XDCValidatorInvalidatedNode) + if err := _XDCValidator.contract.UnpackLog(event, "InvalidatedNode", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// XDCValidatorProposeIterator is returned from FilterPropose and is used to iterate over the raw logs and unpacked data for Propose events raised by the XDCValidator contract. +type XDCValidatorProposeIterator struct { + Event *XDCValidatorPropose // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *XDCValidatorProposeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(XDCValidatorPropose) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(XDCValidatorPropose) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *XDCValidatorProposeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *XDCValidatorProposeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// XDCValidatorPropose represents a Propose event raised by the XDCValidator contract. +type XDCValidatorPropose struct { + Owner common.Address + Candidate common.Address + Cap *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterPropose is a free log retrieval operation binding the contract event 0x7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c1. +// +// Solidity: event Propose(_owner address, _candidate address, _cap uint256) +func (_XDCValidator *XDCValidatorFilterer) FilterPropose(opts *bind.FilterOpts) (*XDCValidatorProposeIterator, error) { + + logs, sub, err := _XDCValidator.contract.FilterLogs(opts, "Propose") + if err != nil { + return nil, err + } + return &XDCValidatorProposeIterator{contract: _XDCValidator.contract, event: "Propose", logs: logs, sub: sub}, nil +} + +// WatchPropose is a free log subscription operation binding the contract event 0x7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c1. +// +// Solidity: event Propose(_owner address, _candidate address, _cap uint256) +func (_XDCValidator *XDCValidatorFilterer) WatchPropose(opts *bind.WatchOpts, sink chan<- *XDCValidatorPropose) (event.Subscription, error) { + + logs, sub, err := _XDCValidator.contract.WatchLogs(opts, "Propose") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(XDCValidatorPropose) + if err := _XDCValidator.contract.UnpackLog(event, "Propose", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// XDCValidatorResignIterator is returned from FilterResign and is used to iterate over the raw logs and unpacked data for Resign events raised by the XDCValidator contract. +type XDCValidatorResignIterator struct { + Event *XDCValidatorResign // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *XDCValidatorResignIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(XDCValidatorResign) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(XDCValidatorResign) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *XDCValidatorResignIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *XDCValidatorResignIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// XDCValidatorResign represents a Resign event raised by the XDCValidator contract. +type XDCValidatorResign struct { + Owner common.Address + Candidate common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterResign is a free log retrieval operation binding the contract event 0x4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d3. +// +// Solidity: event Resign(_owner address, _candidate address) +func (_XDCValidator *XDCValidatorFilterer) FilterResign(opts *bind.FilterOpts) (*XDCValidatorResignIterator, error) { + + logs, sub, err := _XDCValidator.contract.FilterLogs(opts, "Resign") + if err != nil { + return nil, err + } + return &XDCValidatorResignIterator{contract: _XDCValidator.contract, event: "Resign", logs: logs, sub: sub}, nil +} + +// WatchResign is a free log subscription operation binding the contract event 0x4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d3. +// +// Solidity: event Resign(_owner address, _candidate address) +func (_XDCValidator *XDCValidatorFilterer) WatchResign(opts *bind.WatchOpts, sink chan<- *XDCValidatorResign) (event.Subscription, error) { + + logs, sub, err := _XDCValidator.contract.WatchLogs(opts, "Resign") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(XDCValidatorResign) + if err := _XDCValidator.contract.UnpackLog(event, "Resign", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// XDCValidatorUnvoteIterator is returned from FilterUnvote and is used to iterate over the raw logs and unpacked data for Unvote events raised by the XDCValidator contract. +type XDCValidatorUnvoteIterator struct { + Event *XDCValidatorUnvote // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *XDCValidatorUnvoteIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(XDCValidatorUnvote) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(XDCValidatorUnvote) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *XDCValidatorUnvoteIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *XDCValidatorUnvoteIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// XDCValidatorUnvote represents a Unvote event raised by the XDCValidator contract. +type XDCValidatorUnvote struct { + Voter common.Address + Candidate common.Address + Cap *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnvote is a free log retrieval operation binding the contract event 0xaa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa2. +// +// Solidity: event Unvote(_voter address, _candidate address, _cap uint256) +func (_XDCValidator *XDCValidatorFilterer) FilterUnvote(opts *bind.FilterOpts) (*XDCValidatorUnvoteIterator, error) { + + logs, sub, err := _XDCValidator.contract.FilterLogs(opts, "Unvote") + if err != nil { + return nil, err + } + return &XDCValidatorUnvoteIterator{contract: _XDCValidator.contract, event: "Unvote", logs: logs, sub: sub}, nil +} + +// WatchUnvote is a free log subscription operation binding the contract event 0xaa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa2. +// +// Solidity: event Unvote(_voter address, _candidate address, _cap uint256) +func (_XDCValidator *XDCValidatorFilterer) WatchUnvote(opts *bind.WatchOpts, sink chan<- *XDCValidatorUnvote) (event.Subscription, error) { + + logs, sub, err := _XDCValidator.contract.WatchLogs(opts, "Unvote") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(XDCValidatorUnvote) + if err := _XDCValidator.contract.UnpackLog(event, "Unvote", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// XDCValidatorUploadedKYCIterator is returned from FilterUploadedKYC and is used to iterate over the raw logs and unpacked data for UploadedKYC events raised by the XDCValidator contract. +type XDCValidatorUploadedKYCIterator struct { + Event *XDCValidatorUploadedKYC // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *XDCValidatorUploadedKYCIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(XDCValidatorUploadedKYC) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(XDCValidatorUploadedKYC) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *XDCValidatorUploadedKYCIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *XDCValidatorUploadedKYCIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// XDCValidatorUploadedKYC represents a UploadedKYC event raised by the XDCValidator contract. +type XDCValidatorUploadedKYC struct { + Owner common.Address + KycHash string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUploadedKYC is a free log retrieval operation binding the contract event 0x949360d814b28a3b393a68909efe1fee120ee09cac30f360a0f80ab5415a611a. +// +// Solidity: event UploadedKYC(_owner address, kycHash string) +func (_XDCValidator *XDCValidatorFilterer) FilterUploadedKYC(opts *bind.FilterOpts) (*XDCValidatorUploadedKYCIterator, error) { + + logs, sub, err := _XDCValidator.contract.FilterLogs(opts, "UploadedKYC") + if err != nil { + return nil, err + } + return &XDCValidatorUploadedKYCIterator{contract: _XDCValidator.contract, event: "UploadedKYC", logs: logs, sub: sub}, nil +} + +// WatchUploadedKYC is a free log subscription operation binding the contract event 0x949360d814b28a3b393a68909efe1fee120ee09cac30f360a0f80ab5415a611a. +// +// Solidity: event UploadedKYC(_owner address, kycHash string) +func (_XDCValidator *XDCValidatorFilterer) WatchUploadedKYC(opts *bind.WatchOpts, sink chan<- *XDCValidatorUploadedKYC) (event.Subscription, error) { + + logs, sub, err := _XDCValidator.contract.WatchLogs(opts, "UploadedKYC") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(XDCValidatorUploadedKYC) + if err := _XDCValidator.contract.UnpackLog(event, "UploadedKYC", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// XDCValidatorVoteIterator is returned from FilterVote and is used to iterate over the raw logs and unpacked data for Vote events raised by the XDCValidator contract. +type XDCValidatorVoteIterator struct { + Event *XDCValidatorVote // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *XDCValidatorVoteIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(XDCValidatorVote) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(XDCValidatorVote) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *XDCValidatorVoteIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *XDCValidatorVoteIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// XDCValidatorVote represents a Vote event raised by the XDCValidator contract. +type XDCValidatorVote struct { + Voter common.Address + Candidate common.Address + Cap *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterVote is a free log retrieval operation binding the contract event 0x66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc. +// +// Solidity: event Vote(_voter address, _candidate address, _cap uint256) +func (_XDCValidator *XDCValidatorFilterer) FilterVote(opts *bind.FilterOpts) (*XDCValidatorVoteIterator, error) { + + logs, sub, err := _XDCValidator.contract.FilterLogs(opts, "Vote") + if err != nil { + return nil, err + } + return &XDCValidatorVoteIterator{contract: _XDCValidator.contract, event: "Vote", logs: logs, sub: sub}, nil +} + +// WatchVote is a free log subscription operation binding the contract event 0x66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc. +// +// Solidity: event Vote(_voter address, _candidate address, _cap uint256) +func (_XDCValidator *XDCValidatorFilterer) WatchVote(opts *bind.WatchOpts, sink chan<- *XDCValidatorVote) (event.Subscription, error) { + + logs, sub, err := _XDCValidator.contract.WatchLogs(opts, "Vote") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(XDCValidatorVote) + if err := _XDCValidator.contract.UnpackLog(event, "Vote", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// XDCValidatorWithdrawIterator is returned from FilterWithdraw and is used to iterate over the raw logs and unpacked data for Withdraw events raised by the XDCValidator contract. +type XDCValidatorWithdrawIterator struct { + Event *XDCValidatorWithdraw // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *XDCValidatorWithdrawIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(XDCValidatorWithdraw) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(XDCValidatorWithdraw) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *XDCValidatorWithdrawIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *XDCValidatorWithdrawIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// XDCValidatorWithdraw represents a Withdraw event raised by the XDCValidator contract. +type XDCValidatorWithdraw struct { + Owner common.Address + BlockNumber *big.Int + Cap *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdraw is a free log retrieval operation binding the contract event 0xf279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568. +// +// Solidity: event Withdraw(_owner address, _blockNumber uint256, _cap uint256) +func (_XDCValidator *XDCValidatorFilterer) FilterWithdraw(opts *bind.FilterOpts) (*XDCValidatorWithdrawIterator, error) { + + logs, sub, err := _XDCValidator.contract.FilterLogs(opts, "Withdraw") + if err != nil { + return nil, err + } + return &XDCValidatorWithdrawIterator{contract: _XDCValidator.contract, event: "Withdraw", logs: logs, sub: sub}, nil +} + +// WatchWithdraw is a free log subscription operation binding the contract event 0xf279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568. +// +// Solidity: event Withdraw(_owner address, _blockNumber uint256, _cap uint256) +func (_XDCValidator *XDCValidatorFilterer) WatchWithdraw(opts *bind.WatchOpts, sink chan<- *XDCValidatorWithdraw) (event.Subscription, error) { + + logs, sub, err := _XDCValidator.contract.WatchLogs(opts, "Withdraw") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(XDCValidatorWithdraw) + if err := _XDCValidator.contract.UnpackLog(event, "Withdraw", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} diff --git a/docker/XDPoSChain/entrypoint.sh b/docker/XDPoSChain/entrypoint.sh new file mode 100755 index 0000000000..d080d1fb79 --- /dev/null +++ b/docker/XDPoSChain/entrypoint.sh @@ -0,0 +1,196 @@ +#!/bin/sh + +# vars from docker env +# - IDENTITY (default to empty) +# - PASSWORD (default to empty) +# - PRIVATE_KEY (default to empty) +# - BOOTNODES (default to empty) +# - EXTIP (default to empty) +# - VERBOSITY (default to 3) +# - MAXPEERS (default to 25) +# - SYNC_MODE (default to 'full') +# - NETWORK_ID (default to '89') +# - WS_SECRET (default to empty) +# - NETSTATS_HOST (default to 'netstats-server:3000') +# - NETSTATS_PORT (default to 'netstats-server:3000') + +# constants +DATA_DIR="data" +KEYSTORE_DIR="keystore" + +# variables +genesisPath="" +params="" +accountsCount=$( + XDC account list --datadir $DATA_DIR --keystore $KEYSTORE_DIR \ + 2> /dev/null \ + | wc -l +) + +# file to env +for env in IDENTITY PASSWORD PRIVATE_KEY BOOTNODES WS_SECRET NETSTATS_HOST \ + NETSTATS_PORT EXTIP SYNC_MODE NETWORK_ID ANNOUNCE_TXS STORE_REWARD DEBUG_MODE MAXPEERS; do + file=$(eval echo "\$${env}_FILE") + if [[ -f $file ]] && [[ ! -z $file ]]; then + echo "Replacing $env by $file" + export $env=$(cat $file) + elif [[ "$env" == "BOOTNODES" ]] && [[ ! -z $file ]]; then + echo "Bootnodes file is not available. Waiting for it to be provisioned..." + while true ; do + if [[ -f $file ]] && [[ $(grep -e enode $file) ]]; then + echo "Fount bootnode file." + break + fi + echo "Still no bootnodes file, sleeping..." + sleep 5 + done + export $env=$(cat $file) + fi +done + +# networkid +if [[ ! -z $NETWORK_ID ]]; then + case $NETWORK_ID in + 88 ) + genesisPath="mainnet.json" + ;; + 89 ) + genesisPath="testnet.json" + params="$params --apothem --gcmode archive --http-api db,eth,net,web3,debug,XDPoS" + ;; + 90 ) + genesisPath="devnet.json" + ;; + * ) + echo "network id not supported" + ;; + esac + params="$params --networkid $NETWORK_ID" +fi + +# custom genesis path +if [[ ! -z $GENESIS_PATH ]]; then + genesisPath="$GENESIS_PATH" +fi + +# data dir +if [[ ! -d $DATA_DIR/XDC ]]; then + echo "No blockchain data, creating genesis block." + XDC init $genesisPath --datadir $DATA_DIR 2> /dev/null +fi + +# identity +if [[ -z $IDENTITY ]]; then + IDENTITY="unnamed_$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6)" +fi + +# password file +if [[ ! -f ./password ]]; then + if [[ ! -z $PASSWORD ]]; then + echo "Password env is set. Writing into file." + echo "$PASSWORD" > ./password + else + echo "No password set (or empty), generating a new one" + $(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32} > password) + fi +fi + +# private key +if [[ $accountsCount -le 0 ]]; then + echo "No accounts found" + if [[ ! -z $PRIVATE_KEY ]]; then + echo "Creating account from private key" + echo "$PRIVATE_KEY" > ./private_key + XDC account import ./private_key \ + --datadir $DATA_DIR \ + --keystore $KEYSTORE_DIR \ + --password ./password + rm ./private_key + else + echo "Creating new account" + XDC account new \ + --datadir $DATA_DIR \ + --keystore $KEYSTORE_DIR \ + --password ./password + fi +fi +account=$( + XDC account list --datadir $DATA_DIR --keystore $KEYSTORE_DIR \ + 2> /dev/null \ + | head -n 1 \ + | cut -d"{" -f 2 | cut -d"}" -f 1 +) +echo "Using account $account" +params="$params --unlock $account" + +# bootnodes +if [[ ! -z $BOOTNODES ]]; then + params="$params --bootnodes $BOOTNODES" +fi + +# extip +if [[ ! -z $EXTIP ]]; then + params="$params --nat extip:${EXTIP}" +fi + +# syncmode +if [[ ! -z $SYNC_MODE ]]; then + params="$params --syncmode ${SYNC_MODE}" +fi + +# netstats +if [[ ! -z $WS_SECRET ]]; then + echo "Will report to netstats server ${NETSTATS_HOST}:${NETSTATS_PORT}" + params="$params --ethstats ${IDENTITY}:${WS_SECRET}@${NETSTATS_HOST}:${NETSTATS_PORT}" +else + echo "WS_SECRET not set, will not report to netstats server." +fi + +# annonce txs +if [[ ! -z $ANNOUNCE_TXS ]]; then + params="$params --announce-txs" +fi + +# store reward +if [[ ! -z $STORE_REWARD ]]; then + params="$params --store-reward" +fi + +# debug mode +if [[ ! -z $DEBUG_MODE ]]; then + params="$params --gcmode archive --http-api db,eth,net,web3,debug,XDPoS" +fi + +# maxpeers +if [[ -z $MAXPEERS ]]; then + MAXPEERS=25 +fi + +# dump +echo "dump: $IDENTITY $account $BOOTNODES" + +set -x + +exec XDC $params \ + --verbosity $VERBOSITY \ + --datadir $DATA_DIR \ + --keystore $KEYSTORE_DIR \ + --identity $IDENTITY \ + --maxpeers $MAXPEERS \ + --password ./password \ + --port 30303 \ + --txpool-globalqueue 5000 \ + --txpool-globalslots 5000 \ + --http \ + --http-corsdomain "*" \ + --http-addr 0.0.0.0 \ + --http-port 8545 \ + --http-vhosts "*" \ + --ws \ + --ws-addr 0.0.0.0 \ + --ws-port 8546 \ + --ws-origins "*" \ + --mine \ + --gasprice "250000000" \ + --miner-gaslimit "84000000" \ + "$@" diff --git a/docker/bootnode/bootnodes/bootnodes b/docker/bootnode/bootnodes/bootnodes new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docker/bootnode/entrypoint.sh b/docker/bootnode/entrypoint.sh new file mode 100755 index 0000000000..e5f8ef40d8 --- /dev/null +++ b/docker/bootnode/entrypoint.sh @@ -0,0 +1,24 @@ +#!/bin/sh -x + +# file to env +for env in PRIVATE_KEY; do + file=$(eval echo "\$${env}_FILE") + if [[ -f $file ]] && [[ ! -z $file ]]; then + echo "Replacing $env by $file" + export $env=$(cat $file) + fi +done + +# private key +if [[ ! -z "$PRIVATE_KEY" ]]; then + echo "$PRIVATE_KEY" > bootnode.key +elif [[ ! -f ./bootnode.key ]]; then + bootnode -genkey bootnode.key +fi + +# dump address +address="enode://$(bootnode -nodekey bootnode.key -writeaddress)@[$(hostname -i)]:30301" + +echo "$address" > ./bootnodes/bootnodes + +exec bootnode "$@" diff --git a/eth/hooks/hooks.go b/eth/hooks/hooks.go new file mode 100644 index 0000000000..c6249a411d --- /dev/null +++ b/eth/hooks/hooks.go @@ -0,0 +1,36 @@ +// Package hooks provides consensus hooks for XDPoS engine integration +// Note: The full hook implementations (engine_v1_hooks.go, engine_v2_hooks.go) +// require the complete XDPoS engine with EngineV1/EngineV2 support. +// These stubs are provided for compatibility. + +package hooks + +import ( + "github.com/ethereum/go-ethereum/consensus/XDPoS" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/params" +) + +// AttachConsensusV1Hooks attaches V1 consensus hooks to XDPoS engine +// Note: This is a stub - full implementation requires EngineV1 support +func AttachConsensusV1Hooks(adaptor *XDPoS.XDPoS, bc *core.BlockChain, chainConfig *params.ChainConfig) { + // V1 hooks are not implemented in this simplified version + // Full implementation would hook into: + // - HookPenalty: Scan for bad masternodes + // - HookPenaltyTIPSigning: Handle TIP signing penalties + // - HookValidator: Prepare validators at checkpoint + // - HookVerifyMNs: Verify masternode set + // - HookGetSignersFromContract: Get signers from contract + // - HookReward: Calculate masternode rewards +} + +// AttachConsensusV2Hooks attaches V2 consensus hooks to XDPoS engine +// Note: This is a stub - full implementation requires EngineV2 support +func AttachConsensusV2Hooks(adaptor *XDPoS.XDPoS, bc *core.BlockChain, chainConfig *params.ChainConfig) { + // V2 hooks are not implemented in this simplified version + // Full implementation would hook into: + // - HookPenalty: V2 penalty handling + // - HookValidator: V2 validator preparation + // - HookVerifyMNs: V2 masternode verification + // - HookReward: V2 reward calculation +} diff --git a/eth/util/util.go b/eth/util/util.go new file mode 100644 index 0000000000..8fab137ee1 --- /dev/null +++ b/eth/util/util.go @@ -0,0 +1,53 @@ +package util + +import ( + "math/big" + + "github.com/ethereum/go-ethereum/consensus" +) + +// RewardInflation calculates reward inflation based on block number and blocks per year +func RewardInflation(chain consensus.ChainReader, chainReward *big.Int, number uint64, blockPerYear uint64) *big.Int { + // Check if halving should be disabled (for newer chains) + // For now, use the halving schedule + if blockPerYear*2 <= number && number < blockPerYear*5 { + chainReward.Div(chainReward, new(big.Int).SetUint64(2)) + } + if blockPerYear*5 <= number { + chainReward.Div(chainReward, new(big.Int).SetUint64(4)) + } + + return chainReward +} + +// RewardHalving computes the reward for Masternode/Protector/Observer based on epoch total reward, supply after halving is enabled, and epoch after halving is enabled +// The sequence is a geometric sequence in order to make supply be limited +func RewardHalving(epochRewardSingle *big.Int, epochRewardTotal *big.Int, halvingSupply *big.Int, epochSinceHalving uint64) *big.Int { + rt := new(big.Float).SetInt(epochRewardTotal) + hs := new(big.Float).SetInt(halvingSupply) + // zero cause Quo panic so return early + // or epoch reward > halving supply, return early + if halvingSupply.BitLen() == 0 || epochRewardTotal.Cmp(halvingSupply) > 0 { + return big.NewInt(0) + } + quo := new(big.Float).Quo(rt, hs) + // base = 1- reward/supply + base := new(big.Float).Sub(big.NewFloat(1), quo) + r := new(big.Float).SetInt(epochRewardSingle) + result := new(big.Float).Mul(r, FloatPower(base, epochSinceHalving)) + resultInt, _ := result.Int(nil) + return resultInt +} + +// FloatPower calculates base^exp for big.Float +func FloatPower(base *big.Float, exp uint64) *big.Float { + result := big.NewFloat(1) + for exp > 0 { + if exp%2 == 1 { + result.Mul(result, base) + } + base.Mul(base, base) + exp >>= 1 // same as: exp = exp / 2 + } + return result +} diff --git a/genesis/XDCxnet.json b/genesis/XDCxnet.json new file mode 100644 index 0000000000..0589ae198b --- /dev/null +++ b/genesis/XDCxnet.json @@ -0,0 +1,208 @@ +{ + "config": { + "chainId": 99, + "homesteadBlock": 1, + "eip150Block": 2, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 3, + "eip158Block": 3, + "byzantiumBlock": 4, + "XDPoS": { + "period": 2, + "epoch": 900, + "reward": 250, + "rewardCheckpoint": 30, + "gap": 10, + "foudationWalletAddr": "0x0000000000000000000000000000000000000068" + } + }, + "nonce": "0x0", + "timestamp": "0x5d1ae350", + "extraData": "0x000000000000000000000000000000000000000000000000000000000000000031b249fe6f267aa2396eb2dc36e9c79351d97ec5c1fb51153703188faebc7c0981a4036456041290cc53324be54915f32521abb5a3648bf811abbc8ae1fa8074d5fef05e7e33fb189dffcd89b1a8ba60f99805b536609cc03acbb2604dfac11e9e54a448fc5571921c6d3672e13b58ea23dea534f2b35fa00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x47b760", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "0000000000000000000000000000000000000000": { + "balance": "0x0" + }, + "0000000000000000000000000000000000000001": { + "balance": "0x0" + }, + "0000000000000000000000000000000000000068": { + "balance": "0xd3c21bcecceda10000000" + }, + "0000000000000000000000000000000000000088": { + "code": "0x6060604052600436106101115763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301267951811461011657806302aa9be21461012c57806306a49fce1461014e57806315febd68146101b45780632d15cc04146101dc5780632f9c4bba146101fb578063302b68721461020e5780633477ee2e14610233578063441a3e701461026557806358e7525f1461027e5780636dd7d8ea1461029d578063a9a981a3146102b1578063a9ff959e146102c4578063ae6e43f5146102d7578063b642facd146102f6578063d09f1ab414610315578063d161c76714610328578063d51b9e931461033b578063d55b7dff1461036e578063f8ac9dd514610381575b600080fd5b61012a600160a060020a0360043516610394565b005b341561013757600080fd5b61012a600160a060020a0360043516602435610616565b341561015957600080fd5b610161610849565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156101a0578082015183820152602001610188565b505050509050019250505060405180910390f35b34156101bf57600080fd5b6101ca6004356108b2565b60405190815260200160405180910390f35b34156101e757600080fd5b610161600160a060020a03600435166108d6565b341561020657600080fd5b610161610963565b341561021957600080fd5b6101ca600160a060020a03600435811690602435166109e5565b341561023e57600080fd5b610249600435610a14565b604051600160a060020a03909116815260200160405180910390f35b341561027057600080fd5b61012a600435602435610a3c565b341561028957600080fd5b6101ca600160a060020a0360043516610ba3565b61012a600160a060020a0360043516610bc2565b34156102bc57600080fd5b6101ca610d7f565b34156102cf57600080fd5b6101ca610d85565b34156102e257600080fd5b61012a600160a060020a0360043516610d8b565b341561030157600080fd5b610249600160a060020a0360043516611022565b341561032057600080fd5b6101ca611040565b341561033357600080fd5b6101ca611046565b341561034657600080fd5b61035a600160a060020a036004351661104c565b604051901515815260200160405180910390f35b341561037957600080fd5b6101ca611071565b341561038c57600080fd5b6101ca611077565b6005546000903410156103a657600080fd5b600160a060020a038216600090815260016020526040902054829060a060020a900460ff16156103d557600080fd5b600160a060020a03831660009081526001602081905260409091200154610402903463ffffffff61107d16565b91506003805480600101828161041891906110a5565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03851617905560606040519081016040908152600160a060020a0333811683526001602080850182905283850187905291871660009081529152208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03919091161781556020820151815490151560a060020a0274ff0000000000000000000000000000000000000000199091161781556040820151600191820155600160a060020a03808616600090815260209283526040808220339093168252600290920190925290205461051d91503463ffffffff61107d16565b600160a060020a038085166000908152600160208181526040808420339095168452600290940190529190209190915560045461055f9163ffffffff61107d16565b600455600160a060020a038316600090815260026020526040902080546001810161058a83826110a5565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a038116919091179091557f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c1908434604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a1505050565b600160a060020a0380831660009081526001602090815260408083203390941683526002909301905290812054839083908190101561065457600080fd5b600160a060020a03828116600090815260016020526040902054338216911614156106c257600554600160a060020a0380841660009081526001602090815260408083203390941683526002909301905220546106b7908363ffffffff61109316565b10156106c257600080fd5b600160a060020a038516600090815260016020819052604090912001546106ef908563ffffffff61109316565b600160a060020a038087166000908152600160208181526040808420928301959095553390931682526002019091522054610730908563ffffffff61109316565b600160a060020a03808716600090815260016020908152604080832033909416835260029093019052205560095461076e904363ffffffff61107d16565b600160a060020a0333166000908152602081815260408083208484529091529020549093506107a3908563ffffffff61107d16565b600160a060020a03331660008181526020818152604080832088845280835290832094909455918152905260019081018054909181016107e383826110a5565b5060009182526020909120018390557faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa2338686604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15050505050565b6108516110ce565b60038054806020026020016040519081016040528092919081815260200182805480156108a757602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610889575b505050505090505b90565b33600160a060020a0316600090815260208181526040808320938352929052205490565b6108de6110ce565b6002600083600160a060020a0316600160a060020a0316815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561095757602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610939575b50505050509050919050565b61096b6110ce565b60008033600160a060020a0316600160a060020a031681526020019081526020016000206001018054806020026020016040519081016040528092919081815260200182805480156108a757602002820191906000526020600020905b8154815260200190600101908083116109c8575050505050905090565b600160a060020a0391821660009081526001602090815260408083209390941682526002909201909152205490565b6003805482908110610a2257fe5b600091825260209091200154600160a060020a0316905081565b60008282828211610a4c57600080fd5b4382901015610a5a57600080fd5b600160a060020a03331660009081526020818152604080832085845290915281205411610a8657600080fd5b600160a060020a0333166000908152602081905260409020600101805483919083908110610ab057fe5b60009182526020909120015414610ac657600080fd5b600160a060020a03331660008181526020818152604080832089845280835290832080549084905593835291905260010180549194509085908110610b0757fe5b6000918252602082200155600160a060020a03331683156108fc0284604051600060405180830381858888f193505050501515610b4357600080fd5b7ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5683386856040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a15050505050565b600160a060020a03166000908152600160208190526040909120015490565b600654341015610bd157600080fd5b600160a060020a038116600090815260016020526040902054819060a060020a900460ff161515610c0157600080fd5b600160a060020a03821660009081526001602081905260409091200154610c2e903463ffffffff61107d16565b600160a060020a0380841660009081526001602081815260408084209283019590955533909316825260020190915220541515610cc057600160a060020a0382166000908152600260205260409020805460018101610c8d83826110a5565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff191633600160a060020a03161790555b600160a060020a038083166000908152600160209081526040808320339094168352600290930190522054610cfb903463ffffffff61107d16565b600160a060020a03808416600090815260016020908152604080832033948516845260020190915290819020929092557f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc918490349051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15050565b60045481565b60095481565b600160a060020a038181166000908152600160205260408120549091829182918591338216911614610dbc57600080fd5b600160a060020a038516600090815260016020526040902054859060a060020a900460ff161515610dec57600080fd5b600160a060020a0386166000908152600160208190526040909120805474ff000000000000000000000000000000000000000019169055600454610e359163ffffffff61109316565b600455600094505b600354851015610ebf5785600160a060020a0316600386815481101515610e6057fe5b600091825260209091200154600160a060020a03161415610eb4576003805486908110610e8957fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff19169055610ebf565b600190940193610e3d565b600160a060020a03808716600081815260016020818152604080842033909616845260028601825283205493909252908190529190910154909450610f0a908563ffffffff61109316565b600160a060020a0380881660009081526001602081815260408084209283019590955533909316825260020190915290812055600854610f50904363ffffffff61107d16565b600160a060020a033316600090815260208181526040808320848452909152902054909350610f85908563ffffffff61107d16565b600160a060020a0333166000818152602081815260408083208884528083529083209490945591815290526001908101805490918101610fc583826110a5565b5060009182526020909120018390557f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d33387604051600160a060020a039283168152911660208201526040908101905180910390a1505050505050565b600160a060020a039081166000908152600160205260409020541690565b60075481565b60085481565b600160a060020a031660009081526001602052604090205460a060020a900460ff1690565b60055481565b60065481565b60008282018381101561108c57fe5b9392505050565b60008282111561109f57fe5b50900390565b8154818355818115116110c9576000838152602090206110c99181019083016110e0565b505050565b60206040519081016040526000815290565b6108af91905b808211156110fa57600081556001016110e6565b50905600a165627a7a72305820555de7c5131842a4fccb258fccd95ae1539019bb744b4253893b37fed1b3d8e90029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000006", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000006", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000000000000000000008ac7230489e80000", + "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000096", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x000000000000000000000000000000000000000000000000000000000013c680", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000015180", + "0x026993bba202119b8a8475bf9f364d83622f52af5ac4adbfb65ae8a937a51888": "0x000000000000000000000001487d62d33467c4842c5e54eb370837e4e88bba0f", + "0x026993bba202119b8a8475bf9f364d83622f52af5ac4adbfb65ae8a937a51889": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x02c8f9fcf8c8e9c24ab57213a541d13709892b4c2c4e76fa4801ab0b47a3de93": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x2f492f3d0162ccf543077b97392111a722da3095746e15563ca1c0278a61ca80": "0x000000000000000000000000487d62d33467c4842c5e54eb370837e4e88bba0f", + "0x454d7309b7c605e9c051902073ddda41a8a575bb63133583184cf26707d5ebef": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x479e9a968bc60fcb858c1ae081e9b0526f79a57fac882f9e0e31b987d7c150a4": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x49a9a5095ffa80943af1180153a119a85c696770198fbb6978d95c35c5115bf3": "0x000000000000000000000001487d62d33467c4842c5e54eb370837e4e88bba0f", + "0x49a9a5095ffa80943af1180153a119a85c696770198fbb6978d95c35c5115bf4": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x649651d0a7a4c293a92b9cd4468065f4ee86af8ec73672e0f5e1ee619441d278": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x89970b0538c9c118cf09441e16a6817c276586c44f11225a89993ed0e4c90974": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x9a13581db7a1f7f76e59ef1a233790f63fbf572e16e9606240951c689851e526": "0x000000000000000000000000487d62d33467c4842c5e54eb370837e4e88bba0f", + "0xa6f8841c2a332a93df4ea59f6666ff29dcb9d2ef767b3048364c5a957bee4615": "0x000000000000000000000001487d62d33467c4842c5e54eb370837e4e88bba0f", + "0xa6f8841c2a332a93df4ea59f6666ff29dcb9d2ef767b3048364c5a957bee4616": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xa93d6b4d95ea11483b1dacea74dcd49c1f468a4d903098c5a7778cbfa16d3e82": "0x000000000000000000000000487d62d33467c4842c5e54eb370837e4e88bba0f", + "0xa9907cb1f2306f984e2f762c663fa522ed88cb863174e47f093283aa8a10cb91": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xabe8de74f095912ab7d4cdfad144c3648788f7d3916758aecc632fb36c345f6c": "0x000000000000000000000000487d62d33467c4842c5e54eb370837e4e88bba0f", + "0xb45f3ed5c0a6c68562cb23d8e4b5e0aecafed8d20e17e5b52154d40af94ec106": "0x000000000000000000000000487d62d33467c4842c5e54eb370837e4e88bba0f", + "0xbcf7057463997dcd72a546d32bf6d71674f0500d24b06dbe9b4f439976ffabeb": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xbe13c299d2ab6c8f476edb2db4b4e11724f5806662dd0f2bc314827a61815d50": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b": "0x00000000000000000000000031b249fe6f267aa2396eb2dc36e9c79351d97ec5", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c": "0x000000000000000000000000c1fb51153703188faebc7c0981a4036456041290", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85d": "0x000000000000000000000000cc53324be54915f32521abb5a3648bf811abbc8a", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85e": "0x000000000000000000000000e1fa8074d5fef05e7e33fb189dffcd89b1a8ba60", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85f": "0x000000000000000000000000f99805b536609cc03acbb2604dfac11e9e54a448", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f860": "0x000000000000000000000000fc5571921c6d3672e13b58ea23dea534f2b35fa0", + "0xc9ef92b3a11fbab7796865d443badc1742bd9373a12c7437b8416fa2bf1a4eab": "0x000000000000000000000001487d62d33467c4842c5e54eb370837e4e88bba0f", + "0xc9ef92b3a11fbab7796865d443badc1742bd9373a12c7437b8416fa2bf1a4eac": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xe0086ec10170327ab071c250c8b2f6927b5f2b360a345fedc7c50fa4a898c1f5": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xe3909aca1910df9389cc798ae3ad4714f9ca29c5001ca9522e8bfb50b9717746": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xe567220c5c63cb2175e08d26bc3c0e702f3f6c43d6ff26acd157bdaf74150573": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xe9dabded787038ffda12167841517949314f5707279536e33628132da48286ee": "0x000000000000000000000001487d62d33467c4842c5e54eb370837e4e88bba0f", + "0xe9dabded787038ffda12167841517949314f5707279536e33628132da48286ef": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xec578984de09d7a8bf7946136a35864519b0943ece376f32680119b20b861896": "0x000000000000000000000000487d62d33467c4842c5e54eb370837e4e88bba0f", + "0xf9df09e7f7bec28074f250bd606c5c97634337476ab298454fecf041fc1fbab1": "0x000000000000000000000001487d62d33467c4842c5e54eb370837e4e88bba0f", + "0xf9df09e7f7bec28074f250bd606c5c97634337476ab298454fecf041fc1fbab2": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xfdcf00ef27a55e91d9ce6390e76c82d16874bbfcfa749582823363fcfeeedce7": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "balance": "0x3f870857a3e0e3800000" + }, + "0000000000000000000000000000000000000089": { + "code": "0x6060604052600436106100565763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663e341eaa4811461005b578063e7ec6aef14610076578063f4145a83146100df575b600080fd5b341561006657600080fd5b610074600435602435610104565b005b341561008157600080fd5b61008c600435610227565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156100cb5780820151838201526020016100b3565b505050509050019250505060405180910390f35b34156100ea57600080fd5b6100f26102ac565b60405190815260200160405180910390f35b438290101561011257600080fd5b600280546101289184910263ffffffff6102b216565b43111561013457600080fd5b600082815260016020819052604090912080549091810161015583826102c8565b5060009182526020808320919091018390558282528190526040902080546001810161018183826102c8565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff19163373ffffffffffffffffffffffffffffffffffffffff8116919091179091557f62855fa22e051687c32ac285857751f6d3f2c100c72756d8d30cb7ecb1f64f5490838360405173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091526040808301919091526060909101905180910390a15050565b61022f6102f1565b600082815260208181526040918290208054909290918281020190519081016040528092919081815260200182805480156102a057602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610275575b50505050509050919050565b60025481565b6000828201838110156102c157fe5b9392505050565b8154818355818115116102ec576000838152602090206102ec918101908301610303565b505050565b60206040519081016040526000815290565b61032191905b8082111561031d5760008155600101610309565b5090565b905600a165627a7a72305820a8ceddaea8e4ae00991e2ae81c8c88e160dd8770f255523282c24c2df4c30ec70029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000384" + }, + "balance": "0x0" + }, + "0000000000000000000000000000000000000090": { + "code": "0x6060604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663284180fc811461006657806334d38600146100d8578063d442d6cc14610129578063e11f5ba21461015a575b600080fd5b341561007157600080fd5b610085600160a060020a0360043516610170565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156100c45780820151838201526020016100ac565b505050509050019250505060405180910390f35b34156100e357600080fd5b61012760046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496506101f395505050505050565b005b341561013457600080fd5b610148600160a060020a0360043516610243565b60405190815260200160405180910390f35b341561016557600080fd5b61012760043561025e565b61017861028e565b60008083600160a060020a0316600160a060020a031681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156101e757602002820191906000526020600020905b815481526001909101906020018083116101d2575b50505050509050919050565b610384430661032081101561020757600080fd5b610352811061021557600080fd5b600160a060020a033316600090815260208190526040902082805161023e9291602001906102a0565b505050565b600160a060020a031660009081526001602052604090205490565b610384430661035281101561027257600080fd5b50600160a060020a033316600090815260016020526040902055565b60206040519081016040526000815290565b8280548282559060005260206000209081019282156102dd579160200282015b828111156102dd57825182556020909201916001909101906102c0565b506102e99291506102ed565b5090565b61030791905b808211156102e957600081556001016102f3565b905600a165627a7a7230582034991c8dc4001fc254f3ba2811c05d2e7d29bee3908946ca56d1545b2c852de20029", + "balance": "0x0" + }, + "0000000000000000000000000000000000000099": { + "code": "0x60606040526004361061011c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c278114610165578063173825d91461019757806320ea8d86146101b65780632f54bf6e146101cc5780633411c81c146101ff57806354741525146102215780637065cb4814610250578063784547a71461026f5780638b51d13f146102855780639ace38c21461029b578063a0e67e2b14610349578063a8abe69a146103af578063b5dc40c3146103d2578063b77bf600146103e8578063ba51a6df146103fb578063c01a8c8414610411578063c642747414610427578063d74f8edd1461048c578063dc8452cd1461049f578063e20056e6146104b2578063ee22610b146104d7575b60003411156101635733600160a060020a03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405190815260200160405180910390a25b005b341561017057600080fd5b61017b6004356104ed565b604051600160a060020a03909116815260200160405180910390f35b34156101a257600080fd5b610163600160a060020a0360043516610515565b34156101c157600080fd5b6101636004356106aa565b34156101d757600080fd5b6101eb600160a060020a0360043516610788565b604051901515815260200160405180910390f35b341561020a57600080fd5b6101eb600435600160a060020a036024351661079d565b341561022c57600080fd5b61023e600435151560243515156107bd565b60405190815260200160405180910390f35b341561025b57600080fd5b610163600160a060020a0360043516610829565b341561027a57600080fd5b6101eb600435610965565b341561029057600080fd5b61023e6004356109e9565b34156102a657600080fd5b6102b1600435610a58565b604051600160a060020a038516815260208101849052811515606082015260806040820181815290820184818151815260200191508051906020019080838360005b8381101561030b5780820151838201526020016102f3565b50505050905090810190601f1680156103385780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b341561035457600080fd5b61035c610b36565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561039b578082015183820152602001610383565b505050509050019250505060405180910390f35b34156103ba57600080fd5b61035c60043560243560443515156064351515610b9f565b34156103dd57600080fd5b61035c600435610cc7565b34156103f357600080fd5b61023e610e2b565b341561040657600080fd5b610163600435610e31565b341561041c57600080fd5b610163600435610ec4565b341561043257600080fd5b61023e60048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610fb295505050505050565b341561049757600080fd5b61023e610fd1565b34156104aa57600080fd5b61023e610fd6565b34156104bd57600080fd5b610163600160a060020a0360043581169060243516610fdc565b34156104e257600080fd5b61016360043561118a565b60038054829081106104fb57fe5b600091825260209091200154600160a060020a0316905081565b600030600160a060020a031633600160a060020a031614151561053757600080fd5b600160a060020a038216600090815260026020526040902054829060ff16151561056057600080fd5b600160a060020a0383166000908152600260205260408120805460ff1916905591505b600354600019018210156106435782600160a060020a03166003838154811015156105aa57fe5b600091825260209091200154600160a060020a03161415610638576003805460001981019081106105d757fe5b60009182526020909120015460038054600160a060020a0390921691849081106105fd57fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055610643565b600190910190610583565b6003805460001901906106569082611442565b50600354600454111561066f5760035461066f90610e31565b82600160a060020a03167f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9060405160405180910390a2505050565b33600160a060020a03811660009081526002602052604090205460ff1615156106d257600080fd5b600082815260016020908152604080832033600160a060020a038116855292529091205483919060ff16151561070757600080fd5b600084815260208190526040902060030154849060ff161561072857600080fd5b6000858152600160209081526040808320600160a060020a033316808552925291829020805460ff1916905586917ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9905160405180910390a35050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b600554811015610822578380156107ea575060008181526020819052604090206003015460ff16155b8061080e575082801561080e575060008181526020819052604090206003015460ff165b1561081a576001820191505b6001016107c1565b5092915050565b30600160a060020a031633600160a060020a031614151561084957600080fd5b600160a060020a038116600090815260026020526040902054819060ff161561087157600080fd5b81600160a060020a038116151561088757600080fd5b600380549050600101600454603282111580156108a45750818111155b80156108af57508015155b80156108ba57508115155b15156108c557600080fd5b600160a060020a0385166000908152600260205260409020805460ff1916600190811790915560038054909181016108fd8382611442565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387169081179091557ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25050505050565b600080805b6003548110156109e2576000848152600160205260408120600380549192918490811061099357fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff16156109c7576001820191505b6004548214156109da57600192506109e2565b60010161096a565b5050919050565b6000805b600354811015610a525760008381526001602052604081206003805491929184908110610a1657fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610a4a576001820191505b6001016109ed565b50919050565b60006020528060005260406000206000915090508060000160009054906101000a9004600160a060020a031690806001015490806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b235780601f10610af857610100808354040283529160200191610b23565b820191906000526020600020905b815481529060010190602001808311610b0657829003601f168201915b5050506003909301549192505060ff1684565b610b3e61146b565b6003805480602002602001604051908101604052809291908181526020018280548015610b9457602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610b76575b505050505090505b90565b610ba761146b565b610baf61146b565b600080600554604051805910610bc25750595b9080825280602002602001820160405250925060009150600090505b600554811015610c5757858015610c07575060008181526020819052604090206003015460ff16155b80610c2b5750848015610c2b575060008181526020819052604090206003015460ff165b15610c4f5780838381518110610c3d57fe5b60209081029091010152600191909101905b600101610bde565b878703604051805910610c675750595b908082528060200260200182016040525093508790505b86811015610cbc57828181518110610c9257fe5b906020019060200201518489830381518110610caa57fe5b60209081029091010152600101610c7e565b505050949350505050565b610ccf61146b565b610cd761146b565b6003546000908190604051805910610cec5750595b9080825280602002602001820160405250925060009150600090505b600354811015610db45760008581526001602052604081206003805491929184908110610d3157fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610dac576003805482908110610d6c57fe5b600091825260209091200154600160a060020a0316838381518110610d8d57fe5b600160a060020a03909216602092830290910190910152600191909101905b600101610d08565b81604051805910610dc25750595b90808252806020026020018201604052509350600090505b81811015610e2357828181518110610dee57fe5b90602001906020020151848281518110610e0457fe5b600160a060020a03909216602092830290910190910152600101610dda565b505050919050565b60055481565b30600160a060020a031633600160a060020a0316141515610e5157600080fd5b6003548160328211801590610e665750818111155b8015610e7157508015155b8015610e7c57508115155b1515610e8757600080fd5b60048390557fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a8360405190815260200160405180910390a1505050565b33600160a060020a03811660009081526002602052604090205460ff161515610eec57600080fd5b6000828152602081905260409020548290600160a060020a03161515610f1157600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff1615610f4557600080fd5b6000858152600160208181526040808420600160a060020a033316808652925292839020805460ff191690921790915586917f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef905160405180910390a3610fab8561118a565b5050505050565b6000610fbf848484611345565b9050610fca81610ec4565b9392505050565b603281565b60045481565b600030600160a060020a031633600160a060020a0316141515610ffe57600080fd5b600160a060020a038316600090815260026020526040902054839060ff16151561102757600080fd5b600160a060020a038316600090815260026020526040902054839060ff161561104f57600080fd5b600092505b6003548310156110e85784600160a060020a031660038481548110151561107757fe5b600091825260209091200154600160a060020a031614156110dd57836003848154811015156110a257fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556110e8565b600190920191611054565b600160a060020a03808616600081815260026020526040808220805460ff199081169091559388168252908190208054909316600117909255907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90905160405180910390a283600160a060020a03167ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25050505050565b33600160a060020a03811660009081526002602052604081205490919060ff1615156111b557600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff1615156111ea57600080fd5b600085815260208190526040902060030154859060ff161561120b57600080fd5b61121486610965565b1561133d576000868152602081905260409081902060038101805460ff19166001908117909155815490820154919750600160a060020a03169160028801905180828054600181600116156101000203166002900480156112b65780601f1061128b576101008083540402835291602001916112b6565b820191906000526020600020905b81548152906001019060200180831161129957829003601f168201915b505091505060006040518083038185875af1925050501561130357857f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7560405160405180910390a261133d565b857f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923660405160405180910390a260038501805460ff191690555b505050505050565b600083600160a060020a038116151561135d57600080fd5b600554915060806040519081016040908152600160a060020a0387168252602080830187905281830186905260006060840181905285815290819052208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015181600101556040820151816002019080516113e892916020019061147d565b506060820151600391909101805460ff191691151591909117905550600580546001019055817fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5160405160405180910390a2509392505050565b815481835581811511611466576000838152602090206114669181019083016114fb565b505050565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106114be57805160ff19168380011785556114eb565b828001600101855582156114eb579182015b828111156114eb5782518255916020019190600101906114d0565b506114f79291506114fb565b5090565b610b9c91905b808211156114f757600081556001016115015600a165627a7a72305820d42d65ce3cd184b1c0e98ae5fe9841a03ddd21c504e98c38f8d89df83b2b6be60029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x02c8f9fcf8c8e9c24ab57213a541d13709892b4c2c4e76fa4801ab0b47a3de93": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b": "0x000000000000000000000000f99805b536609cc03acbb2604dfac11e9e54a448", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c": "0x00000000000000000000000031b249fe6f267aa2396eb2dc36e9c79351d97ec5", + "0xfdcf00ef27a55e91d9ce6390e76c82d16874bbfcfa749582823363fcfeeedce7": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "balance": "0x9ad924559f742a8800000" + }, + "31b249fe6f267aa2396eb2dc36e9c79351d97ec5": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "c1fb51153703188faebc7c0981a4036456041290": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "cc53324be54915f32521abb5a3648bf811abbc8a": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "e1fa8074d5fef05e7e33fb189dffcd89b1a8ba60": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "f99805b536609cc03acbb2604dfac11e9e54a448": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "fc5571921c6d3672e13b58ea23dea534f2b35fa0": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "17F2beD710ba50Ed27aEa52fc4bD7Bda5ED4a037": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "0D3ab14BBaD3D99F4203bd7a11aCB94882050E7e": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "703c4b2bD70c169f5717101CaeE543299Fc946C7": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "b68D825655F2fE14C32558cDf950b45beF18D218": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "8fB1047e874d2e472cd08980FF8383053dd83102": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "9ca1514E3Dc4059C29a1608AE3a3E3fd35900888": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "15e08dE16f534c890828F2a0D935433aF5B3CE0C": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "f7349C253FF7747Df661296E0859c44e974fb52E": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "06605B28aab9835be75ca242a8aE58f2e15F2F45": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "9f6b8fDD3733B099A91B6D70CDC7963ebBbd2684": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "33c2E732ae7dce8B05F37B2ba0CFe14c980c4Dbe": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "16a73f3a64eca79e117258e66dfd7071cc8312a9": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "ac177441ac2237b2f79ecff1b8f6bca39e27ef9f": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "4215250e55984c75bbce8ae639b86a6cad8ec126": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "6b70ca959814866dd5c426d63d47dde9cc6c32d2": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "33df079fe9b9cd7fb23a1085e4eaaa8eb6952cb3": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "3cab8292137804688714670640d19f9d7a60c472": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "9415d953d47c5f155cac9de7b24a756f352eafbf": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "e32d2e7c8e8809e45c8e2332830b48d9e231e3f2": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "f76ddbda664ea47088937e1cf9ff15036714dee3": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "c465ee82440dada9509feb235c7cd7d896acf13c": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "b95bdc136c579dc3fd2b2424a8e925a90228d2c2": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "e36c1842365595D44854eEcd64B11c8115E133EF": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "aaC1959F6F0fb539F653409079Ec4146267B7555": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "726DA688e2e09f01A2e1aB4c10F25B7CEdD4a0f3": { + "balance": "0x0c9f2c9cd04674edea40000000" + }, + "c70f010E8DB8bc436712A93D170C7c27Db1981Ea": { + "balance": "0x0c9f2c9cd04674edea40000000" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" +} diff --git a/genesis/devnet.json b/genesis/devnet.json new file mode 100644 index 0000000000..ee67134682 --- /dev/null +++ b/genesis/devnet.json @@ -0,0 +1,279 @@ +{ + "config": { + "chainId": 551, + "homesteadBlock": 0, + "eip150Block": 0, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "eip1559Block": 32400, + "XDPoS": { + "period": 2, + "epoch": 900, + "reward": 10, + "rewardCheckpoint": 900, + "gap": 450, + "foudationWalletAddr": "0xde5b54e8e7b585153add32f472e8d545e5d42a82", + "SkipV1Validation": false, + "v2": { + "switchBlock": 0, + "config": { + "maxMasternodes": 108, + "switchRound": 0, + "minePeriod": 2, + "timeoutSyncThreshold": 3, + "timeoutPeriod": 10, + "certificateThreshold": 0.667 + }, + "allConfigs": { + "0": { + "maxMasternodes": 108, + "switchRound": 0, + "minePeriod": 2, + "timeoutSyncThreshold": 3, + "timeoutPeriod": 10, + "certificateThreshold": 0.667 + } + }, + "SkipV2Validation": false + } + } + }, + "nonce": "0x0", + "timestamp": "0x6771d3f2", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000311bdf9066246e68559816e7f636435867f824ef442a44a6fc20f5b8dfa8b304d7137581f7e6bef347318441696e9ae962633c16e04d53935272639d537fc89618edae86950e12687a612e15c4786b8473898cc3c5beca5841306b26fdb4e30411392a6a74826141342a4dc33a1045cefa4182b6212ec0317bc30fbeb7208192d1474b5f87ffbc056de43c11888c073313b36cf03cf1f739f39443551ff12bbe8d993351c0e2db739f9bcbfdeda94d73b50b16d3a242960b7ca1937e826bda6c397df74d9f9ab01aa89af636787499e81362e815e36f28763eac120babebf5a6cbe6113780cbe489e3eb0db882381aebaf81190100d82f41ad2c95898195c7a47dc59115bb5ec85408683795da2f604a5c0464868eabfcb6da489a1b4304f49aafaec938c7adc48539470624e1f9c75ce33e568d8fa3ace90497ee0c60dc921eefea93e384a6ccaaf28e33790a2d1b2625bf964dfc087e2622b02b0bb78713e872c02796ef64c8f10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x47b760", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "0000000000000000000000000000000000000000": { + "balance": "0x0" + }, + "0000000000000000000000000000000000000001": { + "balance": "0x0" + }, + "0000000000000000000000000000000000000068": { + "balance": "0xd3c21bcecceda10000000" + }, + "0000000000000000000000000000000000000088": { + "code": "0x606060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063012679511461019b578063025e7c27146101c957806302aa9be21461022c57806306a49fce1461026e5780630db02622146102d85780630e3e4fb81461030157806315febd68146103715780632a3640b1146103a85780632d15cc041461042a5780632f9c4bba146104b8578063302b687214610522578063326586521461058e5780633477ee2e14610640578063441a3e70146106a357806358e7525f146106cf5780635b860d271461071c5780635b9cd8cc146107695780636dd7d8ea1461082457806372e44a3814610852578063a9a981a31461089f578063a9ff959e146108c8578063ae6e43f5146108f1578063b642facd1461092a578063c45607df146109a3578063d09f1ab4146109f0578063d161c76714610a19578063d51b9e9314610a42578063d55b7dff14610a93578063ef18374a14610abc578063f2ee3c7d14610ae5578063f5c9512514610b1e578063f8ac9dd514610b4c575b600080fd5b6101c7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b75565b005b34156101d457600080fd5b6101ea60048080359060200190919050506111fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561023757600080fd5b61026c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061123b565b005b341561027957600080fd5b610281611796565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156102c45780820151818401526020810190506102a9565b505050509050019250505060405180910390f35b34156102e357600080fd5b6102eb61182a565b6040518082815260200191505060405180910390f35b341561030c57600080fd5b610357600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611830565b604051808215151515815260200191505060405180910390f35b341561037c57600080fd5b610392600480803590602001909190505061185f565b6040518082815260200191505060405180910390f35b34156103b357600080fd5b6103e8600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506118bb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561043557600080fd5b610461600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611909565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156104a4578082015181840152602081019050610489565b505050509050019250505060405180910390f35b34156104c357600080fd5b6104cb6119dc565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561050e5780820151818401526020810190506104f3565b505050509050019250505060405180910390f35b341561052d57600080fd5b610578600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a79565b6040518082815260200191505060405180910390f35b341561059957600080fd5b6105c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611b03565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106055780820151818401526020810190506105ea565b50505050905090810190601f1680156106325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561064b57600080fd5b6106616004808035906020019091905050611da2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156106ae57600080fd5b6106cd6004808035906020019091908035906020019091905050611de1565b005b34156106da57600080fd5b610706600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061208d565b6040518082815260200191505060405180910390f35b341561072757600080fd5b610753600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506120d9565b6040518082815260200191505060405180910390f35b341561077457600080fd5b6107a9600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506121a1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107e95780820151818401526020810190506107ce565b50505050905090810190601f1680156108165780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610850600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061226a565b005b341561085d57600080fd5b610889600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612653565b6040518082815260200191505060405180910390f35b34156108aa57600080fd5b6108b261266b565b6040518082815260200191505060405180910390f35b34156108d357600080fd5b6108db612671565b6040518082815260200191505060405180910390f35b34156108fc57600080fd5b610928600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612677565b005b341561093557600080fd5b610961600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612c36565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109ae57600080fd5b6109da600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612ca2565b6040518082815260200191505060405180910390f35b34156109fb57600080fd5b610a03612cee565b6040518082815260200191505060405180910390f35b3415610a2457600080fd5b610a2c612cf4565b6040518082815260200191505060405180910390f35b3415610a4d57600080fd5b610a79600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612cfa565b604051808215151515815260200191505060405180910390f35b3415610a9e57600080fd5b610aa6612d53565b6040518082815260200191505060405180910390f35b3415610ac757600080fd5b610acf612d59565b6040518082815260200191505060405180910390f35b3415610af057600080fd5b610b1c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612d63565b005b3415610b2957600080fd5b610b4a600480803590602001908201803590602001919091929050506134f1565b005b3415610b5757600080fd5b610b5f6135f0565b6040518082815260200191505060405180910390f35b6000600b543410151515610b8857600080fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050141580610c1c57506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050115b1515610c2757600080fd5b81600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151515610c8457600080fd5b610cd934600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546135f690919063ffffffff16565b915060088054806001018281610cef919061362d565b9160005260206000209001600085909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506060604051908101604052803373ffffffffffffffffffffffffffffffffffffffff16815260200160011515815260200183815250600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555060408201518160010155905050610eb834600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5160016009546135f690919063ffffffff16565b6009819055506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905014156110185760078054806001018281610fb6919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600a600081548092919060010191905055505b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806001018281611069919061362d565b9160005260206000209001600085909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806001018281611109919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550507f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c1338434604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b60078181548110151561120b57fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000828280600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156112cd57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561140657600b546113f882600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361490919063ffffffff16565b1015151561140557600080fd5b5b61145b84600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461361490919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061153384600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361490919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115cb43600f546135f690919063ffffffff16565b9250611632846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020546135f690919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000858152602001908152602001600020819055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180548060010182816116db9190613659565b9160005260206000209001600085909190915055507faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa2338686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050505050565b61179e613685565b600880548060200260200160405190810160405280929190818152602001828054801561182057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116117d6575b5050505050905090565b600a5481565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020549050919050565b6006602052816000526040600020818154811015156118d657fe5b90600052602060002090016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611911613685565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156119d057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611986575b50505050509050919050565b6119e4613699565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611a6f57602002820191906000526020600020905b815481526020019060010190808311611a5b575b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b0b6136ad565b611b1482612cfa565b15611c655760036000611b2684612c36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600160036000611b6f86612c36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815481101515611bba57fe5b90600052602060002090018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c595780601f10611c2e57610100808354040283529160200191611c59565b820191906000526020600020905b815481529060010190602001808311611c3c57829003601f168201915b50505050509050611d9d565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815481101515611cf657fe5b90600052602060002090018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d955780601f10611d6a57610100808354040283529160200191611d95565b820191906000526020600020905b815481529060010190602001808311611d7857829003601f168201915b505050505090505b919050565b600881815481101515611db157fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008282600082111515611df457600080fd5b814310151515611e0357600080fd5b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002054111515611e6457600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611eb357fe5b906000526020600020900154141515611ecb57600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008681526020019081526020016000205492506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020600090556000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010184815481101515611fc457fe5b9060005260206000209001600090553373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050151561201357600080fd5b7ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568338685604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b60008082600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151561213857600080fd5b61214184612c36565b915061214b612d59565b6064600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540281151561219757fe5b0492505050919050565b6003602052816000526040600020818154811015156121bc57fe5b9060005260206000209001600091509150508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122625780601f1061223757610100808354040283529160200191612262565b820191906000526020600020905b81548152906001019060200180831161224557829003601f168201915b505050505081565b600c54341015151561227b57600080fd5b80600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff1615156122d757600080fd5b61232c34600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546135f690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561249b57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480600101828161244b919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b61252d34600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc338334604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b60046020528060005260406000206000915090505481565b60095481565b600f5481565b6000806000833373ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561271957600080fd5b84600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151561277557600080fd5b6000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160146101000a81548160ff0219169083151502179055506127e6600160095461361490919063ffffffff16565b600981905550600094505b6008805490508510156128bb578573ffffffffffffffffffffffffffffffffffffffff1660088681548110151561282457fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156128ae5760088581548110151561287b57fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556128bb565b84806001019550506127f1565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054935061299284600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461361490919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a7243600e546135f690919063ffffffff16565b9250612ad9846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020546135f690919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000858152602001908152602001600020819055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018054806001018281612b829190613659565b9160005260206000209001600085909190915055507f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d33387604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1505050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600d5481565b600e5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff169050919050565b600b5481565b6000600a54905090565b600080612d6e613685565b600080600033600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff161515612dcf57600080fd5b87600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff161515612e2b57600080fd5b612e3433612c36565b9750612e3f89612c36565b9650600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515612ed757600080fd5b6001600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550604b612fc4612d59565b6064600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540281151561301057fe5b041015156134e65760016008805490500360405180591061302e5750595b9080825280602002602001820160405250955060009450600093505b600880549050841015613357578673ffffffffffffffffffffffffffffffffffffffff166130b160088681548110151561308057fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612c36565b73ffffffffffffffffffffffffffffffffffffffff16141561334a576130e3600160095461361490919063ffffffff16565b6009819055506008848154811015156130f857fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868680600101975081518110151561313857fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060088481548110151561318357fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160006008868154811015156131c457fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff021916905560018201600090555050600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006132bb91906136c1565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061330691906136e2565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090555b838060010194505061304a565b600092505b600780549050831015613439578673ffffffffffffffffffffffffffffffffffffffff1660078481548110151561338f57fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561342c576007838154811015156133e657fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600a6000815480929190600190039190505550613439565b828060010193505061335c565b7fe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e8787604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156134d15780820151818401526020810190506134b6565b50505050905001935050505060405180910390a15b505050505050505050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060010182816135429190613703565b91600052602060002090016000848490919290919250919061356592919061372f565b50507f949360d814b28a3b393a68909efe1fee120ee09cac30f360a0f80ab5415a611a338383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a15050565b600c5481565b600080828401905083811015151561360a57fe5b8091505092915050565b600082821115151561362257fe5b818303905092915050565b8154818355818115116136545781836000526020600020918201910161365391906137af565b5b505050565b8154818355818115116136805781836000526020600020918201910161367f91906137af565b5b505050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b50805460008255906000526020600020908101906136df91906137d4565b50565b508054600082559060005260206000209081019061370091906137af565b50565b81548183558181151161372a5781836000526020600020918201910161372991906137d4565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061377057803560ff191683800117855561379e565b8280016001018555821561379e579182015b8281111561379d578235825591602001919060010190613782565b5b5090506137ab91906137af565b5090565b6137d191905b808211156137cd5760008160009055506001016137b5565b5090565b90565b6137fd91905b808211156137f957600081816137f09190613800565b506001016137da565b5090565b90565b50805460018160011615610100020316600290046000825580601f106138265750613845565b601f01602090049060005260206000209081019061384491906137af565b5b505600a165627a7a72305820f5bbb127b52ce86c873faef85cff176563476a5e49a3d88eaa9a06a8f432c9080029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000012", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000012", + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x000000000000000000000000000000000000000000000000000000000000000b": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x000000000000000000000000000000000000000000000000000000000000000c": "0x00000000000000000000000000000000000000000000054b40b1f852bda00000", + "0x000000000000000000000000000000000000000000000000000000000000000d": "0x0000000000000000000000000000000000000000000000000000000000000012", + "0x000000000000000000000000000000000000000000000000000000000000000e": "0x000000000000000000000000000000000000000000000000000000000013c680", + "0x000000000000000000000000000000000000000000000000000000000000000f": "0x0000000000000000000000000000000000000000000000000000000000069780", + "0x030c4482e31df0bec3a61ba9044822c841d3be0a21a4a43d22ffabb19a238030": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x03857c1c3036c8068aecc274ccdef26c09d6bc8d7323c3b0af04944281aea3c5": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x04606a03b4103377c3cc40f7d070c9672b8c34f833337c95acd6cc3b9ef873be": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x04606a03b4103377c3cc40f7d070c9672b8c34f833337c95acd6cc3b9ef873bf": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x0f0a4bf138332e4dee2840995f18ef3f4e7ce9800a43298cd303f652f37e2760": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x0f77b98b641f695810840536460aceac3aa93db4b69360cb1e825fc50a01cbf8": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x125b08b20a070fdff51220f22ab5783fe8553385c29d73595065987e274ae2ba": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x125b08b20a070fdff51220f22ab5783fe8553385c29d73595065987e274ae2bb": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x141b2f299c67c202a3f56d8c761ef8412df00a99dc4d7df7132fea8b618710fb": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x15e82e9588701aace370d9b0ae88a15878117328c72679be3a43f1fde5480b52": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x19474e4e22de9b7e74a0e935e50e07474f1922fca9ca508d627a1753b89a04c0": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x1a53676945466c0303c4763ecd9fe35b640c62214817fc1cd445cd2df311d75e": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x1acfc824f6e62266e1ddfd5296eb428cb6235e11eb419042440ee2cd234f5064": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x206df8c61c26c41c2f5d8628f9b0af634f51cea5204c2860beac8743b789d8f9": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x213528a16906ba2c7ae2d13a88332596a8f7dba04445edce4dd35851adc6270b": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x217e08ed8a88d1aa61780ebbfa2433d8ee93fe281a28caa61609ffd7feb6ff48": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x217e08ed8a88d1aa61780ebbfa2433d8ee93fe281a28caa61609ffd7feb6ff49": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x2bbcd29309cdf0c2e0fb87eb0912eda2715ff0d0800356af3b13b1877fc96294": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x2ea8dbac375e20907f0f6064477fb65f425b25387bc4af4a9fa0d909542ad6ec": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x2f46cce9be56b195a997053b94333e3e8608e77a9049008a7867ece9434d7490": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x32f30f989a9121096e27b0ceff2143dfd8ad0a279e39b2dbdd4720d758b1235e": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x334998a4166b71bbee90c9a5395d45b437458344b336983ce195ac15c4cabf41": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x37bbbe931ce8669c7360584cc0c8719480098d88b382fa5147ab6070f6a995e9": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x383c8c93b8864dd3dd80dcce451bff3ccecfe0ef316daeffc3429e8c734ca219": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x424c760de55550140740213338215fb5e72732d77ff28c6fcdce25cc0da4b4df": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x42b4293dae5548c9e2c405a2d603c1b7c254591f10e1a19d475c9573a806ddbf": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x4315dd31061c8b8e85c5b7d9df3c6dda7f6e48ad32c7bd25549115df18f68eb7": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x433573bf8c109958dcd2a79e075574b3fa76ee1309194d6985ec9eb993cfc4a8": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x433573bf8c109958dcd2a79e075574b3fa76ee1309194d6985ec9eb993cfc4a9": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x471f33d3408681a476d422388b3e426fc8fd1f4db2b3cf07127fc0430da13d5a": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x48ddfeab6816c7d8ea504eaceba35584eed68f73e8bca46561c49f828945d870": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x4bcc08cdec386d590e3c1b686244142bf6e504749f55207aea8cba6292b4a05c": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930991": "0x000000000000000000000000311bdf9066246e68559816e7f636435867f824ef", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930992": "0x000000000000000000000000442a44a6fc20f5b8dfa8b304d7137581f7e6bef3", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930993": "0x00000000000000000000000047318441696e9ae962633c16e04d53935272639d", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930994": "0x000000000000000000000000537fc89618edae86950e12687a612e15c4786b84", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930995": "0x00000000000000000000000073898cc3c5beca5841306b26fdb4e30411392a6a", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930996": "0x00000000000000000000000074826141342a4dc33a1045cefa4182b6212ec031", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930997": "0x0000000000000000000000007bc30fbeb7208192d1474b5f87ffbc056de43c11", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930998": "0x000000000000000000000000888c073313b36cf03cf1f739f39443551ff12bbe", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab930999": "0x0000000000000000000000008d993351c0e2db739f9bcbfdeda94d73b50b16d3", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab93099a": "0x000000000000000000000000a242960b7ca1937e826bda6c397df74d9f9ab01a", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab93099b": "0x000000000000000000000000a89af636787499e81362e815e36f28763eac120b", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab93099c": "0x000000000000000000000000abebf5a6cbe6113780cbe489e3eb0db882381aeb", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab93099d": "0x000000000000000000000000af81190100d82f41ad2c95898195c7a47dc59115", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab93099e": "0x000000000000000000000000bb5ec85408683795da2f604a5c0464868eabfcb6", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab93099f": "0x000000000000000000000000da489a1b4304f49aafaec938c7adc48539470624", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab9309a0": "0x000000000000000000000000e1f9c75ce33e568d8fa3ace90497ee0c60dc921e", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab9309a1": "0x000000000000000000000000efea93e384a6ccaaf28e33790a2d1b2625bf964d", + "0x4d08b2b0194071b50be4200cf623b02a2489a2090e82dca38562a22eab9309a2": "0x000000000000000000000000fc087e2622b02b0bb78713e872c02796ef64c8f1", + "0x4df12e1188de9c93b847240eddba997020037c5f8010088c71c6f497ea6865ab": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x5479b436a6706e20dbebc992f8b75e09f5ef33b9bfc92f6eb52af893bc9f3ef5": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x5a72b959cac93391bff267c6c91f4da4895e3f8769bb512241703807da099182": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x6528b6895a372dd9abf5c9b1e2d763877056e06dcadeefb947482c05a58f1a46": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x6528b6895a372dd9abf5c9b1e2d763877056e06dcadeefb947482c05a58f1a47": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x690ae50193386ef0c1f3aecb62d156ec48e51576b8faca760d2e782148d2685a": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x69dc30401af3a46fb5caf938fefd3bb163e08eed5018359c7ce99b0a6ac5bcad": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x6f24e27f6bf706ecff22e1cc7232c2b995103d66093d2976eeaa6ced126c7cf3": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x724b5bbb48fc97209628eb6b34adb8dd3cd583180ac721afdf706c4c57bbc253": "0x0000000000000000000000000000000000000000000000000000000000000012", + "0x76dfe65765497bb6461c122d3715541832ddc6bed4af9859d0afcafd98e85d3d": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x78131ffee5eb0b7466641acad70a5e37f247a658acd6910a0e0159013272500f": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x78131ffee5eb0b7466641acad70a5e37f247a658acd6910a0e01590132725010": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x7860877d0fdf5b8349b69cf151013101002a515fc77b7d9ac9deea724189b49d": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x78f000d26dc5cb7bb6625ad3bbdeb559c2237595558ca062c170e72b826dcaa8": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x7c5e55320fbb9389307827678ad755ae9bbff14bc2f0b7311e273ea6f816b5e6": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x850302252de9a45ae306fefaef8c0b466423440d4916233feb535a91f5c13884": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x850302252de9a45ae306fefaef8c0b466423440d4916233feb535a91f5c13885": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0x8f6c89a2950c399a6bd26ec8e4f8342cef555205270052553492ac8caab48637": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x92174186dda351528a078fccba50a5ff5332041fd6f861d5ba9f30d9e7416b01": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x927695b4feff242034e5b416f50ee8f8804c7c79d682e9b504e1d7ad0376d415": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x9428e90ccbc254697b04337e1bfa9ed42a163a0530cac6ed589ff0e86db639ff": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x979ead4e6ad3f623d00d4c31505cce1a654a543281a073df41b8429781a4700a": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0x979ead4e6ad3f623d00d4c31505cce1a654a543281a073df41b8429781a4700b": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xa0654653e606a2b16e75ace42178d92a333f7bd8fd554600cd8c0dda8959a747": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xa0654653e606a2b16e75ace42178d92a333f7bd8fd554600cd8c0dda8959a748": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xa16feed71a191c25a16b840899c1130128bae680b9fb5afedfad18ee25baa3cc": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xa16feed71a191c25a16b840899c1130128bae680b9fb5afedfad18ee25baa3cd": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xa40e19ad57e57cf5498a358191ef21a46727990f0833f60ef287bb2512f473b2": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xadd3379ca12eb6e907655b06c632df1dfb1d3810478f04657d0eb1f2514ada7d": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0xb07bd76227cbb5a5e93cd5635ab731faceb120715f763221afde9bf9c66d93e1": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xb7a1ebae33d313df562db52e6a17cc25a4fc71072bc8f38e28cca51dca772d2f": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xb7a1ebae33d313df562db52e6a17cc25a4fc71072bc8f38e28cca51dca772d30": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xbd072001a6fd52f3f36f5c32bd3ba9c4ffd3e427ab5661fb687b4b37342e32da": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xbe19bdb2daf84051554e5f7b28c240f2394dfdc01ed9931b1d2270301ce6197a": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xbe5c577780cc5cb207d59bca6035e982dd13627ef17edb6a67300e707c7ab194": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xbe5c577780cc5cb207d59bca6035e982dd13627ef17edb6a67300e707c7ab195": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xd6b02d8d4bab22276f46bd01c273377c92e6ebf28cab145c363c2ad13651ab01": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xd6b02d8d4bab22276f46bd01c273377c92e6ebf28cab145c363c2ad13651ab02": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xd6e5468fdf7c0709dc80d32848fc6c62d31a193138d0962e6edc92694d422212": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xd71673afb2d4fa2bfb83c3892943b95ad4701e2fd78801199c07446743897d39": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xd71673afb2d4fa2bfb83c3892943b95ad4701e2fd78801199c07446743897d3a": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xd9c5f37af5366d29a8e3839d99c1dbe7d1b1e3f1e2f5a3ac117401809b0d2501": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xd9c5f37af5366d29a8e3839d99c1dbe7d1b1e3f1e2f5a3ac117401809b0d2502": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xd9cfd15c4a9619e16321f9e4042a566871512a8c0375122ca56a91ed5dfaa5e2": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xd9cfd15c4a9619e16321f9e4042a566871512a8c0375122ca56a91ed5dfaa5e3": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xd9d4d93f562d5dc8184de584a08046769c25c10f1cebee1617c95d9212c093ec": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0xe0d37705568ac8274db84c0b672ef9a5b02459e4607af2736a98b235c5342cf9": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xe20533b9acd093b6b21eda56a3ad045315f0999f910d7ccada9ec110917d3dc2": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0xe6920aeacdafc0d4f7573369e69a8a79eaee08f9d9f620e22831ee53d8de618c": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xe6a03f7a1a989ef0b5a97e8964334cc7ddb72a67de4c24b5f891847210a9db11": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xe6a03f7a1a989ef0b5a97e8964334cc7ddb72a67de4c24b5f891847210a9db12": "0x000000000000000000000000000000000000000000000a968163f0a57b400000", + "0xea2b7d5c8733427922e04399ac310174bb0431233be39c6a708646879c299ed9": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3": "0x000000000000000000000000311bdf9066246e68559816e7f636435867f824ef", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4": "0x000000000000000000000000442a44a6fc20f5b8dfa8b304d7137581f7e6bef3", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee5": "0x00000000000000000000000047318441696e9ae962633c16e04d53935272639d", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee6": "0x000000000000000000000000537fc89618edae86950e12687a612e15c4786b84", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee7": "0x00000000000000000000000073898cc3c5beca5841306b26fdb4e30411392a6a", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee8": "0x00000000000000000000000074826141342a4dc33a1045cefa4182b6212ec031", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee9": "0x0000000000000000000000007bc30fbeb7208192d1474b5f87ffbc056de43c11", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636eea": "0x000000000000000000000000888c073313b36cf03cf1f739f39443551ff12bbe", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636eeb": "0x0000000000000000000000008d993351c0e2db739f9bcbfdeda94d73b50b16d3", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636eec": "0x000000000000000000000000a242960b7ca1937e826bda6c397df74d9f9ab01a", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636eed": "0x000000000000000000000000a89af636787499e81362e815e36f28763eac120b", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636eee": "0x000000000000000000000000abebf5a6cbe6113780cbe489e3eb0db882381aeb", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636eef": "0x000000000000000000000000af81190100d82f41ad2c95898195c7a47dc59115", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ef0": "0x000000000000000000000000bb5ec85408683795da2f604a5c0464868eabfcb6", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ef1": "0x000000000000000000000000da489a1b4304f49aafaec938c7adc48539470624", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ef2": "0x000000000000000000000000e1f9c75ce33e568d8fa3ace90497ee0c60dc921e", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ef3": "0x000000000000000000000000efea93e384a6ccaaf28e33790a2d1b2625bf964d", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ef4": "0x000000000000000000000000fc087e2622b02b0bb78713e872c02796ef64c8f1", + "0xf511943a3baf5478bbcb2a8fc05b1bd215ad2612dcea88999bb647d8a1bc497b": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xf6c2c7fc452bd777ae6315a05df702a9c84c84319642f738c02d7265e7b03519": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xf7c5c70c003782446997bfaca3df73d3f4529e5610bd8f00aa705bd9f2b7bea5": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xfb99b5de22d1e4ca0e5857616be3d3df0df3f371c6dae7e7c3df24980cae362b": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xfd6dda287eb8b2e65f6136280e7f54c250f820b79064da60c2f09859788892b6": "0x000000000000000000000000de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xfdc6e9ef6103a34656ae73183b1f07e0d09db52b8500c3d560707c8f426d61b7": "0x000000000000000000000001de5b54e8e7b585153add32f472e8d545e5d42a82", + "0xfdc6e9ef6103a34656ae73183b1f07e0d09db52b8500c3d560707c8f426d61b8": "0x000000000000000000000000000000000000000000000a968163f0a57b400000" + }, + "balance": "0xbe951906eba2aa800000" + }, + "0000000000000000000000000000000000000089": { + "code": "0x6060604052600436106100565763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663e341eaa4811461005b578063e7ec6aef14610076578063f4145a83146100df575b600080fd5b341561006657600080fd5b610074600435602435610104565b005b341561008157600080fd5b61008c600435610227565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156100cb5780820151838201526020016100b3565b505050509050019250505060405180910390f35b34156100ea57600080fd5b6100f26102ac565b60405190815260200160405180910390f35b438290101561011257600080fd5b600280546101289184910263ffffffff6102b216565b43111561013457600080fd5b600082815260016020819052604090912080549091810161015583826102c8565b5060009182526020808320919091018390558282528190526040902080546001810161018183826102c8565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff19163373ffffffffffffffffffffffffffffffffffffffff8116919091179091557f62855fa22e051687c32ac285857751f6d3f2c100c72756d8d30cb7ecb1f64f5490838360405173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091526040808301919091526060909101905180910390a15050565b61022f6102f1565b600082815260208181526040918290208054909290918281020190519081016040528092919081815260200182805480156102a057602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610275575b50505050509050919050565b60025481565b6000828201838110156102c157fe5b9392505050565b8154818355818115116102ec576000838152602090206102ec918101908301610303565b505050565b60206040519081016040526000815290565b61032191905b8082111561031d5760008155600101610309565b5090565b905600a165627a7a72305820a8ceddaea8e4ae00991e2ae81c8c88e160dd8770f255523282c24c2df4c30ec70029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000384" + }, + "balance": "0x0" + }, + "0000000000000000000000000000000000000090": { + "code": "0x6060604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663284180fc811461006657806334d38600146100d8578063d442d6cc14610129578063e11f5ba21461015a575b600080fd5b341561007157600080fd5b610085600160a060020a0360043516610170565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156100c45780820151838201526020016100ac565b505050509050019250505060405180910390f35b34156100e357600080fd5b61012760046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496506101f395505050505050565b005b341561013457600080fd5b610148600160a060020a0360043516610243565b60405190815260200160405180910390f35b341561016557600080fd5b61012760043561025e565b61017861028e565b60008083600160a060020a0316600160a060020a031681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156101e757602002820191906000526020600020905b815481526001909101906020018083116101d2575b50505050509050919050565b610384430661032081101561020757600080fd5b610352811061021557600080fd5b600160a060020a033316600090815260208190526040902082805161023e9291602001906102a0565b505050565b600160a060020a031660009081526001602052604090205490565b610384430661035281101561027257600080fd5b50600160a060020a033316600090815260016020526040902055565b60206040519081016040526000815290565b8280548282559060005260206000209081019282156102dd579160200282015b828111156102dd57825182556020909201916001909101906102c0565b506102e99291506102ed565b5090565b61030791905b808211156102e957600081556001016102f3565b905600a165627a7a7230582034991c8dc4001fc254f3ba2811c05d2e7d29bee3908946ca56d1545b2c852de20029", + "balance": "0x0" + }, + "0000000000000000000000000000000000000099": { + "balance": "0x92e8434aaaf80e1800000" + }, + "311bdf9066246e68559816e7f636435867f824ef": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "442a44a6fc20f5b8dfa8b304d7137581f7e6bef3": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "47318441696e9ae962633c16e04d53935272639d": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "537fc89618edae86950e12687a612e15c4786b84": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "73898cc3c5beca5841306b26fdb4e30411392a6a": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "74826141342a4dc33a1045cefa4182b6212ec031": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "7bc30fbeb7208192d1474b5f87ffbc056de43c11": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "888c073313b36cf03cf1f739f39443551ff12bbe": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "8d993351c0e2db739f9bcbfdeda94d73b50b16d3": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "a242960b7ca1937e826bda6c397df74d9f9ab01a": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "a89af636787499e81362e815e36f28763eac120b": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "abebf5a6cbe6113780cbe489e3eb0db882381aeb": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "af81190100d82f41ad2c95898195c7a47dc59115": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "bb5ec85408683795da2f604a5c0464868eabfcb6": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "da489a1b4304f49aafaec938c7adc48539470624": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "de5b54e8e7b585153add32f472e8d545e5d42a82": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "e1f9c75ce33e568d8fa3ace90497ee0c60dc921e": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "efea93e384a6ccaaf28e33790a2d1b2625bf964d": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + }, + "fc087e2622b02b0bb78713e872c02796ef64c8f1": { + "balance": "0x200000000000000000000000000000000000000000000000000000000000000" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": null +} diff --git a/genesis/genesis.go b/genesis/genesis.go new file mode 100644 index 0000000000..94dead3029 --- /dev/null +++ b/genesis/genesis.go @@ -0,0 +1,14 @@ +package genesis + +import ( + _ "embed" +) + +//go:embed mainnet.json +var MainnetGenesis []byte + +//go:embed testnet.json +var TestnetGenesis []byte + +//go:embed devnet.json +var DevnetGenesis []byte diff --git a/genesis/mainnet.json b/genesis/mainnet.json new file mode 100644 index 0000000000..e7540bd00b --- /dev/null +++ b/genesis/mainnet.json @@ -0,0 +1,113 @@ +{ + "config": { + "chainId": 50, + "homesteadBlock": 1, + "eip150Block": 2, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 3, + "eip158Block": 3, + "byzantiumBlock": 4, + "XDPoS": { + "period": 2, + "epoch": 900, + "reward": 5000, + "rewardCheckpoint": 900, + "gap": 450, + "foudationWalletAddr": "xdc92a289fe95a85c53b8d0d113cbaef0c1ec98ac65" + } + }, + "nonce": "0x0", + "timestamp": "0x5cefae27", + "extraData": "0x000000000000000000000000000000000000000000000000000000000000000025c65b4b379ac37cf78357c4915f73677022eaffc7d49d0a2cf198deebd6ce581af465944ec8b2bbcfccdea1006a5cfa7d9484b5b293b46964c265c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x47b760", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "xdc0000000000000000000000000000000000000000", + "alloc": { + "0000000000000000000000000000000000000000": { + "balance": "0x0" + }, + "0000000000000000000000000000000000000001": { + "balance": "0x0" + }, + "0000000000000000000000000000000000000088": { + "code": "0x606060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063012679511461019b578063025e7c27146101c957806302aa9be21461022c57806306a49fce1461026e5780630db02622146102d85780630e3e4fb81461030157806315febd68146103715780632a3640b1146103a85780632d15cc041461042a5780632f9c4bba146104b8578063302b687214610522578063326586521461058e5780633477ee2e14610640578063441a3e70146106a357806358e7525f146106cf5780635b860d271461071c5780635b9cd8cc146107695780636dd7d8ea1461082457806372e44a3814610852578063a9a981a31461089f578063a9ff959e146108c8578063ae6e43f5146108f1578063b642facd1461092a578063c45607df146109a3578063d09f1ab4146109f0578063d161c76714610a19578063d51b9e9314610a42578063d55b7dff14610a93578063ef18374a14610abc578063f2ee3c7d14610ae5578063f5c9512514610b1e578063f8ac9dd514610b4c575b600080fd5b6101c7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b75565b005b34156101d457600080fd5b6101ea60048080359060200190919050506111fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561023757600080fd5b61026c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061123b565b005b341561027957600080fd5b610281611796565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156102c45780820151818401526020810190506102a9565b505050509050019250505060405180910390f35b34156102e357600080fd5b6102eb61182a565b6040518082815260200191505060405180910390f35b341561030c57600080fd5b610357600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611830565b604051808215151515815260200191505060405180910390f35b341561037c57600080fd5b610392600480803590602001909190505061185f565b6040518082815260200191505060405180910390f35b34156103b357600080fd5b6103e8600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506118bb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561043557600080fd5b610461600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611909565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156104a4578082015181840152602081019050610489565b505050509050019250505060405180910390f35b34156104c357600080fd5b6104cb6119dc565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561050e5780820151818401526020810190506104f3565b505050509050019250505060405180910390f35b341561052d57600080fd5b610578600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a79565b6040518082815260200191505060405180910390f35b341561059957600080fd5b6105c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611b03565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106055780820151818401526020810190506105ea565b50505050905090810190601f1680156106325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561064b57600080fd5b6106616004808035906020019091905050611da2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156106ae57600080fd5b6106cd6004808035906020019091908035906020019091905050611de1565b005b34156106da57600080fd5b610706600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061208d565b6040518082815260200191505060405180910390f35b341561072757600080fd5b610753600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506120d9565b6040518082815260200191505060405180910390f35b341561077457600080fd5b6107a9600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506121a1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107e95780820151818401526020810190506107ce565b50505050905090810190601f1680156108165780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610850600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061226a565b005b341561085d57600080fd5b610889600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612653565b6040518082815260200191505060405180910390f35b34156108aa57600080fd5b6108b261266b565b6040518082815260200191505060405180910390f35b34156108d357600080fd5b6108db612671565b6040518082815260200191505060405180910390f35b34156108fc57600080fd5b610928600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612677565b005b341561093557600080fd5b610961600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612c36565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109ae57600080fd5b6109da600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612ca2565b6040518082815260200191505060405180910390f35b34156109fb57600080fd5b610a03612cee565b6040518082815260200191505060405180910390f35b3415610a2457600080fd5b610a2c612cf4565b6040518082815260200191505060405180910390f35b3415610a4d57600080fd5b610a79600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612cfa565b604051808215151515815260200191505060405180910390f35b3415610a9e57600080fd5b610aa6612d53565b6040518082815260200191505060405180910390f35b3415610ac757600080fd5b610acf612d59565b6040518082815260200191505060405180910390f35b3415610af057600080fd5b610b1c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612d63565b005b3415610b2957600080fd5b610b4a600480803590602001908201803590602001919091929050506134f1565b005b3415610b5757600080fd5b610b5f6135f0565b6040518082815260200191505060405180910390f35b6000600b543410151515610b8857600080fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050141580610c1c57506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050115b1515610c2757600080fd5b81600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151515610c8457600080fd5b610cd934600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546135f690919063ffffffff16565b915060088054806001018281610cef919061362d565b9160005260206000209001600085909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506060604051908101604052803373ffffffffffffffffffffffffffffffffffffffff16815260200160011515815260200183815250600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555060408201518160010155905050610eb834600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5160016009546135f690919063ffffffff16565b6009819055506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905014156110185760078054806001018281610fb6919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600a600081548092919060010191905055505b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806001018281611069919061362d565b9160005260206000209001600085909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806001018281611109919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550507f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c1338434604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b60078181548110151561120b57fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000828280600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156112cd57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561140657600b546113f882600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361490919063ffffffff16565b1015151561140557600080fd5b5b61145b84600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461361490919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061153384600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361490919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115cb43600f546135f690919063ffffffff16565b9250611632846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020546135f690919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000858152602001908152602001600020819055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180548060010182816116db9190613659565b9160005260206000209001600085909190915055507faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa2338686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050505050565b61179e613685565b600880548060200260200160405190810160405280929190818152602001828054801561182057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116117d6575b5050505050905090565b600a5481565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020549050919050565b6006602052816000526040600020818154811015156118d657fe5b90600052602060002090016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611911613685565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156119d057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611986575b50505050509050919050565b6119e4613699565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611a6f57602002820191906000526020600020905b815481526020019060010190808311611a5b575b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b0b6136ad565b611b1482612cfa565b15611c655760036000611b2684612c36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600160036000611b6f86612c36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815481101515611bba57fe5b90600052602060002090018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c595780601f10611c2e57610100808354040283529160200191611c59565b820191906000526020600020905b815481529060010190602001808311611c3c57829003601f168201915b50505050509050611d9d565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815481101515611cf657fe5b90600052602060002090018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d955780601f10611d6a57610100808354040283529160200191611d95565b820191906000526020600020905b815481529060010190602001808311611d7857829003601f168201915b505050505090505b919050565b600881815481101515611db157fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008282600082111515611df457600080fd5b814310151515611e0357600080fd5b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002054111515611e6457600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611eb357fe5b906000526020600020900154141515611ecb57600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008681526020019081526020016000205492506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020600090556000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010184815481101515611fc457fe5b9060005260206000209001600090553373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050151561201357600080fd5b7ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568338685604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b60008082600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151561213857600080fd5b61214184612c36565b915061214b612d59565b6064600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540281151561219757fe5b0492505050919050565b6003602052816000526040600020818154811015156121bc57fe5b9060005260206000209001600091509150508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122625780601f1061223757610100808354040283529160200191612262565b820191906000526020600020905b81548152906001019060200180831161224557829003601f168201915b505050505081565b600c54341015151561227b57600080fd5b80600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff1615156122d757600080fd5b61232c34600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546135f690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561249b57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480600101828161244b919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b61252d34600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc338334604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b60046020528060005260406000206000915090505481565b60095481565b600f5481565b6000806000833373ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561271957600080fd5b84600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151561277557600080fd5b6000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160146101000a81548160ff0219169083151502179055506127e6600160095461361490919063ffffffff16565b600981905550600094505b6008805490508510156128bb578573ffffffffffffffffffffffffffffffffffffffff1660088681548110151561282457fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156128ae5760088581548110151561287b57fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556128bb565b84806001019550506127f1565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054935061299284600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461361490919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a7243600e546135f690919063ffffffff16565b9250612ad9846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020546135f690919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000858152602001908152602001600020819055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018054806001018281612b829190613659565b9160005260206000209001600085909190915055507f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d33387604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1505050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600d5481565b600e5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff169050919050565b600b5481565b6000600a54905090565b600080612d6e613685565b600080600033600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff161515612dcf57600080fd5b87600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff161515612e2b57600080fd5b612e3433612c36565b9750612e3f89612c36565b9650600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515612ed757600080fd5b6001600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550604b612fc4612d59565b6064600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540281151561301057fe5b041015156134e65760016008805490500360405180591061302e5750595b9080825280602002602001820160405250955060009450600093505b600880549050841015613357578673ffffffffffffffffffffffffffffffffffffffff166130b160088681548110151561308057fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612c36565b73ffffffffffffffffffffffffffffffffffffffff16141561334a576130e3600160095461361490919063ffffffff16565b6009819055506008848154811015156130f857fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868680600101975081518110151561313857fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060088481548110151561318357fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160006008868154811015156131c457fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff021916905560018201600090555050600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006132bb91906136c1565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061330691906136e2565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090555b838060010194505061304a565b600092505b600780549050831015613439578673ffffffffffffffffffffffffffffffffffffffff1660078481548110151561338f57fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561342c576007838154811015156133e657fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600a6000815480929190600190039190505550613439565b828060010193505061335c565b7fe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e8787604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156134d15780820151818401526020810190506134b6565b50505050905001935050505060405180910390a15b505050505050505050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060010182816135429190613703565b91600052602060002090016000848490919290919250919061356592919061372f565b50507f949360d814b28a3b393a68909efe1fee120ee09cac30f360a0f80ab5415a611a338383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a15050565b600c5481565b600080828401905083811015151561360a57fe5b8091505092915050565b600082821115151561362257fe5b818303905092915050565b8154818355818115116136545781836000526020600020918201910161365391906137af565b5b505050565b8154818355818115116136805781836000526020600020918201910161367f91906137af565b5b505050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b50805460008255906000526020600020908101906136df91906137d4565b50565b508054600082559060005260206000209081019061370091906137af565b50565b81548183558181151161372a5781836000526020600020918201910161372991906137d4565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061377057803560ff191683800117855561379e565b8280016001018555821561379e579182015b8281111561379d578235825591602001919060010190613782565b5b5090506137ab91906137af565b5090565b6137d191905b808211156137cd5760008160009055506001016137b5565b5090565b90565b6137fd91905b808211156137f957600081816137f09190613800565b506001016137da565b5090565b90565b50805460018160011615610100020316600290046000825580601f106138265750613845565b601f01602090049060005260206000209081019061384491906137af565b5b505600a165627a7a72305820f5bbb127b52ce86c873faef85cff176563476a5e49a3d88eaa9a06a8f432c9080029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x000000000000000000000000000000000000000000000000000000000000000b": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x000000000000000000000000000000000000000000000000000000000000000c": "0x00000000000000000000000000000000000000000000054b40b1f852bda00000", + "0x000000000000000000000000000000000000000000000000000000000000000d": "0x0000000000000000000000000000000000000000000000000000000000000012", + "0x000000000000000000000000000000000000000000000000000000000000000e": "0x000000000000000000000000000000000000000000000000000000000013c680", + "0x000000000000000000000000000000000000000000000000000000000000000f": "0x0000000000000000000000000000000000000000000000000000000000069780", + "0x1cb68bf63bb3b55abf504ef789bb06e8b2b266a334ca39892e163225a47b8267": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x2c6b8fd5b2b39958a7e5a98eebf2c1c31122e89c7961ce1025e69a3d3f07fd20": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x3639e2dfabac2c6baff147abd66f76b8e526e974a9a2a14163169aa03d2f8d4b": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x473ba2a6d1aa200b3118a8abc51fe248a479e882e6c655ae014d9c66fbc181ed": "0x00000000000000000000000025c65b4b379ac37cf78357c4915f73677022eaff", + "0x473ba2a6d1aa200b3118a8abc51fe248a479e882e6c655ae014d9c66fbc181ee": "0x000000000000000000000000c7d49d0a2cf198deebd6ce581af465944ec8b2bb", + "0x473ba2a6d1aa200b3118a8abc51fe248a479e882e6c655ae014d9c66fbc181ef": "0x000000000000000000000000cfccdea1006a5cfa7d9484b5b293b46964c265c0", + "0x53dbb2c13e64ef254df4bb7c7b541e84dd24870927f98f151db88daa464fb4dc": "0x000000000000000000000000381047523972c9fdc3aa343e0b96900a8e2fa765", + "0x67a3292220e327ce969d100d7e4d83dd4b05efa763a5e4cdb04e0c0107736472": "0x000000000000000000000001381047523972c9fdc3aa343e0b96900a8e2fa765", + "0x67a3292220e327ce969d100d7e4d83dd4b05efa763a5e4cdb04e0c0107736473": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x78dfe8da08db00fe2cd4ddbd11f9cb7e4245ce35275d7734678593942034e181": "0x000000000000000000000001381047523972c9fdc3aa343e0b96900a8e2fa765", + "0x78dfe8da08db00fe2cd4ddbd11f9cb7e4245ce35275d7734678593942034e182": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x90e333b6971c3ecd09a0da09b031d63cdd2dc213d199a66955a8bf7df8a8142d": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0xa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688": "0x000000000000000000000000381047523972c9fdc3aa343e0b96900a8e2fa765", + "0xac80bed7555f6f181a34915490d97d0bfe2c0e116d1c73b34523ca0d9749955c": "0x000000000000000000000000381047523972c9fdc3aa343e0b96900a8e2fa765", + "0xae7e2a864ae923819e93a9f6183bc7ca0dcee93a0759238acd92344ad3216228": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0xb375859c4c97d60e8a699586dc5dd215f38f99e40430bb9261f085ee694ffb2c": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xd5d5b62da76a3a9f2df0e9276cbaf8973a778bf41f7f4942e06243f195493e99": "0x000000000000000000000000381047523972c9fdc3aa343e0b96900a8e2fa765", + "0xec8699f61c2c8bbdbc66463590788e526c60046dda98e8c70df1fb756050baa4": "0x0000000000000000000000000000000000000000000000000000000000000003", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3": "0x00000000000000000000000025c65b4b379ac37cf78357c4915f73677022eaff", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4": "0x000000000000000000000000c7d49d0a2cf198deebd6ce581af465944ec8b2bb", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee5": "0x000000000000000000000000cfccdea1006a5cfa7d9484b5b293b46964c265c0", + "0xf4dd36495f675c407ac8f8d6dd8cc40162c854dba3ce4ce8919af34d0b1ed47c": "0x000000000000000000000001381047523972c9fdc3aa343e0b96900a8e2fa765", + "0xf4dd36495f675c407ac8f8d6dd8cc40162c854dba3ce4ce8919af34d0b1ed47d": "0x000000000000000000000000000000000000000000084595161401484a000000" + }, + "balance": "0x18d0bf423c03d8de000000" + }, + "0000000000000000000000000000000000000089": { + "code": "0x6060604052600436106100565763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663e341eaa4811461005b578063e7ec6aef14610076578063f4145a83146100df575b600080fd5b341561006657600080fd5b610074600435602435610104565b005b341561008157600080fd5b61008c600435610227565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156100cb5780820151838201526020016100b3565b505050509050019250505060405180910390f35b34156100ea57600080fd5b6100f26102ac565b60405190815260200160405180910390f35b438290101561011257600080fd5b600280546101289184910263ffffffff6102b216565b43111561013457600080fd5b600082815260016020819052604090912080549091810161015583826102c8565b5060009182526020808320919091018390558282528190526040902080546001810161018183826102c8565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff19163373ffffffffffffffffffffffffffffffffffffffff8116919091179091557f62855fa22e051687c32ac285857751f6d3f2c100c72756d8d30cb7ecb1f64f5490838360405173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091526040808301919091526060909101905180910390a15050565b61022f6102f1565b600082815260208181526040918290208054909290918281020190519081016040528092919081815260200182805480156102a057602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610275575b50505050509050919050565b60025481565b6000828201838110156102c157fe5b9392505050565b8154818355818115116102ec576000838152602090206102ec918101908301610303565b505050565b60206040519081016040526000815290565b61032191905b8082111561031d5760008155600101610309565b5090565b905600a165627a7a72305820a8ceddaea8e4ae00991e2ae81c8c88e160dd8770f255523282c24c2df4c30ec70029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000384" + }, + "balance": "0x0" + }, + "0000000000000000000000000000000000000090": { + "code": "0x6060604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663284180fc811461006657806334d38600146100d8578063d442d6cc14610129578063e11f5ba21461015a575b600080fd5b341561007157600080fd5b610085600160a060020a0360043516610170565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156100c45780820151838201526020016100ac565b505050509050019250505060405180910390f35b34156100e357600080fd5b61012760046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496506101f395505050505050565b005b341561013457600080fd5b610148600160a060020a0360043516610243565b60405190815260200160405180910390f35b341561016557600080fd5b61012760043561025e565b61017861028e565b60008083600160a060020a0316600160a060020a031681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156101e757602002820191906000526020600020905b815481526001909101906020018083116101d2575b50505050509050919050565b610384430661032081101561020757600080fd5b610352811061021557600080fd5b600160a060020a033316600090815260208190526040902082805161023e9291602001906102a0565b505050565b600160a060020a031660009081526001602052604090205490565b610384430661035281101561027257600080fd5b50600160a060020a033316600090815260016020526040902055565b60206040519081016040526000815290565b8280548282559060005260206000209081019282156102dd579160200282015b828111156102dd57825182556020909201916001909101906102c0565b506102e99291506102ed565b5090565b61030791905b808211156102e957600081556001016102f3565b905600a165627a7a7230582034991c8dc4001fc254f3ba2811c05d2e7d29bee3908946ca56d1545b2c852de20029", + "balance": "0x0" + }, + "0000000000000000000000000000000000000099": { + "code": "0x60606040526004361061011c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c278114610165578063173825d91461019757806320ea8d86146101b65780632f54bf6e146101cc5780633411c81c146101ff57806354741525146102215780637065cb4814610250578063784547a71461026f5780638b51d13f146102855780639ace38c21461029b578063a0e67e2b14610349578063a8abe69a146103af578063b5dc40c3146103d2578063b77bf600146103e8578063ba51a6df146103fb578063c01a8c8414610411578063c642747414610427578063d74f8edd1461048c578063dc8452cd1461049f578063e20056e6146104b2578063ee22610b146104d7575b60003411156101635733600160a060020a03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405190815260200160405180910390a25b005b341561017057600080fd5b61017b6004356104ed565b604051600160a060020a03909116815260200160405180910390f35b34156101a257600080fd5b610163600160a060020a0360043516610515565b34156101c157600080fd5b6101636004356106aa565b34156101d757600080fd5b6101eb600160a060020a0360043516610788565b604051901515815260200160405180910390f35b341561020a57600080fd5b6101eb600435600160a060020a036024351661079d565b341561022c57600080fd5b61023e600435151560243515156107bd565b60405190815260200160405180910390f35b341561025b57600080fd5b610163600160a060020a0360043516610829565b341561027a57600080fd5b6101eb600435610965565b341561029057600080fd5b61023e6004356109e9565b34156102a657600080fd5b6102b1600435610a58565b604051600160a060020a038516815260208101849052811515606082015260806040820181815290820184818151815260200191508051906020019080838360005b8381101561030b5780820151838201526020016102f3565b50505050905090810190601f1680156103385780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b341561035457600080fd5b61035c610b36565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561039b578082015183820152602001610383565b505050509050019250505060405180910390f35b34156103ba57600080fd5b61035c60043560243560443515156064351515610b9f565b34156103dd57600080fd5b61035c600435610cc7565b34156103f357600080fd5b61023e610e2b565b341561040657600080fd5b610163600435610e31565b341561041c57600080fd5b610163600435610ec4565b341561043257600080fd5b61023e60048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610fb295505050505050565b341561049757600080fd5b61023e610fd1565b34156104aa57600080fd5b61023e610fd6565b34156104bd57600080fd5b610163600160a060020a0360043581169060243516610fdc565b34156104e257600080fd5b61016360043561118a565b60038054829081106104fb57fe5b600091825260209091200154600160a060020a0316905081565b600030600160a060020a031633600160a060020a031614151561053757600080fd5b600160a060020a038216600090815260026020526040902054829060ff16151561056057600080fd5b600160a060020a0383166000908152600260205260408120805460ff1916905591505b600354600019018210156106435782600160a060020a03166003838154811015156105aa57fe5b600091825260209091200154600160a060020a03161415610638576003805460001981019081106105d757fe5b60009182526020909120015460038054600160a060020a0390921691849081106105fd57fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055610643565b600190910190610583565b6003805460001901906106569082611442565b50600354600454111561066f5760035461066f90610e31565b82600160a060020a03167f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9060405160405180910390a2505050565b33600160a060020a03811660009081526002602052604090205460ff1615156106d257600080fd5b600082815260016020908152604080832033600160a060020a038116855292529091205483919060ff16151561070757600080fd5b600084815260208190526040902060030154849060ff161561072857600080fd5b6000858152600160209081526040808320600160a060020a033316808552925291829020805460ff1916905586917ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9905160405180910390a35050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b600554811015610822578380156107ea575060008181526020819052604090206003015460ff16155b8061080e575082801561080e575060008181526020819052604090206003015460ff165b1561081a576001820191505b6001016107c1565b5092915050565b30600160a060020a031633600160a060020a031614151561084957600080fd5b600160a060020a038116600090815260026020526040902054819060ff161561087157600080fd5b81600160a060020a038116151561088757600080fd5b600380549050600101600454603282111580156108a45750818111155b80156108af57508015155b80156108ba57508115155b15156108c557600080fd5b600160a060020a0385166000908152600260205260409020805460ff1916600190811790915560038054909181016108fd8382611442565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387169081179091557ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25050505050565b600080805b6003548110156109e2576000848152600160205260408120600380549192918490811061099357fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff16156109c7576001820191505b6004548214156109da57600192506109e2565b60010161096a565b5050919050565b6000805b600354811015610a525760008381526001602052604081206003805491929184908110610a1657fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610a4a576001820191505b6001016109ed565b50919050565b60006020528060005260406000206000915090508060000160009054906101000a9004600160a060020a031690806001015490806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b235780601f10610af857610100808354040283529160200191610b23565b820191906000526020600020905b815481529060010190602001808311610b0657829003601f168201915b5050506003909301549192505060ff1684565b610b3e61146b565b6003805480602002602001604051908101604052809291908181526020018280548015610b9457602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610b76575b505050505090505b90565b610ba761146b565b610baf61146b565b600080600554604051805910610bc25750595b9080825280602002602001820160405250925060009150600090505b600554811015610c5757858015610c07575060008181526020819052604090206003015460ff16155b80610c2b5750848015610c2b575060008181526020819052604090206003015460ff165b15610c4f5780838381518110610c3d57fe5b60209081029091010152600191909101905b600101610bde565b878703604051805910610c675750595b908082528060200260200182016040525093508790505b86811015610cbc57828181518110610c9257fe5b906020019060200201518489830381518110610caa57fe5b60209081029091010152600101610c7e565b505050949350505050565b610ccf61146b565b610cd761146b565b6003546000908190604051805910610cec5750595b9080825280602002602001820160405250925060009150600090505b600354811015610db45760008581526001602052604081206003805491929184908110610d3157fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610dac576003805482908110610d6c57fe5b600091825260209091200154600160a060020a0316838381518110610d8d57fe5b600160a060020a03909216602092830290910190910152600191909101905b600101610d08565b81604051805910610dc25750595b90808252806020026020018201604052509350600090505b81811015610e2357828181518110610dee57fe5b90602001906020020151848281518110610e0457fe5b600160a060020a03909216602092830290910190910152600101610dda565b505050919050565b60055481565b30600160a060020a031633600160a060020a0316141515610e5157600080fd5b6003548160328211801590610e665750818111155b8015610e7157508015155b8015610e7c57508115155b1515610e8757600080fd5b60048390557fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a8360405190815260200160405180910390a1505050565b33600160a060020a03811660009081526002602052604090205460ff161515610eec57600080fd5b6000828152602081905260409020548290600160a060020a03161515610f1157600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff1615610f4557600080fd5b6000858152600160208181526040808420600160a060020a033316808652925292839020805460ff191690921790915586917f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef905160405180910390a3610fab8561118a565b5050505050565b6000610fbf848484611345565b9050610fca81610ec4565b9392505050565b603281565b60045481565b600030600160a060020a031633600160a060020a0316141515610ffe57600080fd5b600160a060020a038316600090815260026020526040902054839060ff16151561102757600080fd5b600160a060020a038316600090815260026020526040902054839060ff161561104f57600080fd5b600092505b6003548310156110e85784600160a060020a031660038481548110151561107757fe5b600091825260209091200154600160a060020a031614156110dd57836003848154811015156110a257fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556110e8565b600190920191611054565b600160a060020a03808616600081815260026020526040808220805460ff199081169091559388168252908190208054909316600117909255907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90905160405180910390a283600160a060020a03167ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25050505050565b33600160a060020a03811660009081526002602052604081205490919060ff1615156111b557600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff1615156111ea57600080fd5b600085815260208190526040902060030154859060ff161561120b57600080fd5b61121486610965565b1561133d576000868152602081905260409081902060038101805460ff19166001908117909155815490820154919750600160a060020a03169160028801905180828054600181600116156101000203166002900480156112b65780601f1061128b576101008083540402835291602001916112b6565b820191906000526020600020905b81548152906001019060200180831161129957829003601f168201915b505091505060006040518083038185875af1925050501561130357857f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7560405160405180910390a261133d565b857f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923660405160405180910390a260038501805460ff191690555b505050505050565b600083600160a060020a038116151561135d57600080fd5b600554915060806040519081016040908152600160a060020a0387168252602080830187905281830186905260006060840181905285815290819052208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015181600101556040820151816002019080516113e892916020019061147d565b506060820151600391909101805460ff191691151591909117905550600580546001019055817fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5160405160405180910390a2509392505050565b815481835581811511611466576000838152602090206114669181019083016114fb565b505050565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106114be57805160ff19168380011785556114eb565b828001600101855582156114eb579182015b828111156114eb5782518255916020019190600101906114d0565b506114f79291506114fb565b5090565b610b9c91905b808211156114f757600081556001016115015600a165627a7a72305820d42d65ce3cd184b1c0e98ae5fe9841a03ddd21c504e98c38f8d89df83b2b6be60029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x78b26c076ef10b04070ffc86c9b244b91eb38d2b654f4e2e617edf56d2d830d8": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b": "0x0000000000000000000000006aaf1ac2c2afdd2bca4fea2dc471d467781418c3", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c": "0x000000000000000000000000c476ce3240bb44e36746f74001d8a0d62bc917f6", + "0xc420d2a03bcba1d1b98a4b32ba6d074d885b5a5f366e4de6b9a7fd70184950cd": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "balance": "0x0" + }, + "54d4369719bf06b194c32f8be57e2605dd5b59e5": { + "balance": "0x7912752226cec5131e000000" + }, + "746249c61f5832c5eed53172776b460491bdcd5c": { + "code": "0x60606040526004361061011c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c278114610165578063173825d91461019757806320ea8d86146101b65780632f54bf6e146101cc5780633411c81c146101ff57806354741525146102215780637065cb4814610250578063784547a71461026f5780638b51d13f146102855780639ace38c21461029b578063a0e67e2b14610349578063a8abe69a146103af578063b5dc40c3146103d2578063b77bf600146103e8578063ba51a6df146103fb578063c01a8c8414610411578063c642747414610427578063d74f8edd1461048c578063dc8452cd1461049f578063e20056e6146104b2578063ee22610b146104d7575b60003411156101635733600160a060020a03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405190815260200160405180910390a25b005b341561017057600080fd5b61017b6004356104ed565b604051600160a060020a03909116815260200160405180910390f35b34156101a257600080fd5b610163600160a060020a0360043516610515565b34156101c157600080fd5b6101636004356106aa565b34156101d757600080fd5b6101eb600160a060020a0360043516610788565b604051901515815260200160405180910390f35b341561020a57600080fd5b6101eb600435600160a060020a036024351661079d565b341561022c57600080fd5b61023e600435151560243515156107bd565b60405190815260200160405180910390f35b341561025b57600080fd5b610163600160a060020a0360043516610829565b341561027a57600080fd5b6101eb600435610965565b341561029057600080fd5b61023e6004356109e9565b34156102a657600080fd5b6102b1600435610a58565b604051600160a060020a038516815260208101849052811515606082015260806040820181815290820184818151815260200191508051906020019080838360005b8381101561030b5780820151838201526020016102f3565b50505050905090810190601f1680156103385780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b341561035457600080fd5b61035c610b36565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561039b578082015183820152602001610383565b505050509050019250505060405180910390f35b34156103ba57600080fd5b61035c60043560243560443515156064351515610b9f565b34156103dd57600080fd5b61035c600435610cc7565b34156103f357600080fd5b61023e610e2b565b341561040657600080fd5b610163600435610e31565b341561041c57600080fd5b610163600435610ec4565b341561043257600080fd5b61023e60048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610fb295505050505050565b341561049757600080fd5b61023e610fd1565b34156104aa57600080fd5b61023e610fd6565b34156104bd57600080fd5b610163600160a060020a0360043581169060243516610fdc565b34156104e257600080fd5b61016360043561118a565b60038054829081106104fb57fe5b600091825260209091200154600160a060020a0316905081565b600030600160a060020a031633600160a060020a031614151561053757600080fd5b600160a060020a038216600090815260026020526040902054829060ff16151561056057600080fd5b600160a060020a0383166000908152600260205260408120805460ff1916905591505b600354600019018210156106435782600160a060020a03166003838154811015156105aa57fe5b600091825260209091200154600160a060020a03161415610638576003805460001981019081106105d757fe5b60009182526020909120015460038054600160a060020a0390921691849081106105fd57fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055610643565b600190910190610583565b6003805460001901906106569082611442565b50600354600454111561066f5760035461066f90610e31565b82600160a060020a03167f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9060405160405180910390a2505050565b33600160a060020a03811660009081526002602052604090205460ff1615156106d257600080fd5b600082815260016020908152604080832033600160a060020a038116855292529091205483919060ff16151561070757600080fd5b600084815260208190526040902060030154849060ff161561072857600080fd5b6000858152600160209081526040808320600160a060020a033316808552925291829020805460ff1916905586917ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9905160405180910390a35050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b600554811015610822578380156107ea575060008181526020819052604090206003015460ff16155b8061080e575082801561080e575060008181526020819052604090206003015460ff165b1561081a576001820191505b6001016107c1565b5092915050565b30600160a060020a031633600160a060020a031614151561084957600080fd5b600160a060020a038116600090815260026020526040902054819060ff161561087157600080fd5b81600160a060020a038116151561088757600080fd5b600380549050600101600454603282111580156108a45750818111155b80156108af57508015155b80156108ba57508115155b15156108c557600080fd5b600160a060020a0385166000908152600260205260409020805460ff1916600190811790915560038054909181016108fd8382611442565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387169081179091557ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25050505050565b600080805b6003548110156109e2576000848152600160205260408120600380549192918490811061099357fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff16156109c7576001820191505b6004548214156109da57600192506109e2565b60010161096a565b5050919050565b6000805b600354811015610a525760008381526001602052604081206003805491929184908110610a1657fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610a4a576001820191505b6001016109ed565b50919050565b60006020528060005260406000206000915090508060000160009054906101000a9004600160a060020a031690806001015490806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b235780601f10610af857610100808354040283529160200191610b23565b820191906000526020600020905b815481529060010190602001808311610b0657829003601f168201915b5050506003909301549192505060ff1684565b610b3e61146b565b6003805480602002602001604051908101604052809291908181526020018280548015610b9457602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610b76575b505050505090505b90565b610ba761146b565b610baf61146b565b600080600554604051805910610bc25750595b9080825280602002602001820160405250925060009150600090505b600554811015610c5757858015610c07575060008181526020819052604090206003015460ff16155b80610c2b5750848015610c2b575060008181526020819052604090206003015460ff165b15610c4f5780838381518110610c3d57fe5b60209081029091010152600191909101905b600101610bde565b878703604051805910610c675750595b908082528060200260200182016040525093508790505b86811015610cbc57828181518110610c9257fe5b906020019060200201518489830381518110610caa57fe5b60209081029091010152600101610c7e565b505050949350505050565b610ccf61146b565b610cd761146b565b6003546000908190604051805910610cec5750595b9080825280602002602001820160405250925060009150600090505b600354811015610db45760008581526001602052604081206003805491929184908110610d3157fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610dac576003805482908110610d6c57fe5b600091825260209091200154600160a060020a0316838381518110610d8d57fe5b600160a060020a03909216602092830290910190910152600191909101905b600101610d08565b81604051805910610dc25750595b90808252806020026020018201604052509350600090505b81811015610e2357828181518110610dee57fe5b90602001906020020151848281518110610e0457fe5b600160a060020a03909216602092830290910190910152600101610dda565b505050919050565b60055481565b30600160a060020a031633600160a060020a0316141515610e5157600080fd5b6003548160328211801590610e665750818111155b8015610e7157508015155b8015610e7c57508115155b1515610e8757600080fd5b60048390557fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a8360405190815260200160405180910390a1505050565b33600160a060020a03811660009081526002602052604090205460ff161515610eec57600080fd5b6000828152602081905260409020548290600160a060020a03161515610f1157600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff1615610f4557600080fd5b6000858152600160208181526040808420600160a060020a033316808652925292839020805460ff191690921790915586917f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef905160405180910390a3610fab8561118a565b5050505050565b6000610fbf848484611345565b9050610fca81610ec4565b9392505050565b603281565b60045481565b600030600160a060020a031633600160a060020a0316141515610ffe57600080fd5b600160a060020a038316600090815260026020526040902054839060ff16151561102757600080fd5b600160a060020a038316600090815260026020526040902054839060ff161561104f57600080fd5b600092505b6003548310156110e85784600160a060020a031660038481548110151561107757fe5b600091825260209091200154600160a060020a031614156110dd57836003848154811015156110a257fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556110e8565b600190920191611054565b600160a060020a03808616600081815260026020526040808220805460ff199081169091559388168252908190208054909316600117909255907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90905160405180910390a283600160a060020a03167ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25050505050565b33600160a060020a03811660009081526002602052604081205490919060ff1615156111b557600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff1615156111ea57600080fd5b600085815260208190526040902060030154859060ff161561120b57600080fd5b61121486610965565b1561133d576000868152602081905260409081902060038101805460ff19166001908117909155815490820154919750600160a060020a03169160028801905180828054600181600116156101000203166002900480156112b65780601f1061128b576101008083540402835291602001916112b6565b820191906000526020600020905b81548152906001019060200180831161129957829003601f168201915b505091505060006040518083038185875af1925050501561130357857f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7560405160405180910390a261133d565b857f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923660405160405180910390a260038501805460ff191690555b505050505050565b600083600160a060020a038116151561135d57600080fd5b600554915060806040519081016040908152600160a060020a0387168252602080830187905281830186905260006060840181905285815290819052208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015181600101556040820151816002019080516113e892916020019061147d565b506060820151600391909101805460ff191691151591909117905550600580546001019055817fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5160405160405180910390a2509392505050565b815481835581811511611466576000838152602090206114669181019083016114fb565b505050565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106114be57805160ff19168380011785556114eb565b828001600101855582156114eb579182015b828111156114eb5782518255916020019190600101906114d0565b506114f79291506114fb565b5090565b610b9c91905b808211156114f757600081556001016115015600a165627a7a72305820d42d65ce3cd184b1c0e98ae5fe9841a03ddd21c504e98c38f8d89df83b2b6be60029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x53a74cb8e1409f2fa6885f50a9cd170366c9e7e52c8ca5e4c8268ec2e66088e0": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xb689ca06605d85e946f5fb4cd76cafa04abd8cd4d1cd4e2e8a559464b7f2b8ca": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b": "0x000000000000000000000000ca97040ea64b0eb127370b92f6941e9d0cb87134", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c": "0x000000000000000000000000d1c8103106710ba08b5596c0ed115b508c879c74" + }, + "balance": "0x0" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" +} \ No newline at end of file diff --git a/genesis/testnet.json b/genesis/testnet.json new file mode 100644 index 0000000000..6f643f78e9 --- /dev/null +++ b/genesis/testnet.json @@ -0,0 +1,142 @@ +{ + "config": { + "chainId": 51, + "homesteadBlock": 1, + "eip150Block": 2, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 3, + "eip158Block": 3, + "byzantiumBlock": 4, + "eip1559Block": 71550000, + "XDPoS": { + "period": 2, + "epoch": 900, + "reward": 5000, + "rewardCheckpoint": 900, + "gap": 450, + "foudationWalletAddr": "xdc746249c61f5832c5eed53172776b460491bdcd5c" + } + }, + "nonce": "0x0", + "timestamp": "0x5d02164f", + "extraData": "0x00000000000000000000000000000000000000000000000000000000000000003ea0a3555f9b1de983572bff6444aeb1899ec58c4f7900282f3d371d585ab1361205b0940ab1789c942a5885a8844ee5587c8ac5e371fc39ffe618960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x47b760", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "xdc0000000000000000000000000000000000000000", + "alloc": { + "0000000000000000000000000000000000000000": { + "balance": "0x0" + }, + "0000000000000000000000000000000000000001": { + "balance": "0x0" + }, + "0000000000000000000000000000000000000088": { + "code": "0x606060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063012679511461019b578063025e7c27146101c957806302aa9be21461022c57806306a49fce1461026e5780630db02622146102d85780630e3e4fb81461030157806315febd68146103715780632a3640b1146103a85780632d15cc041461042a5780632f9c4bba146104b8578063302b687214610522578063326586521461058e5780633477ee2e14610640578063441a3e70146106a357806358e7525f146106cf5780635b860d271461071c5780635b9cd8cc146107695780636dd7d8ea1461082457806372e44a3814610852578063a9a981a31461089f578063a9ff959e146108c8578063ae6e43f5146108f1578063b642facd1461092a578063c45607df146109a3578063d09f1ab4146109f0578063d161c76714610a19578063d51b9e9314610a42578063d55b7dff14610a93578063ef18374a14610abc578063f2ee3c7d14610ae5578063f5c9512514610b1e578063f8ac9dd514610b4c575b600080fd5b6101c7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b75565b005b34156101d457600080fd5b6101ea60048080359060200190919050506111fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561023757600080fd5b61026c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061123b565b005b341561027957600080fd5b610281611796565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156102c45780820151818401526020810190506102a9565b505050509050019250505060405180910390f35b34156102e357600080fd5b6102eb61182a565b6040518082815260200191505060405180910390f35b341561030c57600080fd5b610357600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611830565b604051808215151515815260200191505060405180910390f35b341561037c57600080fd5b610392600480803590602001909190505061185f565b6040518082815260200191505060405180910390f35b34156103b357600080fd5b6103e8600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506118bb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561043557600080fd5b610461600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611909565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156104a4578082015181840152602081019050610489565b505050509050019250505060405180910390f35b34156104c357600080fd5b6104cb6119dc565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561050e5780820151818401526020810190506104f3565b505050509050019250505060405180910390f35b341561052d57600080fd5b610578600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a79565b6040518082815260200191505060405180910390f35b341561059957600080fd5b6105c5600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611b03565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106055780820151818401526020810190506105ea565b50505050905090810190601f1680156106325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561064b57600080fd5b6106616004808035906020019091905050611da2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156106ae57600080fd5b6106cd6004808035906020019091908035906020019091905050611de1565b005b34156106da57600080fd5b610706600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061208d565b6040518082815260200191505060405180910390f35b341561072757600080fd5b610753600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506120d9565b6040518082815260200191505060405180910390f35b341561077457600080fd5b6107a9600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506121a1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107e95780820151818401526020810190506107ce565b50505050905090810190601f1680156108165780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610850600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061226a565b005b341561085d57600080fd5b610889600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612653565b6040518082815260200191505060405180910390f35b34156108aa57600080fd5b6108b261266b565b6040518082815260200191505060405180910390f35b34156108d357600080fd5b6108db612671565b6040518082815260200191505060405180910390f35b34156108fc57600080fd5b610928600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612677565b005b341561093557600080fd5b610961600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612c36565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109ae57600080fd5b6109da600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612ca2565b6040518082815260200191505060405180910390f35b34156109fb57600080fd5b610a03612cee565b6040518082815260200191505060405180910390f35b3415610a2457600080fd5b610a2c612cf4565b6040518082815260200191505060405180910390f35b3415610a4d57600080fd5b610a79600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612cfa565b604051808215151515815260200191505060405180910390f35b3415610a9e57600080fd5b610aa6612d53565b6040518082815260200191505060405180910390f35b3415610ac757600080fd5b610acf612d59565b6040518082815260200191505060405180910390f35b3415610af057600080fd5b610b1c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612d63565b005b3415610b2957600080fd5b610b4a600480803590602001908201803590602001919091929050506134f1565b005b3415610b5757600080fd5b610b5f6135f0565b6040518082815260200191505060405180910390f35b6000600b543410151515610b8857600080fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050141580610c1c57506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050115b1515610c2757600080fd5b81600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151515610c8457600080fd5b610cd934600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546135f690919063ffffffff16565b915060088054806001018281610cef919061362d565b9160005260206000209001600085909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506060604051908101604052803373ffffffffffffffffffffffffffffffffffffffff16815260200160011515815260200183815250600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555060408201518160010155905050610eb834600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5160016009546135f690919063ffffffff16565b6009819055506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905014156110185760078054806001018281610fb6919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600a600081548092919060010191905055505b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806001018281611069919061362d565b9160005260206000209001600085909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806001018281611109919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550507f7635f1d87b47fba9f2b09e56eb4be75cca030e0cb179c1602ac9261d39a8f5c1338434604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b60078181548110151561120b57fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000828280600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156112cd57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561140657600b546113f882600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361490919063ffffffff16565b1015151561140557600080fd5b5b61145b84600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461361490919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061153384600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461361490919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506115cb43600f546135f690919063ffffffff16565b9250611632846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020546135f690919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000858152602001908152602001600020819055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180548060010182816116db9190613659565b9160005260206000209001600085909190915055507faa0e554f781c3c3b2be110a0557f260f11af9a8aa2c64bc1e7a31dbb21e32fa2338686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050505050565b61179e613685565b600880548060200260200160405190810160405280929190818152602001828054801561182057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116117d6575b5050505050905090565b600a5481565b60056020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000838152602001908152602001600020549050919050565b6006602052816000526040600020818154811015156118d657fe5b90600052602060002090016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611911613685565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156119d057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611986575b50505050509050919050565b6119e4613699565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611a6f57602002820191906000526020600020905b815481526020019060010190808311611a5b575b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b0b6136ad565b611b1482612cfa565b15611c655760036000611b2684612c36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600160036000611b6f86612c36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815481101515611bba57fe5b90600052602060002090018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c595780601f10611c2e57610100808354040283529160200191611c59565b820191906000526020600020905b815481529060010190602001808311611c3c57829003601f168201915b50505050509050611d9d565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905003815481101515611cf657fe5b90600052602060002090018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d955780601f10611d6a57610100808354040283529160200191611d95565b820191906000526020600020905b815481529060010190602001808311611d7857829003601f168201915b505050505090505b919050565b600881815481101515611db157fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008282600082111515611df457600080fd5b814310151515611e0357600080fd5b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002054111515611e6457600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611eb357fe5b906000526020600020900154141515611ecb57600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008681526020019081526020016000205492506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020600090556000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010184815481101515611fc457fe5b9060005260206000209001600090553373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050151561201357600080fd5b7ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568338685604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b60008082600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151561213857600080fd5b61214184612c36565b915061214b612d59565b6064600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540281151561219757fe5b0492505050919050565b6003602052816000526040600020818154811015156121bc57fe5b9060005260206000209001600091509150508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122625780601f1061223757610100808354040283529160200191612262565b820191906000526020600020905b81548152906001019060200180831161224557829003601f168201915b505050505081565b600c54341015151561227b57600080fd5b80600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff1615156122d757600080fd5b61232c34600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546135f690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561249b57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480600101828161244b919061362d565b9160005260206000209001600033909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b61252d34600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f66a9138482c99e9baf08860110ef332cc0c23b4a199a53593d8db0fc8f96fbfc338334604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b60046020528060005260406000206000915090505481565b60095481565b600f5481565b6000806000833373ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561271957600080fd5b84600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff16151561277557600080fd5b6000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160146101000a81548160ff0219169083151502179055506127e6600160095461361490919063ffffffff16565b600981905550600094505b6008805490508510156128bb578573ffffffffffffffffffffffffffffffffffffffff1660088681548110151561282457fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156128ae5760088581548110151561287b57fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556128bb565b84806001019550506127f1565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054935061299284600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461361490919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a7243600e546135f690919063ffffffff16565b9250612ad9846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868152602001908152602001600020546135f690919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000858152602001908152602001600020819055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018054806001018281612b829190613659565b9160005260206000209001600085909190915055507f4edf3e325d0063213a39f9085522994a1c44bea5f39e7d63ef61260a1e58c6d33387604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1505050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600d5481565b600e5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff169050919050565b600b5481565b6000600a54905090565b600080612d6e613685565b600080600033600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff161515612dcf57600080fd5b87600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160149054906101000a900460ff161515612e2b57600080fd5b612e3433612c36565b9750612e3f89612c36565b9650600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151515612ed757600080fd5b6001600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550604b612fc4612d59565b6064600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540281151561301057fe5b041015156134e65760016008805490500360405180591061302e5750595b9080825280602002602001820160405250955060009450600093505b600880549050841015613357578673ffffffffffffffffffffffffffffffffffffffff166130b160088681548110151561308057fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612c36565b73ffffffffffffffffffffffffffffffffffffffff16141561334a576130e3600160095461361490919063ffffffff16565b6009819055506008848154811015156130f857fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868680600101975081518110151561313857fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060088481548110151561318357fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600160006008868154811015156131c457fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff021916905560018201600090555050600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006132bb91906136c1565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061330691906136e2565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090555b838060010194505061304a565b600092505b600780549050831015613439578673ffffffffffffffffffffffffffffffffffffffff1660078481548110151561338f57fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561342c576007838154811015156133e657fe5b906000526020600020900160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600a6000815480929190600190039190505550613439565b828060010193505061335c565b7fe18d61a5bf4aa2ab40afc88aa9039d27ae17ff4ec1c65f5f414df6f02ce8b35e8787604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156134d15780820151818401526020810190506134b6565b50505050905001935050505060405180910390a15b505050505050505050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060010182816135429190613703565b91600052602060002090016000848490919290919250919061356592919061372f565b50507f949360d814b28a3b393a68909efe1fee120ee09cac30f360a0f80ab5415a611a338383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437820191505094505050505060405180910390a15050565b600c5481565b600080828401905083811015151561360a57fe5b8091505092915050565b600082821115151561362257fe5b818303905092915050565b8154818355818115116136545781836000526020600020918201910161365391906137af565b5b505050565b8154818355818115116136805781836000526020600020918201910161367f91906137af565b5b505050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b50805460008255906000526020600020908101906136df91906137d4565b50565b508054600082559060005260206000209081019061370091906137af565b50565b81548183558181151161372a5781836000526020600020918201910161372991906137d4565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061377057803560ff191683800117855561379e565b8280016001018555821561379e579182015b8281111561379d578235825591602001919060010190613782565b5b5090506137ab91906137af565b5090565b6137d191905b808211156137cd5760008160009055506001016137b5565b5090565b90565b6137fd91905b808211156137f957600081816137f09190613800565b506001016137da565b5090565b90565b50805460018160011615610100020316600290046000825580601f106138265750613845565b601f01602090049060005260206000209081019061384491906137af565b5b505600a165627a7a72305820f5bbb127b52ce86c873faef85cff176563476a5e49a3d88eaa9a06a8f432c9080029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000007": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x000000000000000000000000000000000000000000000000000000000000000b": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x000000000000000000000000000000000000000000000000000000000000000c": "0x00000000000000000000000000000000000000000000054b40b1f852bda00000", + "0x000000000000000000000000000000000000000000000000000000000000000d": "0x0000000000000000000000000000000000000000000000000000000000000012", + "0x000000000000000000000000000000000000000000000000000000000000000e": "0x000000000000000000000000000000000000000000000000000000000013c680", + "0x000000000000000000000000000000000000000000000000000000000000000f": "0x0000000000000000000000000000000000000000000000000000000000069780", + "0x09fc3df44a245ec28768518fb63309d9e12db561eaec408952fddc4ff42fc7ca": "0x000000000000000000000000a65010026b83368ca05df6e8b467985d6de3eac5", + "0x0bf1ba111e6cd6ef515b709fb01626b1b684849c7c86334117e4e244d9398c50": "0x0000000000000000000000003ea0a3555f9b1de983572bff6444aeb1899ec58c", + "0x0bf1ba111e6cd6ef515b709fb01626b1b684849c7c86334117e4e244d9398c51": "0x0000000000000000000000004f7900282f3d371d585ab1361205b0940ab1789c", + "0x0bf1ba111e6cd6ef515b709fb01626b1b684849c7c86334117e4e244d9398c52": "0x000000000000000000000000942a5885a8844ee5587c8ac5e371fc39ffe61896", + "0x13c888c9562eb81ccff6d596e621669d194f6656ddfa86cf29bccb5c96b4d841": "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x24ee73b4a2483f83e0887c9042498ae071a6d279e16a7630589cc15fefae6a12": "0x000000000000000000000001a65010026b83368ca05df6e8b467985d6de3eac5", + "0x24ee73b4a2483f83e0887c9042498ae071a6d279e16a7630589cc15fefae6a13": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x2a5e4044c6b73b0e935aa29d68f1e9d861cb7b22a0230606752a0bc2b54b32e1": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x4ae354c2223c243669c7584859f2da59d546f6bb535e96d10c69fe54a2c7db21": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x638c8d45c0309321b2c1ec0596dae8b32bc8743197a1de62bed5ae2a7f29ab07": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x7255e757c72d18a66cd7a49e068b1c888cf13249eb5e6cf7c863b5c964fad035": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x862cbde24894ee8bc8de0c30714e8e5c84b301f622ba6e47c99d40a93dc46000": "0x000000000000000000000001a65010026b83368ca05df6e8b467985d6de3eac5", + "0x862cbde24894ee8bc8de0c30714e8e5c84b301f622ba6e47c99d40a93dc46001": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0xa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688": "0x000000000000000000000000a65010026b83368ca05df6e8b467985d6de3eac5", + "0xa89068bea7f13f3884c78535548e42254e66ecf0177669c379a91e2f6622f802": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0xdc81fadff555cf59bd93411af8f17d64aadf882a703279b21c0df50b36f4192e": "0x000000000000000000000001a65010026b83368ca05df6e8b467985d6de3eac5", + "0xdc81fadff555cf59bd93411af8f17d64aadf882a703279b21c0df50b36f4192f": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0xe1dcb2218e498dab1fa43398f33a0d96770cf83baeefa7719271ccd121f16b1f": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xe50a63d300df7437f442d7436e95f8b440155156d1bcade02b197f0e10f70820": "0x000000000000000000000000a65010026b83368ca05df6e8b467985d6de3eac5", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3": "0x0000000000000000000000003ea0a3555f9b1de983572bff6444aeb1899ec58c", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4": "0x0000000000000000000000004f7900282f3d371d585ab1361205b0940ab1789c", + "0xf3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee5": "0x000000000000000000000000942a5885a8844ee5587c8ac5e371fc39ffe61896", + "0xfb0211a1cba0819417a7cffd5aee1c4d097141b54cabbfc40d342a062225bbb0": "0x000000000000000000000000a65010026b83368ca05df6e8b467985d6de3eac5" + }, + "balance": "0x18d0bf423c03d8de000000" + }, + "0000000000000000000000000000000000000089": { + "code": "0x6060604052600436106100565763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663e341eaa4811461005b578063e7ec6aef14610076578063f4145a83146100df575b600080fd5b341561006657600080fd5b610074600435602435610104565b005b341561008157600080fd5b61008c600435610227565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156100cb5780820151838201526020016100b3565b505050509050019250505060405180910390f35b34156100ea57600080fd5b6100f26102ac565b60405190815260200160405180910390f35b438290101561011257600080fd5b600280546101289184910263ffffffff6102b216565b43111561013457600080fd5b600082815260016020819052604090912080549091810161015583826102c8565b5060009182526020808320919091018390558282528190526040902080546001810161018183826102c8565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff19163373ffffffffffffffffffffffffffffffffffffffff8116919091179091557f62855fa22e051687c32ac285857751f6d3f2c100c72756d8d30cb7ecb1f64f5490838360405173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091526040808301919091526060909101905180910390a15050565b61022f6102f1565b600082815260208181526040918290208054909290918281020190519081016040528092919081815260200182805480156102a057602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610275575b50505050509050919050565b60025481565b6000828201838110156102c157fe5b9392505050565b8154818355818115116102ec576000838152602090206102ec918101908301610303565b505050565b60206040519081016040526000815290565b61032191905b8082111561031d5760008155600101610309565b5090565b905600a165627a7a72305820a8ceddaea8e4ae00991e2ae81c8c88e160dd8770f255523282c24c2df4c30ec70029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000384" + }, + "balance": "0x0" + }, + "0000000000000000000000000000000000000090": { + "code": "0x6060604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663284180fc811461006657806334d38600146100d8578063d442d6cc14610129578063e11f5ba21461015a575b600080fd5b341561007157600080fd5b610085600160a060020a0360043516610170565b60405160208082528190810183818151815260200191508051906020019060200280838360005b838110156100c45780820151838201526020016100ac565b505050509050019250505060405180910390f35b34156100e357600080fd5b61012760046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496506101f395505050505050565b005b341561013457600080fd5b610148600160a060020a0360043516610243565b60405190815260200160405180910390f35b341561016557600080fd5b61012760043561025e565b61017861028e565b60008083600160a060020a0316600160a060020a031681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156101e757602002820191906000526020600020905b815481526001909101906020018083116101d2575b50505050509050919050565b610384430661032081101561020757600080fd5b610352811061021557600080fd5b600160a060020a033316600090815260208190526040902082805161023e9291602001906102a0565b505050565b600160a060020a031660009081526001602052604090205490565b610384430661035281101561027257600080fd5b50600160a060020a033316600090815260016020526040902055565b60206040519081016040526000815290565b8280548282559060005260206000209081019282156102dd579160200282015b828111156102dd57825182556020909201916001909101906102c0565b506102e99291506102ed565b5090565b61030791905b808211156102e957600081556001016102f3565b905600a165627a7a7230582034991c8dc4001fc254f3ba2811c05d2e7d29bee3908946ca56d1545b2c852de20029", + "balance": "0x0" + }, + "0000000000000000000000000000000000000099": { + "code": "0x60606040526004361061011c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c278114610165578063173825d91461019757806320ea8d86146101b65780632f54bf6e146101cc5780633411c81c146101ff57806354741525146102215780637065cb4814610250578063784547a71461026f5780638b51d13f146102855780639ace38c21461029b578063a0e67e2b14610349578063a8abe69a146103af578063b5dc40c3146103d2578063b77bf600146103e8578063ba51a6df146103fb578063c01a8c8414610411578063c642747414610427578063d74f8edd1461048c578063dc8452cd1461049f578063e20056e6146104b2578063ee22610b146104d7575b60003411156101635733600160a060020a03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405190815260200160405180910390a25b005b341561017057600080fd5b61017b6004356104ed565b604051600160a060020a03909116815260200160405180910390f35b34156101a257600080fd5b610163600160a060020a0360043516610515565b34156101c157600080fd5b6101636004356106aa565b34156101d757600080fd5b6101eb600160a060020a0360043516610788565b604051901515815260200160405180910390f35b341561020a57600080fd5b6101eb600435600160a060020a036024351661079d565b341561022c57600080fd5b61023e600435151560243515156107bd565b60405190815260200160405180910390f35b341561025b57600080fd5b610163600160a060020a0360043516610829565b341561027a57600080fd5b6101eb600435610965565b341561029057600080fd5b61023e6004356109e9565b34156102a657600080fd5b6102b1600435610a58565b604051600160a060020a038516815260208101849052811515606082015260806040820181815290820184818151815260200191508051906020019080838360005b8381101561030b5780820151838201526020016102f3565b50505050905090810190601f1680156103385780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b341561035457600080fd5b61035c610b36565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561039b578082015183820152602001610383565b505050509050019250505060405180910390f35b34156103ba57600080fd5b61035c60043560243560443515156064351515610b9f565b34156103dd57600080fd5b61035c600435610cc7565b34156103f357600080fd5b61023e610e2b565b341561040657600080fd5b610163600435610e31565b341561041c57600080fd5b610163600435610ec4565b341561043257600080fd5b61023e60048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610fb295505050505050565b341561049757600080fd5b61023e610fd1565b34156104aa57600080fd5b61023e610fd6565b34156104bd57600080fd5b610163600160a060020a0360043581169060243516610fdc565b34156104e257600080fd5b61016360043561118a565b60038054829081106104fb57fe5b600091825260209091200154600160a060020a0316905081565b600030600160a060020a031633600160a060020a031614151561053757600080fd5b600160a060020a038216600090815260026020526040902054829060ff16151561056057600080fd5b600160a060020a0383166000908152600260205260408120805460ff1916905591505b600354600019018210156106435782600160a060020a03166003838154811015156105aa57fe5b600091825260209091200154600160a060020a03161415610638576003805460001981019081106105d757fe5b60009182526020909120015460038054600160a060020a0390921691849081106105fd57fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055610643565b600190910190610583565b6003805460001901906106569082611442565b50600354600454111561066f5760035461066f90610e31565b82600160a060020a03167f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9060405160405180910390a2505050565b33600160a060020a03811660009081526002602052604090205460ff1615156106d257600080fd5b600082815260016020908152604080832033600160a060020a038116855292529091205483919060ff16151561070757600080fd5b600084815260208190526040902060030154849060ff161561072857600080fd5b6000858152600160209081526040808320600160a060020a033316808552925291829020805460ff1916905586917ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9905160405180910390a35050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b600554811015610822578380156107ea575060008181526020819052604090206003015460ff16155b8061080e575082801561080e575060008181526020819052604090206003015460ff165b1561081a576001820191505b6001016107c1565b5092915050565b30600160a060020a031633600160a060020a031614151561084957600080fd5b600160a060020a038116600090815260026020526040902054819060ff161561087157600080fd5b81600160a060020a038116151561088757600080fd5b600380549050600101600454603282111580156108a45750818111155b80156108af57508015155b80156108ba57508115155b15156108c557600080fd5b600160a060020a0385166000908152600260205260409020805460ff1916600190811790915560038054909181016108fd8382611442565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387169081179091557ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25050505050565b600080805b6003548110156109e2576000848152600160205260408120600380549192918490811061099357fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff16156109c7576001820191505b6004548214156109da57600192506109e2565b60010161096a565b5050919050565b6000805b600354811015610a525760008381526001602052604081206003805491929184908110610a1657fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610a4a576001820191505b6001016109ed565b50919050565b60006020528060005260406000206000915090508060000160009054906101000a9004600160a060020a031690806001015490806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b235780601f10610af857610100808354040283529160200191610b23565b820191906000526020600020905b815481529060010190602001808311610b0657829003601f168201915b5050506003909301549192505060ff1684565b610b3e61146b565b6003805480602002602001604051908101604052809291908181526020018280548015610b9457602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610b76575b505050505090505b90565b610ba761146b565b610baf61146b565b600080600554604051805910610bc25750595b9080825280602002602001820160405250925060009150600090505b600554811015610c5757858015610c07575060008181526020819052604090206003015460ff16155b80610c2b5750848015610c2b575060008181526020819052604090206003015460ff165b15610c4f5780838381518110610c3d57fe5b60209081029091010152600191909101905b600101610bde565b878703604051805910610c675750595b908082528060200260200182016040525093508790505b86811015610cbc57828181518110610c9257fe5b906020019060200201518489830381518110610caa57fe5b60209081029091010152600101610c7e565b505050949350505050565b610ccf61146b565b610cd761146b565b6003546000908190604051805910610cec5750595b9080825280602002602001820160405250925060009150600090505b600354811015610db45760008581526001602052604081206003805491929184908110610d3157fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610dac576003805482908110610d6c57fe5b600091825260209091200154600160a060020a0316838381518110610d8d57fe5b600160a060020a03909216602092830290910190910152600191909101905b600101610d08565b81604051805910610dc25750595b90808252806020026020018201604052509350600090505b81811015610e2357828181518110610dee57fe5b90602001906020020151848281518110610e0457fe5b600160a060020a03909216602092830290910190910152600101610dda565b505050919050565b60055481565b30600160a060020a031633600160a060020a0316141515610e5157600080fd5b6003548160328211801590610e665750818111155b8015610e7157508015155b8015610e7c57508115155b1515610e8757600080fd5b60048390557fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a8360405190815260200160405180910390a1505050565b33600160a060020a03811660009081526002602052604090205460ff161515610eec57600080fd5b6000828152602081905260409020548290600160a060020a03161515610f1157600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff1615610f4557600080fd5b6000858152600160208181526040808420600160a060020a033316808652925292839020805460ff191690921790915586917f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef905160405180910390a3610fab8561118a565b5050505050565b6000610fbf848484611345565b9050610fca81610ec4565b9392505050565b603281565b60045481565b600030600160a060020a031633600160a060020a0316141515610ffe57600080fd5b600160a060020a038316600090815260026020526040902054839060ff16151561102757600080fd5b600160a060020a038316600090815260026020526040902054839060ff161561104f57600080fd5b600092505b6003548310156110e85784600160a060020a031660038481548110151561107757fe5b600091825260209091200154600160a060020a031614156110dd57836003848154811015156110a257fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556110e8565b600190920191611054565b600160a060020a03808616600081815260026020526040808220805460ff199081169091559388168252908190208054909316600117909255907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90905160405180910390a283600160a060020a03167ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25050505050565b33600160a060020a03811660009081526002602052604081205490919060ff1615156111b557600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff1615156111ea57600080fd5b600085815260208190526040902060030154859060ff161561120b57600080fd5b61121486610965565b1561133d576000868152602081905260409081902060038101805460ff19166001908117909155815490820154919750600160a060020a03169160028801905180828054600181600116156101000203166002900480156112b65780601f1061128b576101008083540402835291602001916112b6565b820191906000526020600020905b81548152906001019060200180831161129957829003601f168201915b505091505060006040518083038185875af1925050501561130357857f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7560405160405180910390a261133d565b857f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923660405160405180910390a260038501805460ff191690555b505050505050565b600083600160a060020a038116151561135d57600080fd5b600554915060806040519081016040908152600160a060020a0387168252602080830187905281830186905260006060840181905285815290819052208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015181600101556040820151816002019080516113e892916020019061147d565b506060820151600391909101805460ff191691151591909117905550600580546001019055817fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5160405160405180910390a2509392505050565b815481835581811511611466576000838152602090206114669181019083016114fb565b505050565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106114be57805160ff19168380011785556114eb565b828001600101855582156114eb579182015b828111156114eb5782518255916020019190600101906114d0565b506114f79291506114fb565b5090565b610b9c91905b808211156114f757600081556001016115015600a165627a7a72305820d42d65ce3cd184b1c0e98ae5fe9841a03ddd21c504e98c38f8d89df83b2b6be60029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x7a881172b7b2603e247ba4a8d390719620d828c9d9ba1523e51ba8f30d3fd442": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b": "0x0000000000000000000000004398241671b3dd484fe3213a4fb7511f30e7d7c0", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c": "0x000000000000000000000000065551f0dcac6f00cae11192d462db709be3758c", + "0xd2e0325b95fe0a1ddff80581b1bb02b05395a338c96f3fc485b185a9d0cd841f": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "balance": "0x0" + }, + "065551f0dcac6f00cae11192d462db709be3758c": { + "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + "38b20a2594939531373efcd2e6aa54d03fc534be": { + "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + "42e694adfd403152cd9cad82a62fb6cd403f150a": { + "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + "4398241671b3dd484fe3213a4fb7511f30e7d7c0": { + "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + "4e37f91e3bc69725326af96facf85c14128b07ed": { + "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + "664c4a7b15d91b07c468162f535909114c038b91": { + "balance": "0x7912752226cec5131e000000" + }, + "746249c61f5832c5eed53172776b460491bdcd5c": { + "code": "0x60606040526004361061011c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025e7c278114610165578063173825d91461019757806320ea8d86146101b65780632f54bf6e146101cc5780633411c81c146101ff57806354741525146102215780637065cb4814610250578063784547a71461026f5780638b51d13f146102855780639ace38c21461029b578063a0e67e2b14610349578063a8abe69a146103af578063b5dc40c3146103d2578063b77bf600146103e8578063ba51a6df146103fb578063c01a8c8414610411578063c642747414610427578063d74f8edd1461048c578063dc8452cd1461049f578063e20056e6146104b2578063ee22610b146104d7575b60003411156101635733600160a060020a03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405190815260200160405180910390a25b005b341561017057600080fd5b61017b6004356104ed565b604051600160a060020a03909116815260200160405180910390f35b34156101a257600080fd5b610163600160a060020a0360043516610515565b34156101c157600080fd5b6101636004356106aa565b34156101d757600080fd5b6101eb600160a060020a0360043516610788565b604051901515815260200160405180910390f35b341561020a57600080fd5b6101eb600435600160a060020a036024351661079d565b341561022c57600080fd5b61023e600435151560243515156107bd565b60405190815260200160405180910390f35b341561025b57600080fd5b610163600160a060020a0360043516610829565b341561027a57600080fd5b6101eb600435610965565b341561029057600080fd5b61023e6004356109e9565b34156102a657600080fd5b6102b1600435610a58565b604051600160a060020a038516815260208101849052811515606082015260806040820181815290820184818151815260200191508051906020019080838360005b8381101561030b5780820151838201526020016102f3565b50505050905090810190601f1680156103385780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b341561035457600080fd5b61035c610b36565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561039b578082015183820152602001610383565b505050509050019250505060405180910390f35b34156103ba57600080fd5b61035c60043560243560443515156064351515610b9f565b34156103dd57600080fd5b61035c600435610cc7565b34156103f357600080fd5b61023e610e2b565b341561040657600080fd5b610163600435610e31565b341561041c57600080fd5b610163600435610ec4565b341561043257600080fd5b61023e60048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610fb295505050505050565b341561049757600080fd5b61023e610fd1565b34156104aa57600080fd5b61023e610fd6565b34156104bd57600080fd5b610163600160a060020a0360043581169060243516610fdc565b34156104e257600080fd5b61016360043561118a565b60038054829081106104fb57fe5b600091825260209091200154600160a060020a0316905081565b600030600160a060020a031633600160a060020a031614151561053757600080fd5b600160a060020a038216600090815260026020526040902054829060ff16151561056057600080fd5b600160a060020a0383166000908152600260205260408120805460ff1916905591505b600354600019018210156106435782600160a060020a03166003838154811015156105aa57fe5b600091825260209091200154600160a060020a03161415610638576003805460001981019081106105d757fe5b60009182526020909120015460038054600160a060020a0390921691849081106105fd57fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055610643565b600190910190610583565b6003805460001901906106569082611442565b50600354600454111561066f5760035461066f90610e31565b82600160a060020a03167f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9060405160405180910390a2505050565b33600160a060020a03811660009081526002602052604090205460ff1615156106d257600080fd5b600082815260016020908152604080832033600160a060020a038116855292529091205483919060ff16151561070757600080fd5b600084815260208190526040902060030154849060ff161561072857600080fd5b6000858152600160209081526040808320600160a060020a033316808552925291829020805460ff1916905586917ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9905160405180910390a35050505050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b600554811015610822578380156107ea575060008181526020819052604090206003015460ff16155b8061080e575082801561080e575060008181526020819052604090206003015460ff165b1561081a576001820191505b6001016107c1565b5092915050565b30600160a060020a031633600160a060020a031614151561084957600080fd5b600160a060020a038116600090815260026020526040902054819060ff161561087157600080fd5b81600160a060020a038116151561088757600080fd5b600380549050600101600454603282111580156108a45750818111155b80156108af57508015155b80156108ba57508115155b15156108c557600080fd5b600160a060020a0385166000908152600260205260409020805460ff1916600190811790915560038054909181016108fd8382611442565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387169081179091557ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25050505050565b600080805b6003548110156109e2576000848152600160205260408120600380549192918490811061099357fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff16156109c7576001820191505b6004548214156109da57600192506109e2565b60010161096a565b5050919050565b6000805b600354811015610a525760008381526001602052604081206003805491929184908110610a1657fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610a4a576001820191505b6001016109ed565b50919050565b60006020528060005260406000206000915090508060000160009054906101000a9004600160a060020a031690806001015490806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b235780601f10610af857610100808354040283529160200191610b23565b820191906000526020600020905b815481529060010190602001808311610b0657829003601f168201915b5050506003909301549192505060ff1684565b610b3e61146b565b6003805480602002602001604051908101604052809291908181526020018280548015610b9457602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610b76575b505050505090505b90565b610ba761146b565b610baf61146b565b600080600554604051805910610bc25750595b9080825280602002602001820160405250925060009150600090505b600554811015610c5757858015610c07575060008181526020819052604090206003015460ff16155b80610c2b5750848015610c2b575060008181526020819052604090206003015460ff165b15610c4f5780838381518110610c3d57fe5b60209081029091010152600191909101905b600101610bde565b878703604051805910610c675750595b908082528060200260200182016040525093508790505b86811015610cbc57828181518110610c9257fe5b906020019060200201518489830381518110610caa57fe5b60209081029091010152600101610c7e565b505050949350505050565b610ccf61146b565b610cd761146b565b6003546000908190604051805910610cec5750595b9080825280602002602001820160405250925060009150600090505b600354811015610db45760008581526001602052604081206003805491929184908110610d3157fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff1615610dac576003805482908110610d6c57fe5b600091825260209091200154600160a060020a0316838381518110610d8d57fe5b600160a060020a03909216602092830290910190910152600191909101905b600101610d08565b81604051805910610dc25750595b90808252806020026020018201604052509350600090505b81811015610e2357828181518110610dee57fe5b90602001906020020151848281518110610e0457fe5b600160a060020a03909216602092830290910190910152600101610dda565b505050919050565b60055481565b30600160a060020a031633600160a060020a0316141515610e5157600080fd5b6003548160328211801590610e665750818111155b8015610e7157508015155b8015610e7c57508115155b1515610e8757600080fd5b60048390557fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a8360405190815260200160405180910390a1505050565b33600160a060020a03811660009081526002602052604090205460ff161515610eec57600080fd5b6000828152602081905260409020548290600160a060020a03161515610f1157600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff1615610f4557600080fd5b6000858152600160208181526040808420600160a060020a033316808652925292839020805460ff191690921790915586917f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef905160405180910390a3610fab8561118a565b5050505050565b6000610fbf848484611345565b9050610fca81610ec4565b9392505050565b603281565b60045481565b600030600160a060020a031633600160a060020a0316141515610ffe57600080fd5b600160a060020a038316600090815260026020526040902054839060ff16151561102757600080fd5b600160a060020a038316600090815260026020526040902054839060ff161561104f57600080fd5b600092505b6003548310156110e85784600160a060020a031660038481548110151561107757fe5b600091825260209091200154600160a060020a031614156110dd57836003848154811015156110a257fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556110e8565b600190920191611054565b600160a060020a03808616600081815260026020526040808220805460ff199081169091559388168252908190208054909316600117909255907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90905160405180910390a283600160a060020a03167ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d60405160405180910390a25050505050565b33600160a060020a03811660009081526002602052604081205490919060ff1615156111b557600080fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff1615156111ea57600080fd5b600085815260208190526040902060030154859060ff161561120b57600080fd5b61121486610965565b1561133d576000868152602081905260409081902060038101805460ff19166001908117909155815490820154919750600160a060020a03169160028801905180828054600181600116156101000203166002900480156112b65780601f1061128b576101008083540402835291602001916112b6565b820191906000526020600020905b81548152906001019060200180831161129957829003601f168201915b505091505060006040518083038185875af1925050501561130357857f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7560405160405180910390a261133d565b857f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923660405160405180910390a260038501805460ff191690555b505050505050565b600083600160a060020a038116151561135d57600080fd5b600554915060806040519081016040908152600160a060020a0387168252602080830187905281830186905260006060840181905285815290819052208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015181600101556040820151816002019080516113e892916020019061147d565b506060820151600391909101805460ff191691151591909117905550600580546001019055817fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5160405160405180910390a2509392505050565b815481835581811511611466576000838152602090206114669181019083016114fb565b505050565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106114be57805160ff19168380011785556114eb565b828001600101855582156114eb579182015b828111156114eb5782518255916020019190600101906114d0565b506114f79291506114fb565b5090565b610b9c91905b808211156114f757600081556001016115015600a165627a7a72305820d42d65ce3cd184b1c0e98ae5fe9841a03ddd21c504e98c38f8d89df83b2b6be60029", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x7a881172b7b2603e247ba4a8d390719620d828c9d9ba1523e51ba8f30d3fd442": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b": "0x000000000000000000000000065551f0dcac6f00cae11192d462db709be3758c", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c": "0x0000000000000000000000004398241671b3dd484fe3213a4fb7511f30e7d7c0", + "0xd2e0325b95fe0a1ddff80581b1bb02b05395a338c96f3fc485b185a9d0cd841f": "0x0000000000000000000000000000000000000000000000000000000000000001" + }, + "balance": "0x0" + }, + "7aa125338be075260e77c6a66a56c90a5dec4c58": { + "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + "9a3787688fd210ec8f8d0224c6c50b8178d75bc0": { + "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + "a65010026b83368ca05df6e8b467985d6de3eac5": { + "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + "03c0d9bc556BE68870B96976e81D32ebb49d335D": { + "balance": "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + } + + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" +}