diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..63cae7e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +configs/config.json \ No newline at end of file diff --git a/configs/config.json.example b/configs/config.json.example new file mode 100644 index 0000000..9224438 --- /dev/null +++ b/configs/config.json.example @@ -0,0 +1,8 @@ +{ + "QUORUM": { + "ENDPOINT": "http://localhost:22000" + }, + "ACCOUNT":{ + "PRIVATEKEY": "00000000000000000000000000000000000000000000000000000000000000000000" + } +} diff --git a/contracts/authority/authority.go b/contracts/authority/authority.go new file mode 100644 index 0000000..502d2ee --- /dev/null +++ b/contracts/authority/authority.go @@ -0,0 +1,258 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package authority + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = abi.U256 + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// AuthorityABI is the input ABI used to generate the binding from. +const AuthorityABI = "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"tableName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"user\",\"type\":\"string\"}],\"name\":\"add\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"tableName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"user\",\"type\":\"string\"}],\"name\":\"has\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"tableName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"user\",\"type\":\"string\"}],\"name\":\"remove\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" + +// AuthorityBin is the compiled bytecode used for deploying new contracts. +var AuthorityBin = "0x608060405234801561001057600080fd5b5061074a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063308714911461004657806344590a7e146101b0578063ebdf86ca14610302575b600080fd5b6101966004803603604081101561005c57600080fd5b810190808035906020019064010000000081111561007957600080fd5b82018360208201111561008b57600080fd5b803590602001918460018302840111640100000000831117156100ad57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561011057600080fd5b82018360208201111561012257600080fd5b8035906020019184600183028401116401000000008311171561014457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610454565b604051808215151515815260200191505060405180910390f35b610300600480360360408110156101c657600080fd5b81019080803590602001906401000000008111156101e357600080fd5b8201836020820111156101f557600080fd5b8035906020019184600183028401116401000000008311171561021757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561027a57600080fd5b82018360208201111561028c57600080fd5b803590602001918460018302840111640100000000831117156102ae57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061053b565b005b6104526004803603604081101561031857600080fd5b810190808035906020019064010000000081111561033557600080fd5b82018360208201111561034757600080fd5b8035906020019184600183028401116401000000008311171561036957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103cc57600080fd5b8201836020820111156103de57600080fd5b8035906020019184600183028401116401000000008311171561040057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610627565b005b600080836040518082805190602001908083835b6020831061048b5780518252602082019150602081019050602083039250610468565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020826040518082805190602001908083835b602083106104f257805182526020820191506020810190506020830392506104cf565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff16905092915050565b600080836040518082805190602001908083835b60208310610572578051825260208201915060208101905060208303925061054f565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020826040518082805190602001908083835b602083106105d957805182526020820191506020810190506020830392506105b6565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055505050565b60016000836040518082805190602001908083835b6020831061065f578051825260208201915060208101905060208303925061063c565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020826040518082805190602001908083835b602083106106c657805182526020820191506020810190506020830392506106a3565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff021916908315150217905550505056fea2646970667358221220caf4197f13b01873c25f49ef0667e79717256f5d1d907ff4d1c6e6e6251700af64736f6c63430006020033" + +// DeployAuthority deploys a new Ethereum contract, binding an instance of Authority to it. +func DeployAuthority(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Authority, error) { + parsed, err := abi.JSON(strings.NewReader(AuthorityABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(AuthorityBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Authority{AuthorityCaller: AuthorityCaller{contract: contract}, AuthorityTransactor: AuthorityTransactor{contract: contract}, AuthorityFilterer: AuthorityFilterer{contract: contract}}, nil +} + +// Authority is an auto generated Go binding around an Ethereum contract. +type Authority struct { + AuthorityCaller // Read-only binding to the contract + AuthorityTransactor // Write-only binding to the contract + AuthorityFilterer // Log filterer for contract events +} + +// AuthorityCaller is an auto generated read-only Go binding around an Ethereum contract. +type AuthorityCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AuthorityTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AuthorityTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AuthorityFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AuthorityFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AuthoritySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AuthoritySession struct { + Contract *Authority // 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 +} + +// AuthorityCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AuthorityCallerSession struct { + Contract *AuthorityCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AuthorityTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AuthorityTransactorSession struct { + Contract *AuthorityTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AuthorityRaw is an auto generated low-level Go binding around an Ethereum contract. +type AuthorityRaw struct { + Contract *Authority // Generic contract binding to access the raw methods on +} + +// AuthorityCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AuthorityCallerRaw struct { + Contract *AuthorityCaller // Generic read-only contract binding to access the raw methods on +} + +// AuthorityTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AuthorityTransactorRaw struct { + Contract *AuthorityTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewAuthority creates a new instance of Authority, bound to a specific deployed contract. +func NewAuthority(address common.Address, backend bind.ContractBackend) (*Authority, error) { + contract, err := bindAuthority(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Authority{AuthorityCaller: AuthorityCaller{contract: contract}, AuthorityTransactor: AuthorityTransactor{contract: contract}, AuthorityFilterer: AuthorityFilterer{contract: contract}}, nil +} + +// NewAuthorityCaller creates a new read-only instance of Authority, bound to a specific deployed contract. +func NewAuthorityCaller(address common.Address, caller bind.ContractCaller) (*AuthorityCaller, error) { + contract, err := bindAuthority(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AuthorityCaller{contract: contract}, nil +} + +// NewAuthorityTransactor creates a new write-only instance of Authority, bound to a specific deployed contract. +func NewAuthorityTransactor(address common.Address, transactor bind.ContractTransactor) (*AuthorityTransactor, error) { + contract, err := bindAuthority(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AuthorityTransactor{contract: contract}, nil +} + +// NewAuthorityFilterer creates a new log filterer instance of Authority, bound to a specific deployed contract. +func NewAuthorityFilterer(address common.Address, filterer bind.ContractFilterer) (*AuthorityFilterer, error) { + contract, err := bindAuthority(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AuthorityFilterer{contract: contract}, nil +} + +// bindAuthority binds a generic wrapper to an already deployed contract. +func bindAuthority(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(AuthorityABI)) + 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 (_Authority *AuthorityRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { + return _Authority.Contract.AuthorityCaller.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 (_Authority *AuthorityRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Authority.Contract.AuthorityTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Authority *AuthorityRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Authority.Contract.AuthorityTransactor.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 (_Authority *AuthorityCallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { + return _Authority.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 (_Authority *AuthorityTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Authority.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Authority *AuthorityTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Authority.Contract.contract.Transact(opts, method, params...) +} + +// Has is a free data retrieval call binding the contract method 0x30871491. +// +// Solidity: function has(string tableName, string user) constant returns(bool) +func (_Authority *AuthorityCaller) Has(opts *bind.CallOpts, tableName string, user string) (bool, error) { + var ( + ret0 = new(bool) + ) + out := ret0 + err := _Authority.contract.Call(opts, out, "has", tableName, user) + return *ret0, err +} + +// Has is a free data retrieval call binding the contract method 0x30871491. +// +// Solidity: function has(string tableName, string user) constant returns(bool) +func (_Authority *AuthoritySession) Has(tableName string, user string) (bool, error) { + return _Authority.Contract.Has(&_Authority.CallOpts, tableName, user) +} + +// Has is a free data retrieval call binding the contract method 0x30871491. +// +// Solidity: function has(string tableName, string user) constant returns(bool) +func (_Authority *AuthorityCallerSession) Has(tableName string, user string) (bool, error) { + return _Authority.Contract.Has(&_Authority.CallOpts, tableName, user) +} + +// Add is a paid mutator transaction binding the contract method 0xebdf86ca. +// +// Solidity: function add(string tableName, string user) returns() +func (_Authority *AuthorityTransactor) Add(opts *bind.TransactOpts, tableName string, user string) (*types.Transaction, error) { + return _Authority.contract.Transact(opts, "add", tableName, user) +} + +// Add is a paid mutator transaction binding the contract method 0xebdf86ca. +// +// Solidity: function add(string tableName, string user) returns() +func (_Authority *AuthoritySession) Add(tableName string, user string) (*types.Transaction, error) { + return _Authority.Contract.Add(&_Authority.TransactOpts, tableName, user) +} + +// Add is a paid mutator transaction binding the contract method 0xebdf86ca. +// +// Solidity: function add(string tableName, string user) returns() +func (_Authority *AuthorityTransactorSession) Add(tableName string, user string) (*types.Transaction, error) { + return _Authority.Contract.Add(&_Authority.TransactOpts, tableName, user) +} + +// Remove is a paid mutator transaction binding the contract method 0x44590a7e. +// +// Solidity: function remove(string tableName, string user) returns() +func (_Authority *AuthorityTransactor) Remove(opts *bind.TransactOpts, tableName string, user string) (*types.Transaction, error) { + return _Authority.contract.Transact(opts, "remove", tableName, user) +} + +// Remove is a paid mutator transaction binding the contract method 0x44590a7e. +// +// Solidity: function remove(string tableName, string user) returns() +func (_Authority *AuthoritySession) Remove(tableName string, user string) (*types.Transaction, error) { + return _Authority.Contract.Remove(&_Authority.TransactOpts, tableName, user) +} + +// Remove is a paid mutator transaction binding the contract method 0x44590a7e. +// +// Solidity: function remove(string tableName, string user) returns() +func (_Authority *AuthorityTransactorSession) Remove(tableName string, user string) (*types.Transaction, error) { + return _Authority.Contract.Remove(&_Authority.TransactOpts, tableName, user) +} diff --git a/contracts/authority/deploy.go b/contracts/authority/deploy.go new file mode 100644 index 0000000..873e21b --- /dev/null +++ b/contracts/authority/deploy.go @@ -0,0 +1,63 @@ +package authority + +import ( + "context" + "crypto/ecdsa" + "log" + "math/big" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/spf13/viper" +) + +func Deploy() (string, string) { + quorumEndpoint := viper.GetString(`QUORUM.ENDPOINT`) + privatekeyHex := viper.GetString(`ACCOUNT.PRIVATEKEY`) + + var address common.Address + var transaction *types.Transaction + + quorumClient, err := ethclient.Dial(quorumEndpoint) + if err != nil { + log.Fatal(err) + } + + privateKey, err := crypto.HexToECDSA(privatekeyHex) + if err != nil { + log.Fatal(err) + } + + publicKey := privateKey.Public() + publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey) + if !ok { + log.Fatal(err) + } + + accountAddress := crypto.PubkeyToAddress(*publicKeyECDSA) + + nonce, err := quorumClient.PendingNonceAt(context.Background(), accountAddress) + if err != nil { + log.Fatal(err) + } + + gasPrice, err := quorumClient.SuggestGasPrice(context.Background()) + if err != nil { + log.Fatal(err) + } + + auth := bind.NewKeyedTransactor(privateKey) + auth.Nonce = big.NewInt(int64(nonce)) + auth.Value = big.NewInt(0) + auth.GasLimit = uint64(5000000) + auth.GasPrice = gasPrice + + address, transaction, _, err = DeployAuthority(auth, quorumClient) + if err != nil { + log.Fatal(err) + } + return address.Hex(), transaction.Hash().Hex() +} diff --git a/contracts/metaTable/deploy.go b/contracts/metaTable/deploy.go new file mode 100644 index 0000000..54ee02a --- /dev/null +++ b/contracts/metaTable/deploy.go @@ -0,0 +1,63 @@ +package metaTable + +import ( + "context" + "crypto/ecdsa" + "log" + "math/big" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/spf13/viper" +) + +func Deploy() (string, string) { + quorumEndpoint := viper.GetString(`QUORUM.ENDPOINT`) + privatekeyHex := viper.GetString(`ACCOUNT.PRIVATEKEY`) + + var address common.Address + var transaction *types.Transaction + + quorumClient, err := ethclient.Dial(quorumEndpoint) + if err != nil { + log.Fatal(err) + } + + privateKey, err := crypto.HexToECDSA(privatekeyHex) + if err != nil { + log.Fatal(err) + } + + publicKey := privateKey.Public() + publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey) + if !ok { + log.Fatal(err) + } + + accountAddress := crypto.PubkeyToAddress(*publicKeyECDSA) + + nonce, err := quorumClient.PendingNonceAt(context.Background(), accountAddress) + if err != nil { + log.Fatal(err) + } + + gasPrice, err := quorumClient.SuggestGasPrice(context.Background()) + if err != nil { + log.Fatal(err) + } + + auth := bind.NewKeyedTransactor(privateKey) + auth.Nonce = big.NewInt(int64(nonce)) + auth.Value = big.NewInt(0) + auth.GasLimit = uint64(5000000) + auth.GasPrice = gasPrice + + address, transaction, _, err = DeployMetaTable(auth, quorumClient) + if err != nil { + log.Fatal(err) + } + return address.Hex(), transaction.Hash().Hex() +} diff --git a/contracts/metaTable/metaTable.go b/contracts/metaTable/metaTable.go new file mode 100644 index 0000000..01c817d --- /dev/null +++ b/contracts/metaTable/metaTable.go @@ -0,0 +1,479 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package metaTable + +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" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = abi.U256 + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// MetaTableABI is the input ABI used to generate the binding from. +const MetaTableABI = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"addr\",\"type\":\"string\"}],\"name\":\"newTable\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"_tableAddresses\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"_tableIndex\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"tableName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tableAddress\",\"type\":\"string\"}],\"name\":\"add\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"tableName\",\"type\":\"string\"}],\"name\":\"get\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllTable\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tableRegistryCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]" + +// MetaTableBin is the compiled bytecode used for deploying new contracts. +var MetaTableBin = "0x608060405234801561001057600080fd5b50610e03806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80630d0d141d1461006757806359ca98db14610086578063693ec85e146100b6578063a4a2b687146100e6578063a90797dc14610104578063ebdf86ca14610134575b600080fd5b61006f610164565b60405161007d929190610b4f565b60405180910390f35b6100a0600480360361009b91908101906107f9565b6103a8565b6040516100ad9190610ba1565b60405180910390f35b6100d060048036036100cb919081019061083a565b61046e565b6040516100dd9190610bc3565b60405180910390f35b6100ee61052e565b6040516100fb9190610c1c565b60405180910390f35b61011e600480360361011991908101906108e7565b610534565b60405161012b9190610ba1565b60405180910390f35b61014e6004803603610149919081019061087b565b6105e4565b60405161015b9190610b86565b60405180910390f35b606080606060025460405190808252806020026020018201604052801561019f57816020015b606081526020019060019003908161018a5790505b50905060606002546040519080825280602002602001820160405280156101da57816020015b60608152602001906001900390816101c55790505b50905060008090505b60025481101561039b576000808281526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102935780601f1061026857610100808354040283529160200191610293565b820191906000526020600020905b81548152906001019060200180831161027657829003601f168201915b50505050508282815181106102a457fe5b602002602001018190525060016000808381526020019081526020016000206040516102d09190610b38565b90815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156103725780601f1061034757610100808354040283529160200191610372565b820191906000526020600020905b81548152906001019060200180831161035557829003601f168201915b505050505083828151811061038357fe5b602002602001018190525080806001019150506101e3565b5080829350935050509091565b6001818051602081018201805184825260208301602085012081835280955050505050506000915090508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104665780601f1061043b57610100808354040283529160200191610466565b820191906000526020600020905b81548152906001019060200180831161044957829003601f168201915b505050505081565b60606001826040516104809190610b21565b90815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105225780601f106104f757610100808354040283529160200191610522565b820191906000526020600020905b81548152906001019060200180831161050557829003601f168201915b50505050509050919050565b60025481565b60006020528060005260406000206000915090508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105dc5780601f106105b1576101008083540402835291602001916105dc565b820191906000526020600020905b8154815290600101906020018083116105bf57829003601f168201915b505050505081565b6000826000806002548152602001908152602001600020908051906020019061060e929190610697565b50816001846040516106209190610b21565b90815260200160405180910390209080519060200190610641929190610697565b506002600081548092919060010191905055507f18e448d301b2feb12847d36273372ac332ce9fc0de8d1137c1d9a4e96b569bd98383604051610685929190610be5565b60405180910390a16001905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106106d857805160ff1916838001178555610706565b82800160010185558215610706579182015b828111156107055782518255916020019190600101906106ea565b5b5090506107139190610717565b5090565b61073991905b8082111561073557600081600090555060010161071d565b5090565b90565b600082601f83011261074d57600080fd5b813561076061075b82610c64565b610c37565b9150808252602083016020830185838301111561077c57600080fd5b610787838284610d63565b50505092915050565b600082601f8301126107a157600080fd5b81356107b46107af82610c90565b610c37565b915080825260208301602083018583830111156107d057600080fd5b6107db838284610d63565b50505092915050565b6000813590506107f381610db6565b92915050565b60006020828403121561080b57600080fd5b600082013567ffffffffffffffff81111561082557600080fd5b6108318482850161073c565b91505092915050565b60006020828403121561084c57600080fd5b600082013567ffffffffffffffff81111561086657600080fd5b61087284828501610790565b91505092915050565b6000806040838503121561088e57600080fd5b600083013567ffffffffffffffff8111156108a857600080fd5b6108b485828601610790565b925050602083013567ffffffffffffffff8111156108d157600080fd5b6108dd85828601610790565b9150509250929050565b6000602082840312156108f957600080fd5b6000610907848285016107e4565b91505092915050565b600061091c8383610a12565b905092915050565b600061092f82610ce1565b6109398185610d0f565b93508360208202850161094b85610cbc565b8060005b8581101561098757848403895281516109688582610910565b945061097383610d02565b925060208a0199505060018101905061094f565b50829750879550505050505092915050565b6109a281610d4d565b82525050565b60006109b382610cf7565b6109bd8185610d31565b93506109cd818560208601610d72565b6109d681610da5565b840191505092915050565b60006109ec82610cf7565b6109f68185610d42565b9350610a06818560208601610d72565b80840191505092915050565b6000610a1d82610cec565b610a278185610d20565b9350610a37818560208601610d72565b610a4081610da5565b840191505092915050565b6000610a5682610cec565b610a608185610d31565b9350610a70818560208601610d72565b610a7981610da5565b840191505092915050565b600081546001811660008114610aa15760018114610ac657610b0a565b607f6002830416610ab28187610d42565b955060ff1983168652808601935050610b0a565b60028204610ad48187610d42565b9550610adf85610ccc565b60005b82811015610b0157815481890152600182019150602081019050610ae2565b82880195505050505b505092915050565b610b1b81610d59565b82525050565b6000610b2d82846109e1565b915081905092915050565b6000610b448284610a84565b915081905092915050565b60006040820190508181036000830152610b698185610924565b90508181036020830152610b7d8184610924565b90509392505050565b6000602082019050610b9b6000830184610999565b92915050565b60006020820190508181036000830152610bbb8184610a4b565b905092915050565b60006020820190508181036000830152610bdd81846109a8565b905092915050565b60006040820190508181036000830152610bff81856109a8565b90508181036020830152610c1381846109a8565b90509392505050565b6000602082019050610c316000830184610b12565b92915050565b6000604051905081810181811067ffffffffffffffff82111715610c5a57600080fd5b8060405250919050565b600067ffffffffffffffff821115610c7b57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115610ca757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60008115159050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610d90578082015181840152602081019050610d75565b83811115610d9f576000848401525b50505050565b6000601f19601f8301169050919050565b610dbf81610d59565b8114610dca57600080fd5b5056fea264697066735822122022136240f78abab0c61d8de83a9067a72f655b40e9dbe8bcc9fcc690e251e0f464736f6c63430006020033" + +// DeployMetaTable deploys a new Ethereum contract, binding an instance of MetaTable to it. +func DeployMetaTable(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *MetaTable, error) { + parsed, err := abi.JSON(strings.NewReader(MetaTableABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(MetaTableBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &MetaTable{MetaTableCaller: MetaTableCaller{contract: contract}, MetaTableTransactor: MetaTableTransactor{contract: contract}, MetaTableFilterer: MetaTableFilterer{contract: contract}}, nil +} + +// MetaTable is an auto generated Go binding around an Ethereum contract. +type MetaTable struct { + MetaTableCaller // Read-only binding to the contract + MetaTableTransactor // Write-only binding to the contract + MetaTableFilterer // Log filterer for contract events +} + +// MetaTableCaller is an auto generated read-only Go binding around an Ethereum contract. +type MetaTableCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MetaTableTransactor is an auto generated write-only Go binding around an Ethereum contract. +type MetaTableTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MetaTableFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type MetaTableFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// MetaTableSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type MetaTableSession struct { + Contract *MetaTable // 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 +} + +// MetaTableCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type MetaTableCallerSession struct { + Contract *MetaTableCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// MetaTableTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type MetaTableTransactorSession struct { + Contract *MetaTableTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// MetaTableRaw is an auto generated low-level Go binding around an Ethereum contract. +type MetaTableRaw struct { + Contract *MetaTable // Generic contract binding to access the raw methods on +} + +// MetaTableCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type MetaTableCallerRaw struct { + Contract *MetaTableCaller // Generic read-only contract binding to access the raw methods on +} + +// MetaTableTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type MetaTableTransactorRaw struct { + Contract *MetaTableTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewMetaTable creates a new instance of MetaTable, bound to a specific deployed contract. +func NewMetaTable(address common.Address, backend bind.ContractBackend) (*MetaTable, error) { + contract, err := bindMetaTable(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &MetaTable{MetaTableCaller: MetaTableCaller{contract: contract}, MetaTableTransactor: MetaTableTransactor{contract: contract}, MetaTableFilterer: MetaTableFilterer{contract: contract}}, nil +} + +// NewMetaTableCaller creates a new read-only instance of MetaTable, bound to a specific deployed contract. +func NewMetaTableCaller(address common.Address, caller bind.ContractCaller) (*MetaTableCaller, error) { + contract, err := bindMetaTable(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &MetaTableCaller{contract: contract}, nil +} + +// NewMetaTableTransactor creates a new write-only instance of MetaTable, bound to a specific deployed contract. +func NewMetaTableTransactor(address common.Address, transactor bind.ContractTransactor) (*MetaTableTransactor, error) { + contract, err := bindMetaTable(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &MetaTableTransactor{contract: contract}, nil +} + +// NewMetaTableFilterer creates a new log filterer instance of MetaTable, bound to a specific deployed contract. +func NewMetaTableFilterer(address common.Address, filterer bind.ContractFilterer) (*MetaTableFilterer, error) { + contract, err := bindMetaTable(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &MetaTableFilterer{contract: contract}, nil +} + +// bindMetaTable binds a generic wrapper to an already deployed contract. +func bindMetaTable(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(MetaTableABI)) + 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 (_MetaTable *MetaTableRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { + return _MetaTable.Contract.MetaTableCaller.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 (_MetaTable *MetaTableRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MetaTable.Contract.MetaTableTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_MetaTable *MetaTableRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MetaTable.Contract.MetaTableTransactor.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 (_MetaTable *MetaTableCallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { + return _MetaTable.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 (_MetaTable *MetaTableTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MetaTable.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_MetaTable *MetaTableTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MetaTable.Contract.contract.Transact(opts, method, params...) +} + +// TableAddresses is a free data retrieval call binding the contract method 0x59ca98db. +// +// Solidity: function _tableAddresses(string ) constant returns(string) +func (_MetaTable *MetaTableCaller) TableAddresses(opts *bind.CallOpts, arg0 string) (string, error) { + var ( + ret0 = new(string) + ) + out := ret0 + err := _MetaTable.contract.Call(opts, out, "_tableAddresses", arg0) + return *ret0, err +} + +// TableAddresses is a free data retrieval call binding the contract method 0x59ca98db. +// +// Solidity: function _tableAddresses(string ) constant returns(string) +func (_MetaTable *MetaTableSession) TableAddresses(arg0 string) (string, error) { + return _MetaTable.Contract.TableAddresses(&_MetaTable.CallOpts, arg0) +} + +// TableAddresses is a free data retrieval call binding the contract method 0x59ca98db. +// +// Solidity: function _tableAddresses(string ) constant returns(string) +func (_MetaTable *MetaTableCallerSession) TableAddresses(arg0 string) (string, error) { + return _MetaTable.Contract.TableAddresses(&_MetaTable.CallOpts, arg0) +} + +// TableIndex is a free data retrieval call binding the contract method 0xa90797dc. +// +// Solidity: function _tableIndex(uint256 ) constant returns(string) +func (_MetaTable *MetaTableCaller) TableIndex(opts *bind.CallOpts, arg0 *big.Int) (string, error) { + var ( + ret0 = new(string) + ) + out := ret0 + err := _MetaTable.contract.Call(opts, out, "_tableIndex", arg0) + return *ret0, err +} + +// TableIndex is a free data retrieval call binding the contract method 0xa90797dc. +// +// Solidity: function _tableIndex(uint256 ) constant returns(string) +func (_MetaTable *MetaTableSession) TableIndex(arg0 *big.Int) (string, error) { + return _MetaTable.Contract.TableIndex(&_MetaTable.CallOpts, arg0) +} + +// TableIndex is a free data retrieval call binding the contract method 0xa90797dc. +// +// Solidity: function _tableIndex(uint256 ) constant returns(string) +func (_MetaTable *MetaTableCallerSession) TableIndex(arg0 *big.Int) (string, error) { + return _MetaTable.Contract.TableIndex(&_MetaTable.CallOpts, arg0) +} + +// Get is a free data retrieval call binding the contract method 0x693ec85e. +// +// Solidity: function get(string tableName) constant returns(string) +func (_MetaTable *MetaTableCaller) Get(opts *bind.CallOpts, tableName string) (string, error) { + var ( + ret0 = new(string) + ) + out := ret0 + err := _MetaTable.contract.Call(opts, out, "get", tableName) + return *ret0, err +} + +// Get is a free data retrieval call binding the contract method 0x693ec85e. +// +// Solidity: function get(string tableName) constant returns(string) +func (_MetaTable *MetaTableSession) Get(tableName string) (string, error) { + return _MetaTable.Contract.Get(&_MetaTable.CallOpts, tableName) +} + +// Get is a free data retrieval call binding the contract method 0x693ec85e. +// +// Solidity: function get(string tableName) constant returns(string) +func (_MetaTable *MetaTableCallerSession) Get(tableName string) (string, error) { + return _MetaTable.Contract.Get(&_MetaTable.CallOpts, tableName) +} + +// GetAllTable is a free data retrieval call binding the contract method 0x0d0d141d. +// +// Solidity: function getAllTable() constant returns(string[], string[]) +func (_MetaTable *MetaTableCaller) GetAllTable(opts *bind.CallOpts) ([]string, []string, error) { + var ( + ret0 = new([]string) + ret1 = new([]string) + ) + out := &[]interface{}{ + ret0, + ret1, + } + err := _MetaTable.contract.Call(opts, out, "getAllTable") + return *ret0, *ret1, err +} + +// GetAllTable is a free data retrieval call binding the contract method 0x0d0d141d. +// +// Solidity: function getAllTable() constant returns(string[], string[]) +func (_MetaTable *MetaTableSession) GetAllTable() ([]string, []string, error) { + return _MetaTable.Contract.GetAllTable(&_MetaTable.CallOpts) +} + +// GetAllTable is a free data retrieval call binding the contract method 0x0d0d141d. +// +// Solidity: function getAllTable() constant returns(string[], string[]) +func (_MetaTable *MetaTableCallerSession) GetAllTable() ([]string, []string, error) { + return _MetaTable.Contract.GetAllTable(&_MetaTable.CallOpts) +} + +// TableRegistryCount is a free data retrieval call binding the contract method 0xa4a2b687. +// +// Solidity: function tableRegistryCount() constant returns(uint256) +func (_MetaTable *MetaTableCaller) TableRegistryCount(opts *bind.CallOpts) (*big.Int, error) { + var ( + ret0 = new(*big.Int) + ) + out := ret0 + err := _MetaTable.contract.Call(opts, out, "tableRegistryCount") + return *ret0, err +} + +// TableRegistryCount is a free data retrieval call binding the contract method 0xa4a2b687. +// +// Solidity: function tableRegistryCount() constant returns(uint256) +func (_MetaTable *MetaTableSession) TableRegistryCount() (*big.Int, error) { + return _MetaTable.Contract.TableRegistryCount(&_MetaTable.CallOpts) +} + +// TableRegistryCount is a free data retrieval call binding the contract method 0xa4a2b687. +// +// Solidity: function tableRegistryCount() constant returns(uint256) +func (_MetaTable *MetaTableCallerSession) TableRegistryCount() (*big.Int, error) { + return _MetaTable.Contract.TableRegistryCount(&_MetaTable.CallOpts) +} + +// Add is a paid mutator transaction binding the contract method 0xebdf86ca. +// +// Solidity: function add(string tableName, string tableAddress) returns(bool) +func (_MetaTable *MetaTableTransactor) Add(opts *bind.TransactOpts, tableName string, tableAddress string) (*types.Transaction, error) { + return _MetaTable.contract.Transact(opts, "add", tableName, tableAddress) +} + +// Add is a paid mutator transaction binding the contract method 0xebdf86ca. +// +// Solidity: function add(string tableName, string tableAddress) returns(bool) +func (_MetaTable *MetaTableSession) Add(tableName string, tableAddress string) (*types.Transaction, error) { + return _MetaTable.Contract.Add(&_MetaTable.TransactOpts, tableName, tableAddress) +} + +// Add is a paid mutator transaction binding the contract method 0xebdf86ca. +// +// Solidity: function add(string tableName, string tableAddress) returns(bool) +func (_MetaTable *MetaTableTransactorSession) Add(tableName string, tableAddress string) (*types.Transaction, error) { + return _MetaTable.Contract.Add(&_MetaTable.TransactOpts, tableName, tableAddress) +} + +// MetaTableNewTableIterator is returned from FilterNewTable and is used to iterate over the raw logs and unpacked data for NewTable events raised by the MetaTable contract. +type MetaTableNewTableIterator struct { + Event *MetaTableNewTable // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *MetaTableNewTableIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(MetaTableNewTable) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(MetaTableNewTable) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *MetaTableNewTableIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MetaTableNewTableIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MetaTableNewTable represents a NewTable event raised by the MetaTable contract. +type MetaTableNewTable struct { + Name string + Addr string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNewTable is a free log retrieval operation binding the contract event 0x18e448d301b2feb12847d36273372ac332ce9fc0de8d1137c1d9a4e96b569bd9. +// +// Solidity: event newTable(string name, string addr) +func (_MetaTable *MetaTableFilterer) FilterNewTable(opts *bind.FilterOpts) (*MetaTableNewTableIterator, error) { + + logs, sub, err := _MetaTable.contract.FilterLogs(opts, "newTable") + if err != nil { + return nil, err + } + return &MetaTableNewTableIterator{contract: _MetaTable.contract, event: "newTable", logs: logs, sub: sub}, nil +} + +// WatchNewTable is a free log subscription operation binding the contract event 0x18e448d301b2feb12847d36273372ac332ce9fc0de8d1137c1d9a4e96b569bd9. +// +// Solidity: event newTable(string name, string addr) +func (_MetaTable *MetaTableFilterer) WatchNewTable(opts *bind.WatchOpts, sink chan<- *MetaTableNewTable) (event.Subscription, error) { + + logs, sub, err := _MetaTable.contract.WatchLogs(opts, "newTable") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(MetaTableNewTable) + if err := _MetaTable.contract.UnpackLog(event, "newTable", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseNewTable is a log parse operation binding the contract event 0x18e448d301b2feb12847d36273372ac332ce9fc0de8d1137c1d9a4e96b569bd9. +// +// Solidity: event newTable(string name, string addr) +func (_MetaTable *MetaTableFilterer) ParseNewTable(log types.Log) (*MetaTableNewTable, error) { + event := new(MetaTableNewTable) + if err := _MetaTable.contract.UnpackLog(event, "newTable", log); err != nil { + return nil, err + } + return event, nil +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..f6112e0 --- /dev/null +++ b/go.mod @@ -0,0 +1,8 @@ +module github.com/DropKit/Require-Deployer + +go 1.14 + +require ( + github.com/ethereum/go-ethereum v1.9.12 + github.com/spf13/viper v1.6.3 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..c32a63d --- /dev/null +++ b/go.sum @@ -0,0 +1,288 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= +github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= +github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/VictoriaMetrics/fastcache v1.5.3 h1:2odJnXLbFZcoV9KYtQ+7TH1UOq3dn3AssMgieaezkR4= +github.com/VictoriaMetrics/fastcache v1.5.3/go.mod h1:+jv9Ckb+za/P1ZRg/sulP5Ni1v49daAVERr0H3CuscE= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847 h1:rtI0fD4oG/8eVokGVPYJEW1F88p1ZNgXiEIs9thEE4A= +github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= +github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.0.1-0.20190104013014-3767db7a7e18/go.mod h1:HD5P3vAIAh+Y2GAxg0PrPN1P8WkepXGpjbUPDHJqqKM= +github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea h1:j4317fAZh7X6GqbFowYdYdI0L9bwxL07jyPZIdepyZ0= +github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/dop251/goja v0.0.0-20200219165308-d1232e640a87/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= +github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c h1:JHHhtb9XWJrGNMcrVP6vyzO4dusgi/HnceHTgxSejUM= +github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa h1:XKAhUk/dtp+CV0VO6mhG2V7jA9vbcGcnYF/Ay9NjZrY= +github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs= +github.com/ethereum/go-ethereum v1.9.12 h1:EPtimwsp/KGDSiXcNunzsI4kefdsMHZGJntKx3fvbaI= +github.com/ethereum/go-ethereum v1.9.12/go.mod h1:PvsVkQmhZFx92Y+h2ylythYlheEDt/uBgFbl61Js/jo= +github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc h1:jtW8jbpkO4YirRSyepBOH8E+2HEw6/hKkBvFPwhUN8c= +github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2-0.20190517061210-b285ee9cfc6c h1:zqAKixg3cTcIasAMJV+EcfVbWwLpOZ7LeoWJvcuD/5Q= +github.com/golang/protobuf v1.3.2-0.20190517061210-b285ee9cfc6c/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989 h1:giknQ4mEuDFmmHSrGcbargOuLHQGtywqo4mheITex54= +github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/golang-lru v0.0.0-20160813221303-0a025b7e63ad h1:eMxs9EL0PvIGS9TTtxg4R+JxuPGav82J8rA+GFnY7po= +github.com/hashicorp/golang-lru v0.0.0-20160813221303-0a025b7e63ad/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huin/goupnp v0.0.0-20161224104101-679507af18f3 h1:DqD8eigqlUm0+znmx7zhL0xvTW3+e1jCekJMfBUADWI= +github.com/huin/goupnp v0.0.0-20161224104101-679507af18f3/go.mod h1:MZ2ZmwcBpvOoJ22IJsc7va19ZwoheaBk43rKg12SKag= +github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= +github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458 h1:6OvNmYgJyexcZ3pYbTI9jWx5tHo1Dee/tWbLMfPe2TA= +github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356 h1:I/yrLt2WilKxlQKCM52clh5rGzTKpVctGT1lH4Dc8Jw= +github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mattn/go-colorable v0.1.0 h1:v2XXALHHh6zHfYTJ+cSkwtyffnaOyR1MXaA91mTrb8o= +github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= +github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= +github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035 h1:USWjF42jDCSEeikX/G1g40ZWnsPXN5WkZ4jMHZWyBK4= +github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c h1:1RHs3tNxjXGHeul8z2t6H2N2TlAqpKe5yryJztRx4Jk= +github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222 h1:goeTyGkArOZIVOMA0dQbyuPWGNQJZGPwPu/QS9GlpnA= +github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= +github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00 h1:8DPul/X0IT/1TNMIxoKLwdemEOBBHDC/K4EB16Cw5WE= +github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521 h1:3hxavr+IHMsQBrYUPQM5v0CgENFktkkbg1sfpgM3h20= +github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.0.1-0.20190317074736-539464a789e9/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.6.3 h1:pDDu1OyEDTKzpJwdq4TiuLyMsUgRa/BT5cn5O62NoHs= +github.com/spf13/viper v1.6.3/go.mod h1:jUMtyi0/lB5yZH/FjyGAoH7IMNrIhlBf6pXZmbMDvzw= +github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= +github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= +github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 h1:gIlAHnH1vJb5vwEjIp5kBj/eu99p/bl0Ay2goiPe5xE= +github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= +github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 h1:njlZPzLwU639dk2kqnCPPv+wNjq7Xb6EfUxe/oX0/NM= +github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d h1:gZZadD8H+fF+n9CmNhYL1Y0dJB+kLOmKd7FbPJLeGHs= +github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef h1:wHSqTBrZW24CsNJDfeh9Ex6Pm0Rcpc7qrgKBiL44vF4= +github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 h1:1cngl9mPEoITZG8s8cVcUy5CeIBYhEESkOB7m6Gmkrk= +github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4 h1:QmwruyY+bKbDDL0BaglrbZABEali68eoMFhTZpCjYVA= +golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= +gopkg.in/olebedev/go-duktape.v3 v3.0.0-20190213234257-ec84240a7772 h1:hhsSf/5z74Ck/DJYc+R8zpq8KGm7uJvpdLRQED/IedA= +gopkg.in/olebedev/go-duktape.v3 v3.0.0-20190213234257-ec84240a7772/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/urfave/cli.v1 v1.20.0 h1:NdAVW6RYxDif9DhDHaAortIu956m2c0v+09AZBPTbE0= +gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/main.go b/main.go new file mode 100644 index 0000000..f96676a --- /dev/null +++ b/main.go @@ -0,0 +1,26 @@ +package main + +import ( + "log" + + "github.com/DropKit/Require-Deployer/contracts/authority" + "github.com/DropKit/Require-Deployer/contracts/metaTable" + "github.com/spf13/viper" +) + +func init() { + viper.SetConfigName("config") + viper.AddConfigPath("./configs") + err := viper.ReadInConfig() + if err != nil { + print(err) + } +} + +func main() { + metaTableAddr, _ := metaTable.Deploy() + log.Print("MetaTable Address: " + metaTableAddr) + + authorityAddr, _ := authority.Deploy() + log.Print("Auhority Address: " + authorityAddr) +} \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..f88510a --- /dev/null +++ b/readme.md @@ -0,0 +1,13 @@ +# DropKit Require Deployer + +## Prerequisites + +- Go >= 1.13 + +## Deploy Require Smart Contract + +```bash +go run main.go +``` + +The output will show `metaTable` and `Authority` smart contract address.