Commit d4249455 authored by duanjinfei's avatar duanjinfei

change grpc bath sign tx

parent 077f0efa
......@@ -2,3 +2,4 @@
logs
root
cpuProfile.prof
*.DS_Store
\ No newline at end of file
......@@ -4,18 +4,23 @@ GOBIN = $(shell pwd)/build/bin
GO ?= latest
GOFILES_NOVENDOR := $(shell go list -f "{{.Dir}}" ./...)
default: metacryptor
default: metacryptor testclient
all: metacryptor metacryptor-ocl
all: metacryptor metacryptor-ocl testclient
metacryptor-ocl:
go build -tags opencl -o=${GOBIN}/$@
@echo "Done building."
metacryptor:
go build -o=${GOBIN}/$@
go build -o=${GOBIN}/$@ ./cmd/metacryptor
@echo "Done building."
testclient:
go build -o=${GOBIN}/$@ ./cmd/testclient
@echo "Done building."
clean:
rm -fr build/*
docker:
......
package main
import "runtime"
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
Execute()
}
package main
import (
"fmt"
"github.com/spf13/cobra"
)
var versionDetail bool
func init() {
RootCmd.AddCommand(versionCmd)
versionDetail = *versionCmd.Flags().BoolP("detail", "d", true, "Print detail version info")
}
// versionCmd represents the base command when called without any subcommands
var versionCmd = &cobra.Command{
Use: "version",
Short: "Print version number",
Long: ``,
Run: func(cmd *cobra.Command, args []string) {
if versionDetail {
fmt.Println("detail version:v1.0.0")
} else {
fmt.Println("version:v1.0.0")
}
},
}
package main
import (
"fmt"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common/log"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/config"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/service"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/worker"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/xecc"
"github.com/fsnotify/fsnotify"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"google.golang.org/grpc"
"net"
"os"
"path"
"path/filepath"
"sync"
)
var cfgFile string
var Verbose bool
var routineCount uint
// RootCmd represents the base command when called without any subcommands
var RootCmd = &cobra.Command{
Use: "metacryptor",
Short: "The MetaCryptor command-line interface",
Long: ``,
Run: func(cmd *cobra.Command, args []string) {
runNode()
},
// Uncomment the following line if your bare application
// has an action associated with it:
// Run: func(cmd *cobra.Command, args []string) { },
}
func Execute() {
if err := RootCmd.Execute(); err != nil {
log.Fatal(err)
os.Exit(-1)
}
}
func init() {
cobra.OnInitialize(initConfig)
RootCmd.PersistentFlags().UintVar(&routineCount, "routine", 2, "routine count for corrupt do task")
RootCmd.PersistentFlags().StringVar(&cfgFile, "config", "config.toml", "config file (default is ./config.yaml)")
RootCmd.PersistentFlags().BoolVarP(&Verbose, "verbose", "v", false, "verbose output")
}
// initConfig reads in config file and ENV variables if set.
func initConfig() {
log.InitLog()
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
log.Fatal(err)
}
viper.SetConfigName("config") // name of config file (without extension)
if cfgFile != "" { // enable ability to specify config file via flag
//log.Warn(">>> cfgFile: ", cfgFile)
viper.SetConfigFile(cfgFile)
configDir := path.Dir(cfgFile)
if configDir != "." && configDir != dir {
viper.AddConfigPath(configDir)
}
}
viper.AddConfigPath(".")
viper.AutomaticEnv() // read in environment variables that match
// If a config file is found, read it in.
if err := viper.ReadInConfig(); err == nil {
log.Info("Using config file:", viper.ConfigFileUsed())
} else {
log.Error("Read config failed", "error", err)
return
}
_, err = config.ParseConfig(viper.ConfigFileUsed())
if err != nil {
log.WithField("error", err).Fatal("parse config failed")
return
}
//log.Info("config is", config.GetConfig())
config.GetConfig().SetRoutineCount(routineCount)
viper.WatchConfig()
viper.OnConfigChange(func(e fsnotify.Event) {
log.Warn("Config file changed:", e.Name)
})
}
func runNode() {
xecc.XeccInstance()
wk := worker.NewWorker()
wk.Start()
lis, err := net.Listen("tcp", config.GetConfig().GpcAddress)
if err != nil {
fmt.Printf("failed to listen: %v", err)
return
}
s := grpc.NewServer()
service.RegisterCrypter(s, wk)
err = s.Serve(lis)
if err != nil {
fmt.Printf("failed to serve: %v", err)
return
}
wg := sync.WaitGroup{}
wg.Add(1)
wg.Wait()
}
package main
import (
"context"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common/log"
basetype "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/base/v1"
metacrypter "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/crypter/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"math/big"
)
func main() {
client, err := grpc.Dial("127.0.0.1:38001", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
log.Error("dial server failed", err)
}
accounts := common.CreateAccounts(1)
log.Info("account address is ", accounts[0].Address.String())
tmptx := accounts[0].MakeInitTx(big.NewInt(100))
crypterclient := metacrypter.NewCrypterServiceClient(client)
signTxReq := new(metacrypter.BatchSignTxRequest)
signTxReq.RawTx = make([]*basetype.MetaTxBase, 0)
{
var err error
stx := &basetype.MetaTxBase{
TxHash: common.ToHash(tmptx.Hash().Bytes()),
TxType: 1,
ChainId: common.FromBigInt(big.NewInt(100)),
Gas: tmptx.Gas(),
GasPrice: common.FromBigInt(tmptx.GasPrice()),
Value: common.FromBigInt(tmptx.Value()),
Data: tmptx.Data(),
Nonce: tmptx.Nonce(),
To: common.FromEthAddress(tmptx.To()),
}
signTxReq.RawTx = append(signTxReq.RawTx, stx)
signTxReq.Private = common.FromHex(accounts[0].Private)
signRes, err := crypterclient.BatchSignTx(context.Background(), signTxReq)
if err != nil {
log.Errorf("batch sign tx failed with error:(%s)", err)
return
}
recoverReq := new(metacrypter.BatchRecoverTxRequest)
recoverReq.RawTx = signRes.SignedTx
recoverRes, err := crypterclient.BatchRecoverTx(context.Background(), recoverReq, grpc.EmptyCallOption{})
if err != nil {
log.Error("batch recover batch signed tx failed", err)
} else {
log.Info("recover batch signed tx got from ", recoverRes.RecoverdTx[0].From)
}
}
{
req := new(metacrypter.BatchRecoverTxRequest)
req.RawTx = make([]*basetype.MetaTxBase, 0)
v, r, s := tmptx.RawSignatureValues()
log.WithField("txhash", tmptx.Hash().String()).Info("txhash")
log.WithField("r", common.Bytes2Hex(r.Bytes())).Info("tx r")
log.WithField("s", common.Bytes2Hex(s.Bytes())).Info("tx s")
log.WithField("v", common.Bytes2Hex(v.Bytes())).Info("tx v")
rtx := &basetype.MetaTxBase{
TxHash: common.ToHash(tmptx.Hash().Bytes()),
TxType: 1,
ChainId: common.FromBigInt(big.NewInt(100)),
Gas: tmptx.Gas(),
GasPrice: common.FromBigInt(tmptx.GasPrice()),
Value: common.FromBigInt(tmptx.Value()),
Data: tmptx.Data(),
Nonce: tmptx.Nonce(),
To: common.FromEthAddress(tmptx.To()),
R: common.FromBigInt(r),
S: common.FromBigInt(s),
V: common.FromBigInt(v),
}
req.RawTx = append(req.RawTx, rtx)
res, err := crypterclient.BatchRecoverTx(context.Background(), req, grpc.EmptyCallOption{})
if err != nil {
log.Error("batch recover tx failed", err)
}
log.Info("recover got from ", res.RecoverdTx[0].From)
}
}
package main
package common
import (
"crypto/ecdsa"
......@@ -10,10 +10,10 @@ import (
)
type Account struct {
Address common.Address `json:"address"`
Private string `json:"private"`
Nonce uint64 `json:"nonce"`
PK *ecdsa.PrivateKey `json:"-"`
Address common.Address `json:"address"`
Private string `json:"private"`
Nonce uint64 `json:"nonce"`
PK *ecdsa.PrivateKey `json:"-"`
}
func (acc *Account) MakeInitTx(chainid *big.Int) *types.Transaction {
......@@ -33,7 +33,7 @@ func (acc *Account) MakeInitTx(chainid *big.Int) *types.Transaction {
return tx
}
func (acc *Account) SignTx(tx *types.Transaction, chainid *big.Int) (*types.Transaction, error){
func (acc *Account) SignTx(tx *types.Transaction, chainid *big.Int) (*types.Transaction, error) {
signedTx, err := types.SignTx(tx, types.NewEIP155Signer(chainid), acc.PK)
if err != nil {
return nil, err
......@@ -43,8 +43,8 @@ func (acc *Account) SignTx(tx *types.Transaction, chainid *big.Int) (*types.Tran
func CreateAccounts(count int) []*Account {
accs := make([]*Account, 0, count)
for i:=0; i < count; i++ {
pk,_ := crypto.GenerateKey()
for i := 0; i < count; i++ {
pk, _ := crypto.GenerateKey()
addr := crypto.PubkeyToAddress(pk.PublicKey)
private := hexutil.Encode(crypto.FromECDSA(pk))
accs = append(accs, &Account{Address: addr, Private: private, PK: pk})
......
......@@ -16,20 +16,14 @@ var (
type LogConfig struct {
Save uint `json:"save"`
Path string `json:"path"`
Level string `json:"level"`
}
func InitLog(logConfig LogConfig) {
func InitLog() {
mlog.Out = os.Stdout
var loglevel logrus.Level
err := loglevel.UnmarshalText([]byte(logConfig.Level))
if err != nil {
mlog.Panicf("set log level failed: %v", err)
}
mlog.SetLevel(loglevel)
mlog.SetLevel(logrus.InfoLevel)
mlog.Formatter = &logrus.TextFormatter{FullTimestamp: true, TimestampFormat: "2006-01-2 15:04:05.000"}
localFilesystemLogger(mlog, logConfig.Path, logConfig.Save)
//localFilesystemLogger(mlog, logConfig.Path, logConfig.Save)
}
func logWriter(logPath string, level string, save uint) *rotatelogs.RotateLogs {
......
grpc_addr = ":38002"
chain_id = 512512
\ No newline at end of file
package config
import (
"github.com/BurntSushi/toml"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common/log"
"github.com/spf13/viper"
"io/ioutil"
"runtime"
)
type Config struct {
GpcAddress string `json:"grpc_addr" toml:"grpc_addr"`
ChainId int64 `json:"chain_id" toml:"chain_id"`
RootDir string
}
var _cfg *Config = nil
func (conf *Config) SetRoutineCount(n uint) {
viper.Set("routine_count", n)
}
func (conf *Config) GetRoutineCount() uint {
root := viper.GetUint("routine_count")
if root <= 0 {
root = uint(runtime.NumCPU())
}
return root
}
func ParseConfig(path string) (*Config, error) {
data, err := ioutil.ReadFile(path)
if err != nil {
log.Error("get config failed", "err", err)
panic(err)
}
err = toml.Unmarshal(data, &_cfg)
//err = json.Unmarshal(data, &_cfg)
if err != nil {
log.Error("unmarshal config failed", "err", err)
panic(err)
}
return _cfg, nil
}
func GetConfig() *Config {
return _cfg
}
package crypto
import (
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common"
basev1 "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/base/v1"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"math/big"
)
func SignTx(pk []byte, tx *basev1.MetaTxBase, chainid *big.Int) error {
txdata := &types.LegacyTx{
Nonce: tx.Nonce,
GasPrice: common.ToBigInt(tx.GasPrice),
Gas: tx.Gas,
To: common.ToEthAddress(tx.To),
Value: common.ToBigInt(tx.Value),
Data: tx.Data,
}
ntx := types.NewTx(txdata)
signer := types.NewEIP155Signer(chainid)
privk, err := crypto.ToECDSA(pk)
if err != nil {
return err
}
signedTx, err := types.SignTx(ntx, signer, privk)
if err != nil {
return err
}
v, r, s := signedTx.RawSignatureValues()
tx.R = common.FromBigInt(r)
tx.S = common.FromBigInt(s)
tx.V = common.FromBigInt(v)
return nil
}
......@@ -3,34 +3,52 @@ module github.com/CaduceusMetaverseProtocol/MetaCryptor
go 1.18
require (
github.com/BurntSushi/toml v0.3.1
github.com/CaduceusMetaverseProtocol/MetaProtocol v0.0.1
github.com/CaduceusMetaverseProtocol/MetaTypes v1.0.0
github.com/btcsuite/btcd v0.21.0-beta
github.com/ethereum/go-ethereum v1.10.26
github.com/fsnotify/fsnotify v1.6.0
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
github.com/rakyll/statik v0.1.7
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
github.com/sirupsen/logrus v1.9.0
github.com/spf13/cobra v1.6.1
github.com/spf13/viper v1.15.0
github.com/tjfoc/gmsm v1.4.1
golang.org/x/crypto v0.5.0
google.golang.org/grpc v1.51.0
google.golang.org/grpc v1.52.0
)
require (
github.com/CaduceusMetaverseProtocol/MetaTypes v1.0.0 // indirect
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.0.1 // indirect
github.com/jonboulle/clockwork v0.3.0 // indirect
github.com/lestrrat-go/strftime v1.0.6 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/pelletier/go-toml/v2 v2.0.6 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/spf13/afero v1.9.3 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/subosito/gotenv v1.4.2 // indirect
golang.org/x/net v0.5.0 // indirect
golang.org/x/sys v0.4.0 // indirect
golang.org/x/text v0.6.0 // indirect
google.golang.org/genproto v0.0.0-20221205194025-8222ab48f5fc // indirect
google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef // indirect
google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
replace github.com/CaduceusMetaverseProtocol/MetaProtocol => ../MetaProtocol-main
replace github.com/CaduceusMetaverseProtocol/MetaTypes => ../MetaTypes-main
replace github.com/ethereum/go-ethereum => github.com/CaduceusMetaverseProtocol/go-ethereum v1.10.26
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/CaduceusMetaverseProtocol/go-ethereum v1.10.26 h1:+bPap43xrI8JBvlzEaAcBvhBZN5z0keRRd7lEn9UkqQ=
github.com/CaduceusMetaverseProtocol/go-ethereum v1.10.26/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg=
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8=
github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o=
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
......@@ -20,8 +61,14 @@ github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtE
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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=
......@@ -32,59 +79,128 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/ethereum/go-ethereum v1.10.26 h1:i/7d9RBBwiXCEuyduBQzJw/mKmnvzsN14jqBmytw72s=
github.com/ethereum/go-ethereum v1.10.26/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg=
github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/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/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/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/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc=
github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jonboulle/clockwork v0.3.0 h1:9BSCMi8C+0qdApAp4auwX0RkLGUjs956h0EkuQymUhg=
github.com/jonboulle/clockwork v0.3.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
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/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA=
github.com/lestrrat-go/strftime v1.0.6 h1:CFGsDEt1pOpFNU+TJB0nhz9jl+K0hZSLE205AhTIGQQ=
github.com/lestrrat-go/strftime v1.0.6/go.mod h1:f7jQKgV5nnJpYgdEasS+/y7EsTb8ykN2z68n3TtcTaw=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
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.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU=
github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
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_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
......@@ -93,106 +209,374 @@ github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ=
github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk=
github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=
github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY=
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU=
github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
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/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY=
github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho=
github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE=
github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4=
github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/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-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
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-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/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-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw=
golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/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/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/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-20180909124046-d0be0721c37e/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k=
golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/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-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20221205194025-8222ab48f5fc h1:nUKKji0AarrQKh6XpFEpG3p1TNztxhe7C8TcUvDgXqw=
google.golang.org/genproto v0.0.0-20221205194025-8222ab48f5fc/go.mod h1:1dOng4TWOomJrDGhpXjfCD35wQC6jnC7HpRmOFRqEV0=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef h1:uQ2vjV/sHTsWSqdKeLqmwitzgvjMl7o4IdtHwUDXSJY=
google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U=
google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww=
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.52.0 h1:kd48UiU7EHsV4rnLyOJRuP/Il/UHE7gdDAQ+SZI7nZk=
google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
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.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
package main
import (
"context"
"fmt"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common/log"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/service"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/xecc"
basetype "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/base/v1"
metacrypter "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/crypter/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"math/big"
"net"
"time"
)
func test() {
time.Sleep(time.Second * 4)
client, err := grpc.Dial("127.0.0.1:38001", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
log.Error("dial server failed", err)
}
accounts := CreateAccounts(1)
log.Info("account address is ", accounts[0].Address.String())
tx := accounts[0].MakeInitTx(big.NewInt(100))
crypterclient := metacrypter.NewCrypterServiceClient(client)
req := new(metacrypter.BatchRecoverTxRequest)
req.RawTx = make([]*basetype.MetaTxBase, 0)
v, r, s := tx.RawSignatureValues()
log.WithField("txhash", tx.Hash().String()).Info("txhash")
log.WithField("r", common.Bytes2Hex(r.Bytes())).Info("tx r")
log.WithField("s", common.Bytes2Hex(s.Bytes())).Info("tx s")
log.WithField("v", common.Bytes2Hex(v.Bytes())).Info("tx v")
rtx := &basetype.MetaTxBase{
TxHash: common.ToHash(tx.Hash().Bytes()),
TxType: 1,
ChainId: common.FromBigInt(big.NewInt(100)),
Gas: tx.Gas(),
GasPrice: common.FromBigInt(tx.GasPrice()),
Value: common.FromBigInt(tx.Value()),
Data: tx.Data(),
Nonce: tx.Nonce(),
To: common.FromEthAddress(tx.To()),
R: common.FromBigInt(r),
S: common.FromBigInt(s),
V: common.FromBigInt(v),
}
req.RawTx = append(req.RawTx, rtx)
res, err := crypterclient.BatchRecoverTx(context.Background(), req, grpc.EmptyCallOption{})
if err != nil {
log.Error("batch recover tx failed", err)
}
log.Info("recover got from ", res.RecoverdTx[0].From)
}
func main() {
xecc.XeccInstance()
lis, err := net.Listen("tcp", ":38001")
if err != nil {
fmt.Printf("failed to listen: %v", err)
return
}
s := grpc.NewServer()
service.RegisterCrypter(s)
go test()
err = s.Serve(lis)
if err != nil {
fmt.Printf("failed to serve: %v", err)
return
}
}
......@@ -2,74 +2,48 @@ package service
import (
"context"
"encoding/hex"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common/log"
metatypes "github.com/CaduceusMetaverseProtocol/MetaTypes/types"
"math/big"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/crypto"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/worker"
metacrypter "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/crypter/v1"
metatypes "github.com/CaduceusMetaverseProtocol/MetaTypes/types"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
type CrypterServer struct {
worker *worker.Worker
metacrypter.UnimplementedCrypterServiceServer
}
func (*CrypterServer) BatchSign(ctx context.Context, req *metacrypter.BatchSignRequest) (*metacrypter.BatchSignResponse, error) {
func (s *CrypterServer) BatchSign(ctx context.Context, req *metacrypter.BatchSignRequest) (*metacrypter.BatchSignResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BatchSign not implemented")
}
func (*CrypterServer) BatchVerify(ctx context.Context, req *metacrypter.BatchVerifyRequest) (*metacrypter.BatchVerifyResponse, error) {
func (s *CrypterServer) BatchVerify(ctx context.Context, req *metacrypter.BatchVerifyRequest) (*metacrypter.BatchVerifyResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BatchVerify not implemented")
}
func (*CrypterServer) BatchRecover(ctx context.Context, req *metacrypter.BatchRecoverRequest) (*metacrypter.BatchRecoverResponse, error) {
func (s *CrypterServer) BatchRecover(ctx context.Context, req *metacrypter.BatchRecoverRequest) (*metacrypter.BatchRecoverResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BatchRecover not implemented")
}
func (*CrypterServer) BatchRecoverTx(ctx context.Context, req *metacrypter.BatchRecoverTxRequest) (*metacrypter.BatchRecoverTxResponse, error) {
func (s *CrypterServer) BatchSignTx(ctx context.Context, req *metacrypter.BatchSignTxRequest) (*metacrypter.BatchSignTxResponse, error) {
log.Info("server get batch recover tx request")
signedTxs := s.worker.BatchSignTx(req.RawTx, req.Private)
response := new(metacrypter.BatchSignTxResponse)
response.SignedTx = signedTxs
return response, nil
}
func (s *CrypterServer) BatchRecoverTx(ctx context.Context, req *metacrypter.BatchRecoverTxRequest) (*metacrypter.BatchRecoverTxResponse, error) {
//tasks := make([]*XTaskSecp256k1RPubkey, len(req.RawTx))
//big8 := big.NewInt(8)
log.Info("server get batch recover tx request")
froms := make([][]byte, len(req.RawTx))
for i, tx := range req.RawTx {
log.WithField("txhash", tx.TxHash.String()).Info("txhash")
log.WithField("r", tx.R.String()).Info("tx r")
log.WithField("s", tx.S.String()).Info("tx s")
log.WithField("v", tx.V.String()).Info("tx v")
log.WithField("chainid", tx.ChainId.String()).Info("tx chainid")
froms := s.worker.BatchRecoverTx(req.RawTx)
V := common.ToBigInt(tx.V)
chainid := common.ToBigInt(tx.ChainId)
chainIdMul := new(big.Int).Mul(chainid, big.NewInt(2))
v := new(big.Int).Sub(V, chainIdMul)
vb := byte(v.Uint64() - 35)
log.WithField("vb is ", vb).Info("vb")
signature := make([]byte, 65)
copy(signature[:32], common.LeftPadBytes(tx.R.Bytes(), 32))
copy(signature[32:64], common.LeftPadBytes(tx.S.Bytes(), 32))
signature[64] = vb
pubk, err := crypto.RecoverPubkey(common.LeftPadBytes(crypto.SignedHash(tx, chainid), 32), signature)
if err != nil {
log.Info("recover failed for tx", "index", i, "err", err)
} else {
froms[i] = common.CopyBytes(crypto.Keccak256(pubk[1:])[12:])
log.Info("recover address is ", hex.EncodeToString(froms[i]))
}
//task := &XTaskSecp256k1RPubkey{
// Msg: tx.TxHash.Hash,
// Rsig: crypto.BytesCombine(common.LeftPadBytes(tx.R.Data, 32), common.LeftPadBytes(tx.S.Data, 32), []byte{vb}),
//}
//tasks[i] = task
}
response := new(metacrypter.BatchRecoverTxResponse)
response.RecoverdTx = req.RawTx
//resps, err := xecc.XeccInstance().BatchSecp256k1RecoverPubkey(tasks)
//if err != nil {
// return response, err
//}
for i := 0; i < len(response.RecoverdTx); i++ {
a := metatypes.BytesToAddress(froms[i])
......@@ -79,6 +53,6 @@ func (*CrypterServer) BatchRecoverTx(ctx context.Context, req *metacrypter.Batch
return response, nil
}
func RegisterCrypter(server *grpc.Server) {
metacrypter.RegisterCrypterServiceServer(server, &CrypterServer{})
func RegisterCrypter(server *grpc.Server, worker *worker.Worker) {
metacrypter.RegisterCrypterServiceServer(server, &CrypterServer{worker: worker})
}
package worker
import (
"errors"
"sync"
)
var (
ErrTaskPoolIsFull = errors.New("task pool is full")
)
type TaskHandle func(interface{})
type Tasks struct {
tasknum uint
handler TaskHandle
taskpool chan interface{}
wg sync.WaitGroup
}
func NewTasks(routine uint, handle TaskHandle) *Tasks {
return &Tasks{
tasknum: routine,
handler: handle,
taskpool: make(chan interface{}, 1000000),
}
}
func (t *Tasks) AddTask(task interface{}) error {
select {
case t.taskpool <- task:
return nil
default:
return ErrTaskPoolIsFull
}
}
func (t *Tasks) Stop() {
close(t.taskpool)
}
func (t *Tasks) Run() {
for i := uint(0); i < t.tasknum; i++ {
t.wg.Add(1)
go func() {
defer t.wg.Done()
for {
select {
case task, ok := <-t.taskpool:
if !ok {
return
}
t.handler(task)
}
}
}()
}
}
func (t *Tasks) Done() {
t.wg.Wait()
}
package worker
import (
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/common/log"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/config"
"github.com/CaduceusMetaverseProtocol/MetaCryptor/crypto"
basev1 "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/base/v1"
"math/big"
"sync"
)
type Worker struct {
recoverTask *Tasks
signTask *Tasks
}
func NewWorker() *Worker {
w := new(Worker)
w.recoverTask = NewTasks(config.GetConfig().GetRoutineCount(), w.handleRecoverTx)
w.signTask = NewTasks(config.GetConfig().GetRoutineCount(), w.handleSignTx)
return w
}
func (w *Worker) handleRecoverTx(t interface{}) {
defChainId := big.NewInt(config.GetConfig().ChainId)
item, ok := t.(*ItemRecover)
if !ok {
return
}
tx := item.tx
log.WithField("txHash", tx.TxHash.String()).Info("txHash")
log.WithField("r", tx.R.String()).Info("tx r")
log.WithField("s", tx.S.String()).Info("tx s")
log.WithField("v", tx.V.String()).Info("tx v")
log.WithField("chainId", tx.ChainId.String()).Info("tx chainId")
var chainid *big.Int
if tx.ChainId == nil {
chainid = defChainId
} else {
chainid = common.ToBigInt(tx.ChainId)
}
V := common.ToBigInt(tx.V)
chainIdMul := new(big.Int).Mul(chainid, big.NewInt(2))
v := new(big.Int).Sub(V, chainIdMul)
vb := byte(v.Uint64() - 35)
signature := make([]byte, 65)
copy(signature[:32], common.LeftPadBytes(tx.R.Bytes(), 32))
copy(signature[32:64], common.LeftPadBytes(tx.S.Bytes(), 32))
signature[64] = vb
pubk, err := crypto.RecoverPubkey(common.LeftPadBytes(crypto.SignedHash(tx, chainid), 32), signature)
if err != nil {
item.response <- err
} else {
item.response <- common.CopyBytes(crypto.Keccak256(pubk[1:])[12:])
}
}
func (w *Worker) handleSignTx(t interface{}) {
defChainId := big.NewInt(config.GetConfig().ChainId)
item := t.(*ItemSignTx)
tx := item.tx
var chainid *big.Int
if tx.ChainId == nil {
chainid = defChainId
} else {
chainid = common.ToBigInt(tx.ChainId)
}
err := crypto.SignTx(item.pk, tx, chainid)
if err != nil {
item.response <- err
} else {
item.response <- tx
}
}
func (w *Worker) Start() {
w.recoverTask.Run()
w.signTask.Run()
}
type ItemRecover struct {
tx *basev1.MetaTxBase
response chan interface{}
}
type ItemSignTx struct {
tx *basev1.MetaTxBase
pk []byte
response chan interface{}
}
func (w *Worker) BatchRecoverTx(txs []*basev1.MetaTxBase) [][]byte {
results := make([][]byte, len(txs))
wg := sync.WaitGroup{}
for i, tx := range txs {
wg.Add(1)
go func(tx *basev1.MetaTxBase, froms [][]byte, index int) {
defer wg.Done()
res := make(chan interface{})
if err := w.recoverTask.AddTask(&ItemRecover{tx: tx, response: res}); err != nil {
res <- err
}
data := <-res
switch msg := (data).(type) {
case error:
froms[index] = []byte{}
case []byte:
froms[index] = common.CopyBytes(msg)
}
}(tx, results, i)
}
wg.Wait()
return results
}
func (w *Worker) BatchSignTx(txs []*basev1.MetaTxBase, pk []byte) []*basev1.MetaTxBase {
results := make([]*basev1.MetaTxBase, len(txs))
wg := sync.WaitGroup{}
for i, tx := range txs {
wg.Add(1)
go func(tx *basev1.MetaTxBase, signedTxs []*basev1.MetaTxBase, index int) {
defer wg.Done()
res := make(chan interface{})
if err := w.signTask.AddTask(&ItemSignTx{pk: pk, tx: tx, response: res}); err != nil {
res <- err
}
data := <-res
switch msg := (data).(type) {
case error:
//froms[index] = []byte{}
case *basev1.MetaTxBase:
signedTxs[index] = msg
}
}(tx, results, i)
}
wg.Wait()
return results
}
......@@ -38,6 +38,14 @@ message BatchRecoverResponse {
repeated bytes pubkey = 1;
}
message BatchSignTxRequest {
repeated base.v1.MetaTxBase raw_tx = 1;
bytes private = 2;
}
message BatchSignTxResponse {
repeated base.v1.MetaTxBase signed_tx = 1;
}
message BatchRecoverTxRequest {
repeated base.v1.MetaTxBase raw_tx = 1;
}
......
......@@ -8,5 +8,6 @@ service CrypterService {
rpc BatchSign(BatchSignRequest) returns (BatchSignResponse) {}
rpc BatchVerify(BatchVerifyRequest) returns (BatchVerifyResponse) {}
rpc BatchRecover(BatchRecoverRequest) returns (BatchRecoverResponse) {}
rpc BatchSignTx(BatchSignTxRequest) returns (BatchSignTxResponse) {}
rpc BatchRecoverTx(BatchRecoverTxRequest) returns (BatchRecoverTxResponse) {}
}
......@@ -299,6 +299,90 @@ func (m *BatchRecoverResponse) GetPubkey() [][]byte {
return nil
}
type BatchSignTxRequest struct {
RawTx []*v1.MetaTxBase `protobuf:"bytes,1,rep,name=raw_tx,json=rawTx,proto3" json:"raw_tx,omitempty"`
Private []byte `protobuf:"bytes,2,opt,name=private,proto3" json:"private,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BatchSignTxRequest) Reset() { *m = BatchSignTxRequest{} }
func (m *BatchSignTxRequest) String() string { return proto.CompactTextString(m) }
func (*BatchSignTxRequest) ProtoMessage() {}
func (*BatchSignTxRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_c54a21c4b8afb3e6, []int{6}
}
func (m *BatchSignTxRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BatchSignTxRequest.Unmarshal(m, b)
}
func (m *BatchSignTxRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BatchSignTxRequest.Marshal(b, m, deterministic)
}
func (m *BatchSignTxRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_BatchSignTxRequest.Merge(m, src)
}
func (m *BatchSignTxRequest) XXX_Size() int {
return xxx_messageInfo_BatchSignTxRequest.Size(m)
}
func (m *BatchSignTxRequest) XXX_DiscardUnknown() {
xxx_messageInfo_BatchSignTxRequest.DiscardUnknown(m)
}
var xxx_messageInfo_BatchSignTxRequest proto.InternalMessageInfo
func (m *BatchSignTxRequest) GetRawTx() []*v1.MetaTxBase {
if m != nil {
return m.RawTx
}
return nil
}
func (m *BatchSignTxRequest) GetPrivate() []byte {
if m != nil {
return m.Private
}
return nil
}
type BatchSignTxResponse struct {
SignedTx []*v1.MetaTxBase `protobuf:"bytes,1,rep,name=signed_tx,json=signedTx,proto3" json:"signed_tx,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BatchSignTxResponse) Reset() { *m = BatchSignTxResponse{} }
func (m *BatchSignTxResponse) String() string { return proto.CompactTextString(m) }
func (*BatchSignTxResponse) ProtoMessage() {}
func (*BatchSignTxResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_c54a21c4b8afb3e6, []int{7}
}
func (m *BatchSignTxResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BatchSignTxResponse.Unmarshal(m, b)
}
func (m *BatchSignTxResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BatchSignTxResponse.Marshal(b, m, deterministic)
}
func (m *BatchSignTxResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_BatchSignTxResponse.Merge(m, src)
}
func (m *BatchSignTxResponse) XXX_Size() int {
return xxx_messageInfo_BatchSignTxResponse.Size(m)
}
func (m *BatchSignTxResponse) XXX_DiscardUnknown() {
xxx_messageInfo_BatchSignTxResponse.DiscardUnknown(m)
}
var xxx_messageInfo_BatchSignTxResponse proto.InternalMessageInfo
func (m *BatchSignTxResponse) GetSignedTx() []*v1.MetaTxBase {
if m != nil {
return m.SignedTx
}
return nil
}
type BatchRecoverTxRequest struct {
RawTx []*v1.MetaTxBase `protobuf:"bytes,1,rep,name=raw_tx,json=rawTx,proto3" json:"raw_tx,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
......@@ -310,7 +394,7 @@ func (m *BatchRecoverTxRequest) Reset() { *m = BatchRecoverTxRequest{} }
func (m *BatchRecoverTxRequest) String() string { return proto.CompactTextString(m) }
func (*BatchRecoverTxRequest) ProtoMessage() {}
func (*BatchRecoverTxRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_c54a21c4b8afb3e6, []int{6}
return fileDescriptor_c54a21c4b8afb3e6, []int{8}
}
func (m *BatchRecoverTxRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BatchRecoverTxRequest.Unmarshal(m, b)
......@@ -348,7 +432,7 @@ func (m *BatchRecoverTxResponse) Reset() { *m = BatchRecoverTxResponse{}
func (m *BatchRecoverTxResponse) String() string { return proto.CompactTextString(m) }
func (*BatchRecoverTxResponse) ProtoMessage() {}
func (*BatchRecoverTxResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_c54a21c4b8afb3e6, []int{7}
return fileDescriptor_c54a21c4b8afb3e6, []int{9}
}
func (m *BatchRecoverTxResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BatchRecoverTxResponse.Unmarshal(m, b)
......@@ -382,6 +466,8 @@ func init() {
proto.RegisterType((*BatchVerifyResponse)(nil), "crypter.v1.BatchVerifyResponse")
proto.RegisterType((*BatchRecoverRequest)(nil), "crypter.v1.BatchRecoverRequest")
proto.RegisterType((*BatchRecoverResponse)(nil), "crypter.v1.BatchRecoverResponse")
proto.RegisterType((*BatchSignTxRequest)(nil), "crypter.v1.BatchSignTxRequest")
proto.RegisterType((*BatchSignTxResponse)(nil), "crypter.v1.BatchSignTxResponse")
proto.RegisterType((*BatchRecoverTxRequest)(nil), "crypter.v1.BatchRecoverTxRequest")
proto.RegisterType((*BatchRecoverTxResponse)(nil), "crypter.v1.BatchRecoverTxResponse")
}
......@@ -389,36 +475,39 @@ func init() {
func init() { proto.RegisterFile("crypter/v1/request_response.proto", fileDescriptor_c54a21c4b8afb3e6) }
var fileDescriptor_c54a21c4b8afb3e6 = []byte{
// 492 bytes of a gzipped FileDescriptorProto
// 533 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x93, 0xcf, 0x6a, 0xdb, 0x40,
0x10, 0xc6, 0x91, 0xdc, 0x98, 0x64, 0x5c, 0x42, 0xab, 0x38, 0xc6, 0x35, 0x85, 0xba, 0x3a, 0x85,
0x1e, 0x24, 0x94, 0xe6, 0x94, 0xde, 0xac, 0x43, 0x4f, 0x2d, 0x46, 0x11, 0x26, 0x94, 0x80, 0x59,
0x49, 0x63, 0x45, 0xd8, 0xf2, 0xaa, 0xbb, 0x2b, 0x45, 0x3a, 0x14, 0xfa, 0x2c, 0x3d, 0xf6, 0x39,
0x7a, 0xea, 0x63, 0xf4, 0xd8, 0xa7, 0x28, 0x2b, 0xad, 0xfc, 0x0f, 0x4a, 0xa1, 0x90, 0xdb, 0xcc,
0x68, 0xe6, 0xfb, 0x7e, 0x3b, 0xda, 0x85, 0xd7, 0x21, 0xab, 0x32, 0x81, 0xcc, 0x2e, 0x1c, 0x9b,
0xe1, 0xe7, 0x1c, 0xb9, 0x98, 0x33, 0xe4, 0x19, 0x5d, 0x73, 0xb4, 0x32, 0x46, 0x05, 0x35, 0x40,
0xb5, 0x58, 0x85, 0x33, 0x1a, 0xc7, 0x94, 0xc6, 0x2b, 0xb4, 0xeb, 0x2f, 0x41, 0xbe, 0xb0, 0x17,
0x09, 0xae, 0xa2, 0x79, 0x4a, 0xf8, 0xb2, 0xe9, 0x1e, 0xbd, 0x3a, 0xec, 0x10, 0x49, 0x8a, 0x5c,
0x90, 0x34, 0x53, 0x0d, 0x46, 0x40, 0x38, 0x4a, 0xbb, 0x14, 0x05, 0x51, 0xb5, 0x17, 0x7b, 0x14,
0x9c, 0xe6, 0x2c, 0x54, 0xee, 0x26, 0x83, 0x67, 0x13, 0x22, 0xc2, 0xfb, 0x9b, 0x24, 0x5e, 0x7b,
0x0d, 0xa0, 0xd1, 0x87, 0xa3, 0x8c, 0x25, 0xc5, 0x72, 0xa8, 0x8d, 0x3b, 0x17, 0x4f, 0xbd, 0x26,
0x31, 0x0c, 0x78, 0x12, 0x11, 0x41, 0x86, 0x7a, 0x5d, 0xac, 0x63, 0xe3, 0x0a, 0x1a, 0xfa, 0xb9,
0xa8, 0x32, 0x1c, 0x76, 0xc6, 0xda, 0xc5, 0xe9, 0xe5, 0xb9, 0xb5, 0x3d, 0x90, 0xe5, 0xca, 0xd0,
0xaf, 0x32, 0xf4, 0x4e, 0xc2, 0x36, 0x34, 0x1d, 0x78, 0xbe, 0xe3, 0xd9, 0x2c, 0xc3, 0x78, 0x09,
0x27, 0x3c, 0x89, 0xd7, 0x44, 0xe4, 0x0c, 0x95, 0xf1, 0xb6, 0x60, 0x7e, 0xd5, 0xc0, 0xa8, 0x67,
0x66, 0xc8, 0x92, 0x45, 0xd5, 0x92, 0x0e, 0xa0, 0x9b, 0xe5, 0xc1, 0x12, 0x2b, 0x35, 0xa1, 0xb2,
0x7d, 0x31, 0xfd, 0x40, 0xec, 0xbf, 0xa9, 0xcf, 0xf6, 0x08, 0x14, 0xf7, 0x08, 0x8e, 0x0b, 0x59,
0x49, 0x30, 0xaa, 0x21, 0x8e, 0xbd, 0x4d, 0x6e, 0x7e, 0x51, 0x23, 0x1e, 0x86, 0xb4, 0x40, 0xd6,
0x52, 0xb7, 0x9b, 0xd4, 0x76, 0x36, 0xf9, 0x18, 0xc4, 0x16, 0xf4, 0xf7, 0xed, 0x15, 0xf2, 0x5f,
0xb6, 0x66, 0xba, 0x70, 0xbe, 0xdb, 0xef, 0x97, 0x2d, 0xf0, 0x1b, 0xe8, 0x32, 0xf2, 0x30, 0x17,
0x65, 0x3d, 0xd0, 0xbb, 0x3c, 0xb3, 0xe4, 0x25, 0x93, 0xbe, 0x1f, 0x50, 0x10, 0xbf, 0x9c, 0x10,
0x8e, 0xde, 0x11, 0x23, 0x0f, 0x7e, 0x69, 0x7e, 0x84, 0xc1, 0xa1, 0x88, 0xb2, 0xbd, 0x82, 0x1e,
0x6b, 0x8a, 0xd1, 0x3f, 0xa4, 0xa0, 0xed, 0xf3, 0xcb, 0xc9, 0x0f, 0x0d, 0x4e, 0x43, 0x9a, 0xee,
0x1c, 0x76, 0xd2, 0x57, 0x5c, 0xad, 0xf2, 0x54, 0xde, 0xe4, 0xa9, 0xf6, 0xe9, 0x26, 0x4e, 0xc4,
0x7d, 0x1e, 0x58, 0x21, 0x4d, 0x6d, 0x97, 0x44, 0x79, 0x88, 0x39, 0x97, 0xaa, 0x05, 0x32, 0xd5,
0x14, 0xd2, 0x95, 0x2d, 0x2b, 0x9b, 0x24, 0xc6, 0x75, 0xf3, 0x94, 0xec, 0x98, 0xda, 0xdb, 0x57,
0xf2, 0x4e, 0x85, 0x85, 0xf3, 0x4d, 0xef, 0xb8, 0xb7, 0xb7, 0xdf, 0x75, 0x70, 0x95, 0xff, 0xcc,
0xf9, 0xb9, 0x49, 0xee, 0x66, 0xce, 0x2f, 0x7d, 0xb0, 0x4d, 0xee, 0xde, 0x4f, 0x27, 0x52, 0x5e,
0xfe, 0xd1, 0xdf, 0x7a, 0x4f, 0x7d, 0xb8, 0xbe, 0x9e, 0x39, 0x41, 0xb7, 0x76, 0x79, 0xfb, 0x27,
0x00, 0x00, 0xff, 0xff, 0xae, 0xa0, 0xe3, 0xb0, 0x11, 0x04, 0x00, 0x00,
0x10, 0xc6, 0x91, 0xd2, 0xb8, 0xce, 0x38, 0x84, 0x56, 0x71, 0x8c, 0x6b, 0x0a, 0x75, 0x75, 0x32,
0x3d, 0x48, 0x55, 0x9a, 0x53, 0x7a, 0xb3, 0x0f, 0x39, 0xb5, 0x18, 0x45, 0x98, 0x10, 0x02, 0x66,
0x2d, 0x8d, 0x15, 0x61, 0xcb, 0xab, 0xee, 0xae, 0x14, 0xe9, 0x50, 0xe8, 0xb3, 0xf4, 0xd8, 0xe7,
0xe8, 0xa9, 0x8f, 0xd1, 0x63, 0x9f, 0xa2, 0xac, 0xb4, 0xf2, 0x3f, 0x28, 0x81, 0x40, 0x6f, 0x3b,
0xa3, 0x6f, 0xbf, 0xef, 0xb7, 0xa3, 0x5d, 0x78, 0xeb, 0xb3, 0x22, 0x11, 0xc8, 0xec, 0xcc, 0xb1,
0x19, 0x7e, 0x49, 0x91, 0x8b, 0x29, 0x43, 0x9e, 0xd0, 0x15, 0x47, 0x2b, 0x61, 0x54, 0x50, 0x03,
0x94, 0xc4, 0xca, 0x9c, 0x5e, 0x3f, 0xa4, 0x34, 0x5c, 0xa2, 0x5d, 0x7e, 0x99, 0xa5, 0x73, 0x7b,
0x1e, 0xe1, 0x32, 0x98, 0xc6, 0x84, 0x2f, 0x2a, 0x75, 0xef, 0xcd, 0xbe, 0x42, 0x44, 0x31, 0x72,
0x41, 0xe2, 0x44, 0x09, 0x8c, 0x19, 0xe1, 0x28, 0xe3, 0x62, 0x14, 0x44, 0xf5, 0x5e, 0xed, 0x50,
0x70, 0x9a, 0x32, 0x5f, 0xa5, 0x9b, 0x0c, 0x5e, 0x0c, 0x89, 0xf0, 0xef, 0xaf, 0xa3, 0x70, 0xe5,
0x56, 0x80, 0x46, 0x1b, 0x0e, 0x13, 0x16, 0x65, 0x8b, 0xae, 0xd6, 0x3f, 0x18, 0x1c, 0xbb, 0x55,
0x61, 0x18, 0xf0, 0x2c, 0x20, 0x82, 0x74, 0xf5, 0xb2, 0x59, 0xae, 0x8d, 0x0b, 0xa8, 0xe8, 0xa7,
0xa2, 0x48, 0xb0, 0x7b, 0xd0, 0xd7, 0x06, 0x27, 0xe7, 0x67, 0xd6, 0xe6, 0x40, 0xd6, 0x48, 0x2e,
0xbd, 0x22, 0x41, 0xf7, 0xc8, 0xaf, 0x97, 0xa6, 0x03, 0x2f, 0xb7, 0x32, 0xab, 0x61, 0x18, 0xaf,
0xe1, 0x88, 0x47, 0xe1, 0x8a, 0x88, 0x94, 0xa1, 0x0a, 0xde, 0x34, 0xcc, 0x6f, 0x1a, 0x18, 0xe5,
0x9e, 0x09, 0xb2, 0x68, 0x5e, 0xd4, 0xa4, 0x1d, 0x68, 0x24, 0xe9, 0x6c, 0x81, 0x85, 0xda, 0xa1,
0xaa, 0x5d, 0x33, 0x7d, 0xcf, 0xec, 0xc9, 0xd4, 0xa7, 0x3b, 0x04, 0x8a, 0xbb, 0x07, 0xcd, 0x4c,
0x76, 0x22, 0x0c, 0x4a, 0x88, 0xa6, 0xbb, 0xae, 0xcd, 0xaf, 0x6a, 0x8b, 0x8b, 0x3e, 0xcd, 0x90,
0xd5, 0xd4, 0xf5, 0x24, 0xb5, 0xad, 0x49, 0xfe, 0x0f, 0x62, 0x0b, 0xda, 0xbb, 0xf1, 0x0a, 0xf9,
0x1f, 0x53, 0x33, 0x6f, 0xd5, 0x8c, 0xe5, 0x7f, 0xf1, 0xf2, 0x9a, 0xf6, 0x1d, 0x34, 0x18, 0x79,
0x98, 0x8a, 0xbc, 0x54, 0xb7, 0xce, 0x4f, 0x2d, 0x79, 0xc3, 0x64, 0xe8, 0x27, 0x14, 0xc4, 0xcb,
0x87, 0x84, 0xa3, 0x7b, 0xc8, 0xc8, 0x83, 0x97, 0x1b, 0x5d, 0x78, 0x2e, 0x2f, 0x0b, 0x11, 0xf2,
0x0c, 0xda, 0xe0, 0xd8, 0xad, 0x4b, 0xf3, 0x4a, 0x8d, 0xa2, 0xf6, 0x56, 0x28, 0xef, 0xab, 0x63,
0x63, 0xf0, 0x88, 0x7f, 0xb3, 0x52, 0x79, 0xb9, 0x39, 0x82, 0xb3, 0xed, 0x43, 0x3d, 0x89, 0xd3,
0xfc, 0x0c, 0x9d, 0x7d, 0x13, 0x05, 0x74, 0x01, 0x2d, 0x56, 0x35, 0x1f, 0x43, 0x82, 0x5a, 0xe7,
0xe5, 0xc3, 0x9f, 0x1a, 0x9c, 0xf8, 0x34, 0xde, 0xfa, 0x23, 0xc3, 0xb6, 0xe2, 0xaa, 0x9d, 0xc7,
0xf2, 0xb9, 0x8d, 0xb5, 0xdb, 0xeb, 0x30, 0x12, 0xf7, 0xe9, 0xcc, 0xf2, 0x69, 0x6c, 0x8f, 0x48,
0x90, 0xfa, 0x98, 0x72, 0xe9, 0x9a, 0x21, 0x53, 0x22, 0x9f, 0x2e, 0x6d, 0xd9, 0x59, 0x17, 0x21,
0xae, 0xaa, 0xf7, 0x6e, 0x87, 0xd4, 0xde, 0x3c, 0xe5, 0x8f, 0x6a, 0x99, 0x39, 0xdf, 0xf5, 0x83,
0xd1, 0xcd, 0xcd, 0x0f, 0x1d, 0x46, 0x2a, 0x7f, 0xe2, 0xfc, 0x5a, 0x17, 0x77, 0x13, 0xe7, 0xb7,
0xde, 0xd9, 0x14, 0x77, 0x57, 0xe3, 0xa1, 0xb4, 0x97, 0xd7, 0xee, 0x8f, 0xde, 0x52, 0x1f, 0x2e,
0x2f, 0x27, 0xce, 0xac, 0x51, 0xa6, 0x7c, 0xf8, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x0a, 0x6e, 0x4a,
0x99, 0xb6, 0x04, 0x00, 0x00,
}
......@@ -23,25 +23,26 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
func init() { proto.RegisterFile("crypter/v1/service.proto", fileDescriptor_05ac8b6606ffe814) }
var fileDescriptor_05ac8b6606ffe814 = []byte{
// 317 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x91, 0x4f, 0x4a, 0xc3, 0x40,
0x14, 0xc6, 0x6d, 0x04, 0xc1, 0x69, 0xe9, 0x62, 0x16, 0x22, 0xc5, 0x7f, 0xed, 0x01, 0x66, 0x18,
// 331 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x4f, 0x4a, 0xc3, 0x40,
0x14, 0x87, 0x6d, 0x0a, 0x82, 0xd3, 0xd2, 0xc5, 0x2c, 0x44, 0x8a, 0xff, 0xda, 0x03, 0x64, 0x18,
0xdd, 0xd5, 0x5d, 0xba, 0x10, 0x04, 0x21, 0x34, 0x25, 0x54, 0x29, 0x48, 0x3a, 0x7d, 0xa6, 0x01,
0xdb, 0xa9, 0x33, 0x93, 0xa1, 0xbd, 0x8e, 0x4b, 0xcf, 0xe0, 0x09, 0x3c, 0x84, 0x0b, 0x97, 0x9e,
0x42, 0x9a, 0x99, 0xa4, 0x81, 0x12, 0x77, 0x79, 0xef, 0xfb, 0xcd, 0xef, 0x41, 0x3e, 0x74, 0xca,
0xe5, 0x66, 0xa5, 0x41, 0x52, 0xc3, 0xa8, 0x02, 0x69, 0x52, 0x0e, 0x64, 0x25, 0x85, 0x16, 0x18,
0xb9, 0x84, 0x18, 0xd6, 0xe9, 0x56, 0x28, 0x09, 0x6f, 0x19, 0x28, 0xfd, 0x2c, 0x41, 0xad, 0xc4,
0x52, 0x39, 0xfc, 0xfa, 0xdb, 0x43, 0xed, 0x81, 0xa5, 0x42, 0xeb, 0xc1, 0xf7, 0xe8, 0xd8, 0x8f,
0x35, 0x9f, 0x87, 0x69, 0xb2, 0xc4, 0x67, 0x64, 0xe7, 0x23, 0xe5, 0x7a, 0x68, 0x65, 0x9d, 0xf3,
0x9a, 0xd4, 0x9e, 0xe8, 0x1d, 0xe0, 0x00, 0x35, 0xf3, 0x75, 0x04, 0x32, 0x7d, 0xd9, 0xe0, 0x8b,
0x3d, 0xde, 0x06, 0x85, 0xef, 0xb2, 0x36, 0x2f, 0x8d, 0x21, 0x6a, 0xe5, 0xc1, 0x10, 0xb8, 0x30,
0x20, 0xf1, 0xfe, 0x13, 0x97, 0x14, 0xce, 0xab, 0x7a, 0xa0, 0x94, 0x3e, 0xa2, 0x76, 0x35, 0x19,
0xad, 0x71, 0xb7, 0xee, 0xd5, 0x68, 0x5d, 0x88, 0x7b, 0xff, 0x21, 0x85, 0xda, 0xff, 0x6c, 0xa0,
0x36, 0x17, 0x8b, 0x0a, 0xeb, 0xb7, 0xdc, 0x9f, 0x0e, 0xb6, 0x0d, 0x04, 0x8d, 0xa7, 0x30, 0x49,
0xf5, 0x3c, 0x9b, 0x12, 0x2e, 0x16, 0x74, 0x10, 0xcf, 0x32, 0x0e, 0x99, 0x7a, 0x00, 0x1d, 0x1b,
0x90, 0xca, 0x42, 0x5c, 0xbc, 0xd2, 0xed, 0xa6, 0x1c, 0x12, 0x58, 0xd2, 0xbc, 0x40, 0x9a, 0x08,
0xba, 0x6b, 0xf9, 0xd6, 0x7d, 0x1a, 0xf6, 0xee, 0x1d, 0x0e, 0xc6, 0xe3, 0x0f, 0x0f, 0xb9, 0x72,
0x49, 0xc4, 0xbe, 0xca, 0x61, 0x12, 0xb1, 0x1f, 0xef, 0x64, 0x37, 0x4c, 0xee, 0x02, 0x7f, 0xab,
0x9f, 0xc5, 0x3a, 0xfe, 0xf5, 0x9a, 0x2e, 0xe8, 0xf7, 0x23, 0x36, 0x3d, 0xca, 0xaf, 0xdc, 0xfc,
0x05, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x94, 0xc4, 0x24, 0x71, 0x02, 0x00, 0x00,
0xdb, 0xa9, 0x33, 0x93, 0xa1, 0xbd, 0x8e, 0x4b, 0x57, 0x1e, 0xc0, 0x13, 0x78, 0x0c, 0x97, 0x9e,
0x42, 0x92, 0x99, 0x24, 0x85, 0x1a, 0x77, 0x79, 0xef, 0xfb, 0xe5, 0x7b, 0x0f, 0xe6, 0xa1, 0x13,
0x26, 0xb6, 0x6b, 0x05, 0x82, 0x68, 0x4a, 0x24, 0x08, 0x9d, 0x30, 0x70, 0xd7, 0x82, 0x2b, 0x8e,
0x91, 0x25, 0xae, 0xa6, 0xdd, 0xde, 0x4e, 0x4a, 0xc0, 0x6b, 0x0a, 0x52, 0x3d, 0x09, 0x90, 0x6b,
0xbe, 0x92, 0x36, 0x7e, 0xf5, 0xd1, 0x44, 0x9d, 0xa1, 0x49, 0x05, 0xc6, 0x83, 0xef, 0xd0, 0x91,
0x17, 0x29, 0xb6, 0x08, 0x92, 0x78, 0x85, 0x4f, 0xdd, 0xca, 0xe7, 0x96, 0xed, 0x91, 0x91, 0x75,
0xcf, 0x6a, 0xa8, 0x19, 0xd1, 0x3f, 0xc0, 0x3e, 0x6a, 0xe5, 0xed, 0x10, 0x44, 0xf2, 0xbc, 0xc5,
0xe7, 0x7b, 0x79, 0x03, 0x0a, 0xdf, 0x45, 0x2d, 0x2f, 0x8d, 0x01, 0x6a, 0xe7, 0x60, 0x04, 0x8c,
0x6b, 0x10, 0x78, 0xff, 0x17, 0x4b, 0x0a, 0xe7, 0x65, 0x7d, 0x60, 0x6f, 0xcd, 0x6c, 0xfb, 0xf1,
0xe6, 0x8f, 0x35, 0x0d, 0xa8, 0x5f, 0xb3, 0xe0, 0xa5, 0xf1, 0x01, 0x75, 0x76, 0x67, 0x8d, 0x37,
0xb8, 0x57, 0xb7, 0x47, 0xe5, 0xed, 0xff, 0x17, 0x29, 0xd4, 0xde, 0x67, 0x03, 0x75, 0x18, 0x5f,
0xee, 0x64, 0xbd, 0xb6, 0x7d, 0x3b, 0x3f, 0x7b, 0x53, 0xbf, 0xf1, 0x18, 0xc4, 0x89, 0x5a, 0xa4,
0x33, 0x97, 0xf1, 0x25, 0x19, 0x46, 0xf3, 0x94, 0x41, 0x2a, 0xef, 0x41, 0x45, 0x1a, 0x84, 0x34,
0x21, 0xc6, 0x5f, 0x48, 0xd6, 0x29, 0x8b, 0x18, 0x56, 0x24, 0x3f, 0x09, 0x12, 0x73, 0x52, 0xdd,
0xcd, 0x8d, 0xfd, 0xd4, 0xf4, 0xcd, 0x69, 0x0e, 0x27, 0x93, 0x77, 0x07, 0xd9, 0x73, 0x71, 0x43,
0xfa, 0x55, 0x16, 0xd3, 0x90, 0x7e, 0x3b, 0xc7, 0x55, 0x31, 0xbd, 0xf5, 0xbd, 0x4c, 0x3f, 0x8f,
0x54, 0xf4, 0xe3, 0xb4, 0x2c, 0x18, 0x0c, 0x42, 0x3a, 0x3b, 0xcc, 0xa7, 0x5c, 0xff, 0x06, 0x00,
0x00, 0xff, 0xff, 0x0a, 0xf6, 0xf3, 0x8c, 0xc3, 0x02, 0x00, 0x00,
}
......@@ -25,6 +25,7 @@ type CrypterServiceClient interface {
BatchSign(ctx context.Context, in *BatchSignRequest, opts ...grpc.CallOption) (*BatchSignResponse, error)
BatchVerify(ctx context.Context, in *BatchVerifyRequest, opts ...grpc.CallOption) (*BatchVerifyResponse, error)
BatchRecover(ctx context.Context, in *BatchRecoverRequest, opts ...grpc.CallOption) (*BatchRecoverResponse, error)
BatchSignTx(ctx context.Context, in *BatchSignTxRequest, opts ...grpc.CallOption) (*BatchSignTxResponse, error)
BatchRecoverTx(ctx context.Context, in *BatchRecoverTxRequest, opts ...grpc.CallOption) (*BatchRecoverTxResponse, error)
}
......@@ -63,6 +64,15 @@ func (c *crypterServiceClient) BatchRecover(ctx context.Context, in *BatchRecove
return out, nil
}
func (c *crypterServiceClient) BatchSignTx(ctx context.Context, in *BatchSignTxRequest, opts ...grpc.CallOption) (*BatchSignTxResponse, error) {
out := new(BatchSignTxResponse)
err := c.cc.Invoke(ctx, "/crypter.v1.CrypterService/BatchSignTx", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *crypterServiceClient) BatchRecoverTx(ctx context.Context, in *BatchRecoverTxRequest, opts ...grpc.CallOption) (*BatchRecoverTxResponse, error) {
out := new(BatchRecoverTxResponse)
err := c.cc.Invoke(ctx, "/crypter.v1.CrypterService/BatchRecoverTx", in, out, opts...)
......@@ -79,6 +89,7 @@ type CrypterServiceServer interface {
BatchSign(context.Context, *BatchSignRequest) (*BatchSignResponse, error)
BatchVerify(context.Context, *BatchVerifyRequest) (*BatchVerifyResponse, error)
BatchRecover(context.Context, *BatchRecoverRequest) (*BatchRecoverResponse, error)
BatchSignTx(context.Context, *BatchSignTxRequest) (*BatchSignTxResponse, error)
BatchRecoverTx(context.Context, *BatchRecoverTxRequest) (*BatchRecoverTxResponse, error)
mustEmbedUnimplementedCrypterServiceServer()
}
......@@ -96,6 +107,9 @@ func (UnimplementedCrypterServiceServer) BatchVerify(context.Context, *BatchVeri
func (UnimplementedCrypterServiceServer) BatchRecover(context.Context, *BatchRecoverRequest) (*BatchRecoverResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BatchRecover not implemented")
}
func (UnimplementedCrypterServiceServer) BatchSignTx(context.Context, *BatchSignTxRequest) (*BatchSignTxResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BatchSignTx not implemented")
}
func (UnimplementedCrypterServiceServer) BatchRecoverTx(context.Context, *BatchRecoverTxRequest) (*BatchRecoverTxResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method BatchRecoverTx not implemented")
}
......@@ -166,6 +180,24 @@ func _CrypterService_BatchRecover_Handler(srv interface{}, ctx context.Context,
return interceptor(ctx, in, info, handler)
}
func _CrypterService_BatchSignTx_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(BatchSignTxRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(CrypterServiceServer).BatchSignTx(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/crypter.v1.CrypterService/BatchSignTx",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(CrypterServiceServer).BatchSignTx(ctx, req.(*BatchSignTxRequest))
}
return interceptor(ctx, in, info, handler)
}
func _CrypterService_BatchRecoverTx_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(BatchRecoverTxRequest)
if err := dec(in); err != nil {
......@@ -203,6 +235,10 @@ var CrypterService_ServiceDesc = grpc.ServiceDesc{
MethodName: "BatchRecover",
Handler: _CrypterService_BatchRecover_Handler,
},
{
MethodName: "BatchSignTx",
Handler: _CrypterService_BatchSignTx_Handler,
},
{
MethodName: "BatchRecoverTx",
Handler: _CrypterService_BatchRecoverTx_Handler,
......
......@@ -1035,12 +1035,12 @@ func (m *NonceResponse) GetNonce() uint64 {
type RepeatedNonceRequest struct {
// request address
Address []github_com_CaduceusMetaverseProtocol_MetaTypes_types.Address `protobuf:"bytes,1,rep,name=address,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address" json:"address,omitempty"`
Address [][]byte `protobuf:"bytes,1,rep,name=address,proto3" json:"address,omitempty"`
// request block number
BlockId []github_com_CaduceusMetaverseProtocol_MetaTypes_types.BigInt `protobuf:"bytes,2,rep,name=block_id,json=blockId,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt" json:"block_id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
BlockId [][]byte `protobuf:"bytes,2,rep,name=block_id,json=blockId,proto3" json:"block_id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RepeatedNonceRequest) Reset() { *m = RepeatedNonceRequest{} }
......@@ -1067,11 +1067,25 @@ func (m *RepeatedNonceRequest) XXX_DiscardUnknown() {
var xxx_messageInfo_RepeatedNonceRequest proto.InternalMessageInfo
func (m *RepeatedNonceRequest) GetAddress() [][]byte {
if m != nil {
return m.Address
}
return nil
}
func (m *RepeatedNonceRequest) GetBlockId() [][]byte {
if m != nil {
return m.BlockId
}
return nil
}
type RepeatedNonceResponse struct {
// request address
Address []github_com_CaduceusMetaverseProtocol_MetaTypes_types.Address `protobuf:"bytes,1,rep,name=address,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address" json:"address,omitempty"`
// request block number
BlockId []github_com_CaduceusMetaverseProtocol_MetaTypes_types.BigInt `protobuf:"bytes,2,rep,name=block_id,json=blockId,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt" json:"block_id,omitempty"`
// the address
Address [][]byte `protobuf:"bytes,1,rep,name=address,proto3" json:"address,omitempty"`
// block height
BlockId [][]byte `protobuf:"bytes,2,rep,name=block_id,json=blockId,proto3" json:"block_id,omitempty"`
// nonce
Nonce []uint64 `protobuf:"varint,3,rep,packed,name=nonce,proto3" json:"nonce,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
......@@ -1103,6 +1117,20 @@ func (m *RepeatedNonceResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_RepeatedNonceResponse proto.InternalMessageInfo
func (m *RepeatedNonceResponse) GetAddress() [][]byte {
if m != nil {
return m.Address
}
return nil
}
func (m *RepeatedNonceResponse) GetBlockId() [][]byte {
if m != nil {
return m.BlockId
}
return nil
}
func (m *RepeatedNonceResponse) GetNonce() []uint64 {
if m != nil {
return m.Nonce
......@@ -3566,119 +3594,118 @@ func init() {
func init() { proto.RegisterFile("nebula/v1/account_req_res.proto", fileDescriptor_19f8068ca46d164c) }
var fileDescriptor_19f8068ca46d164c = []byte{
// 1809 bytes of a gzipped FileDescriptorProto
// 1807 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xdd, 0x6f, 0x1b, 0x59,
0x15, 0xd7, 0xd8, 0x69, 0x3e, 0x4e, 0x9c, 0x8f, 0x4e, 0x12, 0xdb, 0x9b, 0x05, 0xa5, 0xbd, 0x0b,
0x25, 0x62, 0x4b, 0x5c, 0x37, 0xea, 0x4a, 0xec, 0x2e, 0x2a, 0x75, 0xd8, 0xed, 0x56, 0xca, 0x9a,
0xec, 0x24, 0x5b, 0xad, 0x60, 0x91, 0xb9, 0xf6, 0xdc, 0x8c, 0x87, 0x8e, 0xe7, 0xba, 0x73, 0xaf,
0x53, 0x97, 0xa7, 0x16, 0x10, 0x5a, 0x89, 0x07, 0xb4, 0xe2, 0x19, 0x21, 0x21, 0x84, 0xd0, 0x8a,
0x47, 0x24, 0x1e, 0xf8, 0x0b, 0xe0, 0x1d, 0x09, 0xf5, 0xa1, 0x0f, 0xbc, 0x51, 0x9e, 0x90, 0xf8,
0x03, 0xd0, 0xfd, 0x9a, 0x19, 0x7f, 0xe4, 0x83, 0x48, 0xb6, 0xab, 0xe6, 0x25, 0x9a, 0x7b, 0x7c,
0xce, 0xef, 0xfc, 0xce, 0x47, 0xee, 0x3d, 0xd7, 0x1e, 0xd8, 0x08, 0x49, 0xbd, 0x13, 0xe0, 0xd2,
0x51, 0xb9, 0x84, 0x1b, 0x0d, 0xda, 0x09, 0x79, 0x2d, 0x22, 0x0f, 0x6b, 0x11, 0x61, 0x5b, 0xed,
0x88, 0x72, 0x6a, 0xcf, 0x29, 0x85, 0xad, 0xa3, 0xf2, 0xfa, 0x15, 0x8f, 0x52, 0x2f, 0x20, 0x25,
0xf9, 0x41, 0xbd, 0x73, 0x58, 0x3a, 0xf4, 0x49, 0xe0, 0xd6, 0x5a, 0x98, 0x3d, 0x50, 0xca, 0xeb,
0x1b, 0xfd, 0x1a, 0xdc, 0x6f, 0x11, 0xc6, 0x71, 0xab, 0xad, 0x15, 0xf2, 0x75, 0xcc, 0x88, 0x70,
0x16, 0x11, 0x46, 0x3b, 0x51, 0x83, 0x68, 0xb9, 0x6d, 0xe4, 0x2d, 0xc2, 0xb1, 0x96, 0x2d, 0x49,
0x99, 0x47, 0x3d, 0xaa, 0x05, 0xc5, 0x84, 0x6b, 0xaf, 0x39, 0x5a, 0x05, 0xbb, 0x4a, 0x5d, 0x72,
0x9f, 0x44, 0xcc, 0xa7, 0xa1, 0x43, 0x1e, 0x76, 0x08, 0xe3, 0xa8, 0x04, 0x2b, 0x3d, 0x52, 0xd6,
0xa6, 0x21, 0x23, 0x76, 0x11, 0x66, 0x8e, 0x94, 0xa8, 0x68, 0x5d, 0xb1, 0x36, 0xe7, 0x1c, 0xb3,
0x44, 0x57, 0x61, 0x7e, 0xbf, 0x89, 0xb7, 0xb5, 0xbd, 0x6d, 0xc3, 0x94, 0x8b, 0x39, 0x96, 0x5a,
0x39, 0x47, 0x3e, 0xa3, 0x36, 0xe4, 0x94, 0x8a, 0x06, 0xfb, 0x21, 0x4c, 0x35, 0x31, 0x6b, 0x4a,
0x9d, 0xf9, 0x9b, 0x0b, 0x5b, 0x82, 0xf3, 0xd6, 0x51, 0x79, 0xeb, 0x03, 0xcc, 0x9a, 0x95, 0x6f,
0x3d, 0x7b, 0xbe, 0xf1, 0x4d, 0xcf, 0xe7, 0xcd, 0x4e, 0x7d, 0xab, 0x41, 0x5b, 0xa5, 0x1d, 0xec,
0x76, 0x1a, 0xa4, 0xc3, 0x3e, 0x24, 0x1c, 0x0b, 0x9f, 0x64, 0x4f, 0xb0, 0x6f, 0xd0, 0xa0, 0x24,
0x24, 0x07, 0x8f, 0xdb, 0x84, 0x95, 0xb8, 0xf8, 0x2b, 0xcd, 0x1d, 0x89, 0x8c, 0x56, 0xe0, 0x72,
0x95, 0xf0, 0xbe, 0xd0, 0xb6, 0xc0, 0x4e, 0x0b, 0x4f, 0x8d, 0x6c, 0x0d, 0x56, 0xaa, 0x84, 0xef,
0x11, 0x12, 0xed, 0x88, 0x1a, 0x1b, 0x98, 0x5b, 0xb0, 0xda, 0x2b, 0xd6, 0x40, 0x5f, 0x06, 0x68,
0x13, 0x12, 0xd5, 0x64, 0x43, 0x48, 0xac, 0x05, 0x67, 0xae, 0x6d, 0xd4, 0x50, 0x11, 0xf2, 0x86,
0x79, 0x1f, 0xaf, 0x6d, 0x28, 0x0c, 0x7c, 0x72, 0x2a, 0xb9, 0x65, 0x58, 0xdc, 0x7f, 0x1c, 0x36,
0xfc, 0xd0, 0x33, 0x30, 0x7f, 0xcd, 0xc0, 0x52, 0x2c, 0xd2, 0xf6, 0x87, 0x70, 0x89, 0x71, 0x1c,
0x71, 0x9d, 0xea, 0xa5, 0x38, 0xd5, 0x15, 0xdf, 0xbb, 0x17, 0xf2, 0xca, 0xed, 0x67, 0xcf, 0x37,
0xde, 0x39, 0x57, 0xb2, 0x15, 0x80, 0xa3, 0xe0, 0xed, 0x3a, 0x64, 0x49, 0xe8, 0x16, 0x33, 0x23,
0xf2, 0x22, 0xc0, 0xed, 0x1f, 0xc1, 0x4c, 0xa3, 0x13, 0x45, 0x24, 0xe4, 0xc5, 0xec, 0x88, 0xfc,
0x18, 0x07, 0xe8, 0x32, 0x2c, 0xed, 0x50, 0x3f, 0x14, 0xf8, 0x26, 0xbd, 0x4f, 0x2c, 0x58, 0x4e,
0x64, 0x3a, 0xbf, 0x01, 0xcc, 0x60, 0xd7, 0x8d, 0x08, 0x63, 0x3a, 0xc3, 0xcb, 0x31, 0xa7, 0x3b,
0x4a, 0x5e, 0xf9, 0xf6, 0xb3, 0xe7, 0x1b, 0xef, 0x9e, 0x8b, 0x94, 0x46, 0x70, 0x8c, 0x0b, 0xb4,
0x04, 0x0b, 0x1f, 0xfa, 0x61, 0xaa, 0xe4, 0x9b, 0xb0, 0x68, 0x04, 0x9a, 0x50, 0x1e, 0xa6, 0x19,
0xc7, 0xbc, 0xc3, 0x74, 0xbf, 0xe8, 0x95, 0x08, 0x48, 0xfe, 0x7b, 0x60, 0x1e, 0x07, 0xf4, 0x75,
0x58, 0x4e, 0x44, 0x89, 0x79, 0x44, 0x58, 0x27, 0xe0, 0xc6, 0x5c, 0xad, 0x84, 0xf9, 0x5d, 0xcc,
0xf6, 0x22, 0xbf, 0x11, 0x9b, 0x3f, 0xb5, 0x60, 0x39, 0x91, 0x69, 0xfb, 0x16, 0xcc, 0x79, 0x98,
0xd5, 0xda, 0x42, 0x38, 0xb2, 0x9e, 0x9b, 0xf5, 0xb4, 0x5b, 0x41, 0xeb, 0x8e, 0xda, 0x80, 0x59,
0xba, 0x4c, 0x89, 0x6c, 0x58, 0x99, 0xb2, 0x63, 0x28, 0xd3, 0x07, 0xc4, 0xf7, 0x9a, 0xf1, 0x8e,
0xf1, 0x63, 0x58, 0x34, 0x02, 0x4d, 0xa8, 0x09, 0xd3, 0x4d, 0x29, 0x19, 0x59, 0x92, 0x34, 0x3e,
0xfa, 0xb7, 0x05, 0x8b, 0x15, 0x1c, 0xe0, 0x30, 0xae, 0xdc, 0x78, 0x9b, 0xd6, 0x7e, 0x00, 0xb3,
0xf5, 0x80, 0x36, 0x1e, 0xd4, 0xfc, 0xd1, 0xed, 0x0f, 0x33, 0xd2, 0xc3, 0x3d, 0x17, 0xfd, 0x23,
0x03, 0x4b, 0x71, 0xb4, 0x93, 0xf8, 0x1f, 0x1d, 0x6b, 0xb8, 0x62, 0x4b, 0xac, 0xab, 0x68, 0x47,
0xb7, 0x25, 0x6a, 0x07, 0xe8, 0xef, 0x19, 0x58, 0xdc, 0xe7, 0x34, 0xc2, 0xde, 0x05, 0x68, 0x24,
0xbb, 0x09, 0xb3, 0x6d, 0xca, 0x7c, 0x2e, 0x4e, 0xde, 0xec, 0x08, 0xc6, 0x94, 0x18, 0x1d, 0xbd,
0x10, 0xc7, 0xb6, 0xc9, 0xeb, 0xab, 0xdf, 0xb2, 0x63, 0x4b, 0x6c, 0x3c, 0x89, 0x4e, 0xa5, 0x26,
0xd1, 0x7f, 0x59, 0x90, 0xab, 0xd2, 0x8b, 0xb1, 0x17, 0x3e, 0xc9, 0xc0, 0x82, 0x8e, 0xf5, 0xd5,
0x6f, 0xab, 0x55, 0xb8, 0x14, 0x52, 0xb3, 0x0f, 0x4e, 0x39, 0x6a, 0x81, 0xfe, 0x63, 0xc1, 0xaa,
0x43, 0xda, 0x04, 0x73, 0xe2, 0x1e, 0x5f, 0xf6, 0xec, 0x78, 0x33, 0x91, 0x1d, 0x6d, 0xd9, 0x3f,
0xcb, 0xc0, 0x5a, 0x5f, 0xcc, 0x93, 0x98, 0x82, 0xc6, 0x1a, 0x74, 0xba, 0xfc, 0xd9, 0xa4, 0xfc,
0xff, 0xb5, 0xa0, 0x70, 0x10, 0xe1, 0x90, 0xe1, 0x86, 0xd8, 0x11, 0xd2, 0xb7, 0xb8, 0x57, 0xf9,
0x1f, 0xff, 0x17, 0x19, 0x28, 0x0e, 0x86, 0x7d, 0x21, 0xf6, 0x00, 0x75, 0xf7, 0xd6, 0x7b, 0x80,
0x5c, 0xa0, 0xcf, 0x2d, 0x40, 0x15, 0xa1, 0xd1, 0x9f, 0x92, 0xca, 0x63, 0x79, 0x60, 0xe8, 0x7e,
0x78, 0x00, 0xa0, 0x98, 0x8e, 0xec, 0x9b, 0x89, 0x39, 0x89, 0x2f, 0x1e, 0xd1, 0x1f, 0x2c, 0x78,
0xe3, 0x44, 0x4e, 0xba, 0x58, 0xe3, 0x24, 0x95, 0xa4, 0x2f, 0x23, 0xbf, 0xba, 0xd0, 0xe9, 0xfb,
0x95, 0x05, 0x5f, 0x39, 0x86, 0x6a, 0xb5, 0xd3, 0xaa, 0x93, 0x28, 0x49, 0x60, 0x52, 0x6a, 0x6b,
0xd4, 0x2d, 0xfe, 0x85, 0x05, 0x5f, 0x3d, 0x85, 0x55, 0x9c, 0xc2, 0xf1, 0xd1, 0x3a, 0x26, 0x85,
0x3f, 0xb7, 0xa0, 0xf0, 0x71, 0xd8, 0x08, 0xc8, 0xa4, 0xdb, 0xee, 0xd7, 0x16, 0x14, 0x07, 0x89,
0xbc, 0x3c, 0xbd, 0xf6, 0x99, 0x05, 0xaf, 0xa5, 0xf9, 0x4d, 0xb0, 0xc1, 0x7e, 0x63, 0xc1, 0xfa,
0x30, 0x2a, 0x2f, 0x4f, 0x57, 0x89, 0x8b, 0xfd, 0x5d, 0xc2, 0x77, 0xa8, 0x7b, 0x41, 0x86, 0xd9,
0xa5, 0x38, 0xda, 0x57, 0xff, 0x28, 0xb3, 0x61, 0xaa, 0x41, 0x5d, 0x35, 0xcd, 0xe6, 0x1c, 0xf9,
0x8c, 0x7e, 0x69, 0xc1, 0xfc, 0xbe, 0xef, 0x85, 0x93, 0xa9, 0xb6, 0xb9, 0x4d, 0x65, 0x52, 0xb7,
0xa9, 0xeb, 0x90, 0x53, 0x84, 0x74, 0x41, 0xbe, 0x04, 0x73, 0xcc, 0xf7, 0x42, 0xcc, 0x3b, 0x11,
0xd1, 0x3f, 0x00, 0x24, 0x02, 0xf4, 0x67, 0x0b, 0xf2, 0x42, 0x3d, 0xb5, 0x65, 0x4f, 0x26, 0x94,
0x02, 0xcc, 0xf0, 0x6e, 0x2d, 0x15, 0xcd, 0x34, 0xef, 0x7e, 0x07, 0x73, 0x6c, 0xe7, 0x61, 0xba,
0x45, 0x78, 0x93, 0xba, 0x3a, 0xef, 0x7a, 0x85, 0xde, 0x82, 0xc2, 0x00, 0x71, 0x1d, 0xf2, 0xeb,
0x2a, 0x64, 0xe2, 0xd6, 0x78, 0x57, 0x87, 0x3c, 0xab, 0x04, 0x07, 0x5d, 0xf4, 0x27, 0x11, 0x31,
0x09, 0xdd, 0x89, 0x47, 0x7c, 0xbd, 0x37, 0xe2, 0xf9, 0x9b, 0x2b, 0xb1, 0x37, 0x69, 0xdb, 0xad,
0x60, 0x46, 0x4c, 0x1a, 0xd0, 0x13, 0x0b, 0x0a, 0x03, 0xb4, 0x75, 0xbc, 0x44, 0x22, 0x8d, 0xec,
0x88, 0x98, 0xe6, 0x5d, 0x79, 0x52, 0x55, 0xe1, 0x35, 0xc1, 0xc0, 0xc1, 0x8f, 0x86, 0xe4, 0xae,
0xdc, 0x9f, 0xf3, 0xf9, 0x9b, 0xab, 0x3d, 0xf1, 0xec, 0x45, 0x94, 0x1e, 0x1e, 0x74, 0x53, 0x95,
0xf8, 0xa9, 0x05, 0xeb, 0xc3, 0x00, 0xc7, 0x1b, 0xd5, 0x6d, 0x98, 0xdf, 0xc1, 0x41, 0x60, 0xe2,
0xb8, 0x31, 0x18, 0xc7, 0xd0, 0xba, 0x24, 0x61, 0x5c, 0x83, 0x9c, 0x02, 0x18, 0xfa, 0x75, 0x7d,
0x2e, 0xfe, 0xba, 0xfe, 0x7d, 0xb0, 0xdf, 0x63, 0xdc, 0x6f, 0x61, 0x4e, 0xee, 0x62, 0x76, 0x7e,
0x7f, 0x9f, 0x5b, 0xb0, 0xd2, 0x03, 0x74, 0xb2, 0x5f, 0xbb, 0x0e, 0x59, 0x0f, 0xb3, 0xd1, 0xfd,
0x0c, 0xe4, 0x61, 0x86, 0x9e, 0x5a, 0x60, 0xcb, 0xd1, 0x6f, 0x82, 0x83, 0xd4, 0x6d, 0x58, 0xe9,
0xa1, 0xa0, 0xd3, 0xb2, 0x09, 0x97, 0xa4, 0x8e, 0x76, 0x6f, 0xf7, 0x24, 0x57, 0x1a, 0x38, 0x4a,
0x41, 0xf4, 0xe3, 0xaa, 0x46, 0x98, 0xe0, 0x90, 0x73, 0x07, 0xd6, 0xfa, 0x48, 0xfc, 0xdf, 0x81,
0x3c, 0xb5, 0x7a, 0xee, 0x9a, 0xbd, 0x35, 0x19, 0xdf, 0x66, 0x31, 0x84, 0x82, 0x0e, 0xa5, 0x9c,
0x6c, 0x7d, 0x8a, 0x43, 0xb1, 0xb7, 0xe5, 0x53, 0xbb, 0x81, 0xd9, 0xff, 0xc4, 0xe5, 0xa2, 0x07,
0xb0, 0x62, 0x0a, 0x7f, 0x27, 0x74, 0xef, 0x85, 0x2e, 0xe9, 0x4e, 0xa2, 0xe9, 0xc4, 0x18, 0xe8,
0x0b, 0xe7, 0x66, 0x0c, 0x94, 0x0b, 0xf4, 0x7d, 0xb8, 0x76, 0x1a, 0xd7, 0xf3, 0x67, 0xe2, 0x8f,
0x16, 0x7c, 0x6d, 0x10, 0x5d, 0x35, 0xcb, 0x60, 0x2e, 0xc6, 0x3b, 0x12, 0x0f, 0xc9, 0xc5, 0x0f,
0x60, 0xf3, 0x74, 0xb6, 0xe7, 0xcf, 0xc6, 0x4f, 0xac, 0x9e, 0x46, 0x73, 0x48, 0x83, 0xf8, 0x6d,
0x3e, 0xe6, 0x66, 0xff, 0x08, 0xd6, 0x87, 0x71, 0xd0, 0x51, 0x6d, 0x03, 0xf0, 0x6e, 0x2d, 0x52,
0xd2, 0xa1, 0x67, 0xa3, 0xb1, 0x98, 0xe3, 0x5d, 0xfd, 0x88, 0x7e, 0x67, 0xc1, 0x86, 0xbc, 0xeb,
0xbc, 0xdc, 0x9d, 0xbe, 0x03, 0x57, 0x8e, 0x67, 0xa9, 0xe3, 0xdf, 0x80, 0xf9, 0x8e, 0xd0, 0xa9,
0x25, 0xdb, 0x57, 0xce, 0x01, 0x29, 0x92, 0x46, 0xe8, 0xf7, 0x16, 0x5c, 0x4d, 0xa3, 0xbc, 0xb4,
0xbd, 0xfc, 0x1e, 0xa0, 0x93, 0x78, 0x9e, 0x35, 0x5e, 0x1b, 0x96, 0x77, 0x68, 0xab, 0xed, 0x07,
0x24, 0x8a, 0x7f, 0x22, 0x2f, 0xc3, 0xe5, 0x94, 0x2c, 0x99, 0xdd, 0x1b, 0x46, 0x68, 0x66, 0xf7,
0x58, 0x80, 0x6e, 0x40, 0x5e, 0x9b, 0xec, 0xd3, 0xc0, 0x77, 0x7d, 0xfe, 0xd8, 0xa4, 0x2a, 0x0f,
0xd3, 0xea, 0xad, 0x22, 0x33, 0x0a, 0xa8, 0x15, 0xfa, 0x06, 0x14, 0x06, 0x2c, 0xb4, 0x2b, 0x73,
0xb9, 0xb1, 0x52, 0x97, 0x9b, 0x37, 0x63, 0x4e, 0xbb, 0xbb, 0xbb, 0xa7, 0x61, 0x6f, 0x82, 0x9d,
0x56, 0x3e, 0x01, 0xb6, 0x04, 0x6b, 0x86, 0x05, 0x89, 0xda, 0x24, 0xf9, 0xfa, 0xf7, 0x38, 0xe8,
0xeb, 0x49, 0xa0, 0xc6, 0xe0, 0x04, 0xf8, 0x4d, 0x58, 0xae, 0x92, 0x47, 0xef, 0xfb, 0x01, 0x4f,
0x4e, 0xf0, 0x55, 0xb8, 0xd4, 0xc6, 0x11, 0x6e, 0x69, 0x45, 0xb5, 0x40, 0x37, 0xe0, 0x72, 0x4a,
0x33, 0xb9, 0x3c, 0x1c, 0x4a, 0x89, 0xe9, 0xb3, 0x9c, 0x33, 0xab, 0x04, 0xf7, 0x5c, 0x54, 0x80,
0xb5, 0x2a, 0x79, 0x24, 0xab, 0xd8, 0xe3, 0x00, 0xdd, 0x82, 0x7c, 0xff, 0x07, 0x67, 0xc1, 0xbb,
0x0a, 0x1b, 0x7b, 0x24, 0x74, 0xfd, 0xd0, 0x4b, 0xed, 0x1f, 0xbd, 0xc8, 0xb7, 0xe1, 0xca, 0xf1,
0x2a, 0x67, 0xf1, 0x71, 0x0b, 0xf2, 0x1f, 0x87, 0x7e, 0xc8, 0x38, 0x0e, 0x82, 0xde, 0xac, 0x9c,
0x68, 0x56, 0x86, 0xc2, 0x80, 0xd9, 0xd0, 0x49, 0x73, 0x36, 0x9e, 0x70, 0xb7, 0x61, 0x55, 0x69,
0xee, 0x34, 0x71, 0xe8, 0x11, 0x76, 0x26, 0x3f, 0x6f, 0xc2, 0x5a, 0x9f, 0x51, 0x52, 0x5b, 0x3f,
0x3c, 0xa4, 0xa6, 0xb6, 0xe2, 0x59, 0x54, 0x4c, 0x29, 0xef, 0x52, 0xef, 0x6c, 0xf0, 0xef, 0x82,
0x9d, 0xb6, 0xd0, 0xd8, 0xd7, 0x60, 0x2a, 0xa0, 0x9e, 0xf9, 0xc9, 0xc5, 0xee, 0x1b, 0xb8, 0x77,
0xa9, 0xe7, 0xc8, 0xcf, 0xd1, 0x1b, 0x30, 0x9f, 0xf6, 0x34, 0xbc, 0x8d, 0xde, 0x82, 0xdc, 0xb9,
0xc0, 0xbf, 0x0b, 0xeb, 0x07, 0x84, 0xf1, 0x63, 0x2e, 0xa3, 0xe7, 0x38, 0x0b, 0x7f, 0x66, 0xc1,
0xeb, 0x43, 0x11, 0xc7, 0x7a, 0xa3, 0xaa, 0xfc, 0xc5, 0x82, 0x85, 0x06, 0x6d, 0x6d, 0xc5, 0xef,
0x5b, 0x56, 0x6c, 0xfd, 0xf2, 0x8f, 0x43, 0x1e, 0x3a, 0x84, 0x49, 0x94, 0x3d, 0xeb, 0x7b, 0x1f,
0x9d, 0xd9, 0x55, 0xbc, 0xf0, 0x48, 0xa8, 0x5e, 0xc9, 0x2c, 0x79, 0xb4, 0x14, 0xbf, 0x44, 0xf9,
0x8e, 0x7a, 0x3a, 0x2a, 0xff, 0x36, 0x93, 0xad, 0x7e, 0xf2, 0xc9, 0x17, 0x99, 0xb9, 0xaa, 0x72,
0x7d, 0xbf, 0xfc, 0x37, 0xf3, 0xfc, 0xe9, 0xfd, 0xf2, 0x3f, 0x33, 0x6b, 0xf1, 0xf3, 0xa7, 0x77,
0xf7, 0x2a, 0x02, 0x59, 0xe4, 0xf7, 0x45, 0x06, 0x94, 0xfc, 0xed, 0xb7, 0xef, 0x97, 0xeb, 0xd3,
0x12, 0x7f, 0xfb, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x47, 0xd4, 0x65, 0xf6, 0x50, 0x2a, 0x00,
0x00,
0x15, 0xd7, 0x38, 0x69, 0x3e, 0x4e, 0x9c, 0x8f, 0x4e, 0x12, 0xdb, 0xcd, 0x82, 0xd2, 0xce, 0x42,
0x89, 0xd8, 0x12, 0xd7, 0x8d, 0xba, 0x12, 0xbb, 0x8b, 0x4a, 0x6d, 0x76, 0xbb, 0x15, 0x59, 0x93,
0x9d, 0x64, 0xab, 0x15, 0x2c, 0x32, 0xd7, 0x33, 0x37, 0xe3, 0xa1, 0xe3, 0xb9, 0xee, 0xdc, 0xeb,
0xd4, 0xe5, 0xa9, 0x05, 0x84, 0x90, 0x78, 0x40, 0x2b, 0x9e, 0x11, 0x12, 0x42, 0x08, 0xad, 0x78,
0x44, 0xe2, 0x81, 0xbf, 0x00, 0xde, 0x91, 0x50, 0x1f, 0xfa, 0xc0, 0x1b, 0xcb, 0x2b, 0x7f, 0x00,
0xba, 0x5f, 0xf3, 0x61, 0x3b, 0x1f, 0x1b, 0xc9, 0x76, 0xd5, 0xbc, 0x44, 0x73, 0xcf, 0x9c, 0xf3,
0x3b, 0xbf, 0xf3, 0x91, 0x3b, 0xe7, 0x8e, 0x07, 0x36, 0x43, 0xdc, 0xec, 0x06, 0xa8, 0x7c, 0x54,
0x29, 0x23, 0xc7, 0x21, 0xdd, 0x90, 0x35, 0x22, 0xfc, 0xa8, 0x11, 0x61, 0xba, 0xdd, 0x89, 0x08,
0x23, 0xe6, 0xbc, 0x54, 0xd8, 0x3e, 0xaa, 0x6c, 0x5c, 0xf5, 0x08, 0xf1, 0x02, 0x5c, 0x16, 0x37,
0x9a, 0xdd, 0xc3, 0xf2, 0xa1, 0x8f, 0x03, 0xb7, 0xd1, 0x46, 0xf4, 0xa1, 0x54, 0xde, 0xd8, 0xec,
0xd7, 0x60, 0x7e, 0x1b, 0x53, 0x86, 0xda, 0x1d, 0xa5, 0x50, 0x68, 0x22, 0x8a, 0xb9, 0xb3, 0x08,
0x53, 0xd2, 0x8d, 0x1c, 0xac, 0xe4, 0xa6, 0x96, 0xb7, 0x31, 0x43, 0x4a, 0xb6, 0x2c, 0x64, 0x1e,
0xf1, 0x88, 0x12, 0x94, 0x12, 0xae, 0x59, 0x73, 0x6b, 0x0d, 0xcc, 0x3a, 0x71, 0xf1, 0x03, 0x1c,
0x51, 0x9f, 0x84, 0x36, 0x7e, 0xd4, 0xc5, 0x94, 0x59, 0x65, 0x58, 0xcd, 0x48, 0x69, 0x87, 0x84,
0x14, 0x9b, 0x25, 0x98, 0x3d, 0x92, 0xa2, 0x92, 0x71, 0xd5, 0xd8, 0x9a, 0xb7, 0xf5, 0xd2, 0xba,
0x06, 0x0b, 0xfb, 0x2d, 0xb4, 0xa3, 0xec, 0x4d, 0x13, 0xa6, 0x5d, 0xc4, 0x90, 0xd0, 0xca, 0xdb,
0xe2, 0xda, 0xea, 0x40, 0x5e, 0xaa, 0x28, 0xb0, 0x1f, 0xc1, 0x74, 0x0b, 0xd1, 0x96, 0xd0, 0x59,
0xb8, 0xb5, 0xb8, 0xcd, 0x39, 0x6f, 0x1f, 0x55, 0xb6, 0xdf, 0x47, 0xb4, 0x55, 0xfd, 0xd6, 0xf3,
0x17, 0x9b, 0xdf, 0xf4, 0x7c, 0xd6, 0xea, 0x36, 0xb7, 0x1d, 0xd2, 0x2e, 0xd7, 0x90, 0xdb, 0x75,
0x70, 0x97, 0x7e, 0x80, 0x19, 0xe2, 0x3e, 0xf1, 0x1e, 0x67, 0xef, 0x90, 0xa0, 0xcc, 0x25, 0x07,
0x4f, 0x3a, 0x98, 0x96, 0x19, 0xff, 0x2b, 0xcc, 0x6d, 0x81, 0x6c, 0xad, 0xc2, 0xe5, 0x3a, 0x66,
0x7d, 0xa1, 0x6d, 0x83, 0x99, 0x16, 0x9e, 0x1a, 0xd9, 0x3a, 0xac, 0xd6, 0x31, 0xdb, 0xc3, 0x38,
0xaa, 0xf1, 0x1a, 0x6b, 0x98, 0xdb, 0xb0, 0x96, 0x15, 0x2b, 0xa0, 0x2f, 0x03, 0x74, 0x30, 0x8e,
0x1a, 0xa2, 0x21, 0x04, 0xd6, 0xa2, 0x3d, 0xdf, 0xd1, 0x6a, 0x56, 0x09, 0x0a, 0x9a, 0x79, 0x1f,
0xaf, 0x1d, 0x28, 0x0e, 0xdc, 0x39, 0x95, 0xdc, 0x0a, 0x2c, 0xed, 0x3f, 0x09, 0x1d, 0x3f, 0xf4,
0x34, 0xcc, 0xdf, 0x73, 0xb0, 0x1c, 0x8b, 0x94, 0xfd, 0x21, 0x5c, 0xa2, 0x0c, 0x45, 0x4c, 0xa5,
0x7a, 0x39, 0x4e, 0x75, 0xd5, 0xf7, 0xee, 0x87, 0xac, 0x7a, 0xe7, 0xf9, 0x8b, 0xcd, 0xb7, 0xcf,
0x95, 0x6c, 0x09, 0x60, 0x4b, 0x78, 0xb3, 0x09, 0x53, 0x38, 0x74, 0x4b, 0xb9, 0x11, 0x79, 0xe1,
0xe0, 0xe6, 0x8f, 0x61, 0xd6, 0xe9, 0x46, 0x11, 0x0e, 0x59, 0x69, 0x6a, 0x44, 0x7e, 0xb4, 0x03,
0xeb, 0x32, 0x2c, 0xd7, 0x88, 0x1f, 0x72, 0x7c, 0x9d, 0xde, 0xa7, 0x06, 0xac, 0x24, 0x32, 0x95,
0xdf, 0x00, 0x66, 0x91, 0xeb, 0x46, 0x98, 0x52, 0x95, 0xe1, 0x95, 0x98, 0xd3, 0x5d, 0x29, 0xaf,
0x7e, 0xfb, 0xf9, 0x8b, 0xcd, 0x77, 0xce, 0x45, 0x4a, 0x21, 0xd8, 0xda, 0x85, 0xb5, 0x0c, 0x8b,
0x1f, 0xf8, 0x61, 0xaa, 0xe4, 0x5b, 0xb0, 0xa4, 0x05, 0x8a, 0x50, 0x01, 0x66, 0x28, 0x43, 0xac,
0x4b, 0x55, 0xbf, 0xa8, 0x15, 0x0f, 0x48, 0xfc, 0x7b, 0x20, 0x16, 0x07, 0xf4, 0x75, 0x58, 0x49,
0x44, 0x89, 0x79, 0x84, 0x69, 0x37, 0x60, 0xda, 0x5c, 0xae, 0xb8, 0xf9, 0x3d, 0x44, 0xf7, 0x22,
0xdf, 0x89, 0xcd, 0x9f, 0x19, 0xb0, 0x92, 0xc8, 0x94, 0x7d, 0x1b, 0xe6, 0x3d, 0x44, 0x1b, 0x1d,
0x2e, 0x1c, 0x59, 0xcf, 0xcd, 0x79, 0xca, 0x2d, 0xa7, 0x75, 0x57, 0x6e, 0xc0, 0x34, 0x5d, 0xa6,
0x44, 0x36, 0xac, 0x4c, 0x53, 0x63, 0x28, 0xd3, 0xfb, 0xd8, 0xf7, 0x5a, 0xf1, 0x8e, 0xf1, 0x13,
0x58, 0xd2, 0x02, 0x45, 0xa8, 0x05, 0x33, 0x2d, 0x21, 0x19, 0x59, 0x92, 0x14, 0xbe, 0xf5, 0x5f,
0x03, 0x96, 0xaa, 0x28, 0x40, 0x61, 0x5c, 0xb9, 0xf1, 0x36, 0xad, 0xf9, 0x10, 0xe6, 0x9a, 0x01,
0x71, 0x1e, 0x36, 0xfc, 0xd1, 0xed, 0x0f, 0xb3, 0xc2, 0xc3, 0x7d, 0xd7, 0xfa, 0x57, 0x0e, 0x96,
0xe3, 0x68, 0x27, 0xf1, 0x3f, 0x3a, 0xd6, 0x70, 0xf9, 0x96, 0xd8, 0x94, 0xd1, 0x8e, 0x6e, 0x4b,
0x54, 0x0e, 0xac, 0x7f, 0xe6, 0x60, 0x69, 0x9f, 0x91, 0x08, 0x79, 0x17, 0xa0, 0x91, 0xcc, 0x16,
0xcc, 0x75, 0x08, 0xf5, 0x19, 0x7f, 0xf2, 0x4e, 0x8d, 0x60, 0x4c, 0x89, 0xd1, 0xad, 0xcf, 0xf9,
0x63, 0x5b, 0xe7, 0xf5, 0xd5, 0x6f, 0xd9, 0xb1, 0x25, 0x36, 0x9e, 0x44, 0xa7, 0x53, 0x93, 0xe8,
0x7f, 0x0c, 0xc8, 0xd7, 0xc9, 0xc5, 0xd8, 0x0b, 0x9f, 0xe6, 0x60, 0x51, 0xc5, 0xfa, 0xea, 0xb7,
0xd5, 0x1a, 0x5c, 0x0a, 0x89, 0xde, 0x07, 0xa7, 0x6d, 0xb9, 0xb0, 0xbe, 0x0b, 0x6b, 0x36, 0xee,
0x60, 0xc4, 0xb0, 0x9b, 0xa9, 0x7a, 0x29, 0x3b, 0x0f, 0xe4, 0x13, 0xd2, 0x57, 0x32, 0xa4, 0xc5,
0x2d, 0x9d, 0xcf, 0x26, 0xac, 0xf7, 0x81, 0x25, 0x43, 0xfa, 0x17, 0x46, 0x4b, 0x13, 0x9e, 0x4a,
0x08, 0xff, 0xcf, 0x80, 0xe2, 0x41, 0x84, 0x42, 0x8a, 0x1c, 0xde, 0xc3, 0xe9, 0x73, 0xc7, 0xab,
0xdc, 0xaa, 0xbf, 0xca, 0x41, 0x69, 0x30, 0xec, 0x0b, 0xd1, 0xb5, 0xf2, 0xb4, 0xa8, 0xba, 0x56,
0x2c, 0xac, 0x4f, 0x0d, 0xb0, 0xaa, 0x5c, 0xa3, 0x3f, 0x25, 0xd5, 0x27, 0x62, 0x8b, 0x53, 0xfd,
0xf0, 0x10, 0x40, 0x32, 0x1d, 0xd9, 0x59, 0x7a, 0x5e, 0xe0, 0xf3, 0x4b, 0xeb, 0x4f, 0x06, 0xbc,
0x7e, 0x22, 0x27, 0x55, 0xac, 0x71, 0x92, 0x4a, 0xd2, 0x97, 0x13, 0x87, 0x6d, 0x95, 0xbe, 0xdf,
0x18, 0xf0, 0x95, 0x63, 0xa8, 0xd6, 0xbb, 0xed, 0x26, 0x8e, 0x92, 0x04, 0x26, 0xa5, 0x36, 0x46,
0xdd, 0xe2, 0x9f, 0x19, 0xf0, 0xd5, 0x53, 0x58, 0xc5, 0x29, 0x1c, 0x1f, 0xad, 0x63, 0x52, 0xf8,
0x0b, 0x03, 0x8a, 0x1f, 0x85, 0x4e, 0x80, 0x27, 0xdd, 0x76, 0xbf, 0x35, 0xa0, 0x34, 0x48, 0xe4,
0xe5, 0xe9, 0xb5, 0x5f, 0x1a, 0x70, 0x25, 0xcd, 0x6f, 0x82, 0x0d, 0xf6, 0x3b, 0x03, 0x36, 0x86,
0x51, 0x79, 0x79, 0xba, 0x8a, 0x1f, 0x45, 0xef, 0x61, 0x56, 0x23, 0xee, 0x05, 0x19, 0xbf, 0x96,
0xe3, 0x68, 0x5f, 0xfd, 0x47, 0x99, 0x09, 0xd3, 0x0e, 0x71, 0xe5, 0xfc, 0x95, 0xb7, 0xc5, 0xb5,
0xf5, 0x6b, 0x03, 0x16, 0xf6, 0x7d, 0x2f, 0x9c, 0x4c, 0xb5, 0xf5, 0xfc, 0x9f, 0x4b, 0xcd, 0xff,
0x37, 0x20, 0x2f, 0x09, 0xa9, 0x82, 0x7c, 0x09, 0xe6, 0xa9, 0xef, 0x85, 0x88, 0x75, 0x23, 0xac,
0x5e, 0x59, 0x27, 0x02, 0xeb, 0xaf, 0x06, 0x14, 0xb8, 0x7a, 0x6a, 0xcb, 0x9e, 0x4c, 0x28, 0x45,
0x98, 0x65, 0xbd, 0x46, 0x2a, 0x9a, 0x19, 0xd6, 0xfb, 0x0e, 0x62, 0xc8, 0x2c, 0xc0, 0x4c, 0x1b,
0xb3, 0x16, 0x71, 0x55, 0xde, 0xd5, 0xca, 0x7a, 0x13, 0x8a, 0x03, 0xc4, 0x55, 0xc8, 0xaf, 0xc9,
0x90, 0xb1, 0xdb, 0x60, 0x3d, 0x15, 0xf2, 0x9c, 0x14, 0x1c, 0xf4, 0xac, 0xbf, 0xf0, 0x88, 0x71,
0xe8, 0x4e, 0x3c, 0xe2, 0x1b, 0xd9, 0x88, 0x17, 0x6e, 0xad, 0xc6, 0xde, 0x84, 0x6d, 0xaf, 0x8a,
0x28, 0xd6, 0x69, 0xb0, 0x9e, 0x1a, 0x50, 0x1c, 0xa0, 0xad, 0xe2, 0xc5, 0x02, 0x69, 0x64, 0x8f,
0x88, 0x19, 0xd6, 0x13, 0x4f, 0xaa, 0x3a, 0x5c, 0xe1, 0x0c, 0x6c, 0xf4, 0x78, 0x48, 0xee, 0x2a,
0xfd, 0x39, 0x5f, 0xb8, 0xb5, 0x96, 0x89, 0x67, 0x2f, 0x22, 0xe4, 0xf0, 0xa0, 0x97, 0xaa, 0xc4,
0xcf, 0x0c, 0xd8, 0x18, 0x06, 0x38, 0xde, 0xa8, 0xee, 0xc0, 0x42, 0x0d, 0x05, 0x81, 0x8e, 0xe3,
0xe6, 0x60, 0x1c, 0x43, 0xeb, 0x92, 0x84, 0x71, 0x1d, 0xf2, 0x12, 0x60, 0xe8, 0x0b, 0xe6, 0x7c,
0xfc, 0x82, 0xf9, 0x3d, 0x30, 0xdf, 0xa5, 0xcc, 0x6f, 0x23, 0x86, 0xef, 0x21, 0x7a, 0x7e, 0x7f,
0x9f, 0x1a, 0xb0, 0x9a, 0x01, 0x3a, 0xd9, 0xaf, 0xd9, 0x84, 0x29, 0x0f, 0xd1, 0xd1, 0xfd, 0x70,
0xe1, 0x21, 0x6a, 0x3d, 0x33, 0xc0, 0x14, 0xa3, 0xdf, 0x04, 0x07, 0xa9, 0x3b, 0xb0, 0x9a, 0xa1,
0xa0, 0xd2, 0xb2, 0x05, 0x97, 0x84, 0x8e, 0x72, 0x6f, 0x66, 0x92, 0x2b, 0x0c, 0x6c, 0xa9, 0xc0,
0xfb, 0x71, 0x4d, 0x21, 0x4c, 0x70, 0xc8, 0xb9, 0x0b, 0xeb, 0x7d, 0x24, 0xbe, 0x70, 0x20, 0xcf,
0x8c, 0xcc, 0x59, 0x33, 0x5b, 0x93, 0xf1, 0x6d, 0x16, 0x43, 0x28, 0xa8, 0x50, 0x2a, 0xc9, 0xd6,
0x27, 0x39, 0x94, 0xb2, 0x2d, 0x9f, 0xda, 0x0d, 0xf4, 0xfe, 0xc7, 0x0f, 0x17, 0x19, 0xc0, 0xaa,
0x2e, 0xfc, 0xdd, 0xd0, 0xbd, 0x1f, 0xba, 0xb8, 0x37, 0x89, 0xa6, 0xe3, 0x63, 0xa0, 0xcf, 0x9d,
0xeb, 0x31, 0x50, 0x2c, 0xac, 0x1f, 0xc0, 0xf5, 0xd3, 0xb8, 0x9e, 0x3f, 0x13, 0x7f, 0x36, 0xe0,
0x6b, 0x83, 0xe8, 0xb2, 0x59, 0x06, 0x73, 0x31, 0xde, 0x91, 0x78, 0x48, 0x2e, 0x7e, 0x08, 0x5b,
0xa7, 0xb3, 0x3d, 0x7f, 0x36, 0x7e, 0x6a, 0x64, 0x1a, 0xcd, 0xc6, 0x0e, 0xf6, 0x3b, 0x6c, 0xcc,
0xcd, 0xfe, 0x21, 0x6c, 0x0c, 0xe3, 0xa0, 0xa2, 0xda, 0x01, 0x60, 0xbd, 0x46, 0x24, 0xa5, 0x43,
0x9f, 0x8d, 0xda, 0x62, 0x9e, 0xf5, 0xd4, 0xa5, 0xf5, 0x07, 0x03, 0x36, 0xc5, 0x59, 0xe7, 0xe5,
0xee, 0xf4, 0x1a, 0x5c, 0x3d, 0x9e, 0xa5, 0x8a, 0x7f, 0x13, 0x16, 0xba, 0x5c, 0xa7, 0x91, 0x6c,
0x5f, 0x79, 0x1b, 0x84, 0x48, 0x18, 0x59, 0x7f, 0x34, 0xe0, 0x5a, 0x1a, 0xe5, 0xa5, 0xed, 0xe5,
0x77, 0xc1, 0x3a, 0x89, 0xe7, 0x59, 0xe3, 0x35, 0x61, 0xa5, 0x46, 0xda, 0x1d, 0x3f, 0xc0, 0x51,
0xfc, 0xa3, 0x6e, 0x05, 0x2e, 0xa7, 0x64, 0xc9, 0xec, 0xee, 0x68, 0xa1, 0x9e, 0xdd, 0x63, 0x81,
0x75, 0x13, 0x0a, 0xca, 0x64, 0x9f, 0x04, 0xbe, 0xeb, 0xb3, 0x27, 0x3a, 0x55, 0x05, 0x98, 0x91,
0xdf, 0xc1, 0xe8, 0x51, 0x40, 0xae, 0xac, 0x6f, 0x40, 0x71, 0xc0, 0x42, 0xb9, 0xd2, 0x87, 0x1b,
0x23, 0x75, 0xb8, 0x79, 0x23, 0xe6, 0xb4, 0xbb, 0xbb, 0x7b, 0x1a, 0xf6, 0x16, 0x98, 0x69, 0xe5,
0x13, 0x60, 0xcb, 0xb0, 0xae, 0x59, 0xe0, 0xa8, 0x83, 0x93, 0xd7, 0xbf, 0xc7, 0x41, 0xdf, 0x48,
0x02, 0xd5, 0x06, 0x27, 0xc0, 0x6f, 0xc1, 0x4a, 0x1d, 0x3f, 0x7e, 0xcf, 0x0f, 0x58, 0xf2, 0x04,
0x5f, 0x83, 0x4b, 0x1d, 0x14, 0xa1, 0xb6, 0x52, 0x94, 0x0b, 0xeb, 0x26, 0x5c, 0x4e, 0x69, 0x26,
0x87, 0x87, 0x43, 0x21, 0xd1, 0x7d, 0x96, 0xb7, 0xe7, 0xa4, 0xe0, 0xbe, 0x6b, 0x15, 0x61, 0xbd,
0x8e, 0x1f, 0x8b, 0x2a, 0x66, 0x1c, 0x58, 0xb7, 0xa1, 0xd0, 0x7f, 0xe3, 0x2c, 0x78, 0xd7, 0x60,
0x73, 0x0f, 0x87, 0xae, 0x1f, 0x7a, 0xa9, 0xfd, 0x23, 0x8b, 0x7c, 0x07, 0xae, 0x1e, 0xaf, 0x72,
0x16, 0x1f, 0xb7, 0xa1, 0xf0, 0x51, 0xe8, 0x87, 0x94, 0xa1, 0x20, 0xc8, 0x66, 0xe5, 0x44, 0xb3,
0x0a, 0x14, 0x07, 0xcc, 0x86, 0x4e, 0x9a, 0x73, 0xf1, 0x84, 0xbb, 0x03, 0x6b, 0x52, 0xb3, 0xd6,
0x42, 0xa1, 0x87, 0xe9, 0x99, 0xfc, 0xbc, 0x01, 0xeb, 0x7d, 0x46, 0x49, 0x6d, 0xfd, 0xf0, 0x90,
0xe8, 0xda, 0xf2, 0x6b, 0x5e, 0x31, 0xa9, 0xbc, 0x4b, 0xbc, 0xb3, 0xc1, 0xbf, 0x03, 0x66, 0xda,
0x42, 0x61, 0x5f, 0x87, 0xe9, 0x80, 0x78, 0xfa, 0x53, 0x09, 0xb3, 0x6f, 0xe0, 0xde, 0x25, 0x9e,
0x2d, 0xee, 0x5b, 0xaf, 0xc3, 0x42, 0xda, 0xd3, 0xf0, 0x36, 0x7a, 0x13, 0xf2, 0xe7, 0x02, 0xff,
0x1e, 0x6c, 0x1c, 0x60, 0xca, 0x8e, 0x39, 0x8c, 0x9e, 0xe3, 0x59, 0xf8, 0x73, 0x03, 0x5e, 0x1b,
0x8a, 0x38, 0xd6, 0x13, 0x55, 0xf5, 0x6f, 0x06, 0x2c, 0x3a, 0xa4, 0xbd, 0x1d, 0x7f, 0x21, 0x58,
0x35, 0xd5, 0xe7, 0x2a, 0x36, 0x7e, 0x64, 0x63, 0x2a, 0x50, 0xf6, 0x8c, 0xef, 0x7f, 0x78, 0x66,
0x57, 0xf1, 0xc2, 0xc3, 0xa1, 0xfc, 0x88, 0xb0, 0xec, 0x91, 0x72, 0xfc, 0xd9, 0xdf, 0xdb, 0xf2,
0xea, 0xa8, 0xf2, 0xfb, 0xdc, 0x54, 0xfd, 0xe3, 0x8f, 0x3f, 0xcb, 0xcd, 0xd7, 0xa5, 0xeb, 0x07,
0x95, 0x7f, 0xe8, 0xeb, 0x4f, 0x1e, 0x54, 0xfe, 0x9d, 0x5b, 0x8f, 0xaf, 0x3f, 0xb9, 0xb7, 0x57,
0xe5, 0xc8, 0x3c, 0xbf, 0x9f, 0xe7, 0x40, 0xca, 0xdf, 0x7a, 0xeb, 0x41, 0xa5, 0x39, 0x23, 0xf0,
0x77, 0xfe, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x17, 0x90, 0xdd, 0xd0, 0x02, 0x29, 0x00, 0x00,
}
......@@ -134,6 +134,7 @@ func (m *Sha3Request) GetData() []byte {
}
type Sha3Response struct {
//
Hash *github_com_CaduceusMetaverseProtocol_MetaTypes_types.Hash `protobuf:"bytes,1,opt,name=hash,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.Hash" json:"hash,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
......@@ -1034,13 +1035,13 @@ func (m *NonceResponse) GetNonce() uint64 {
}
type RepeatedNonceRequest struct {
// request address
Address []github_com_CaduceusMetaverseProtocol_MetaTypes_types.Address `protobuf:"bytes,1,rep,name=address,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address" json:"address,omitempty"`
//repeated bytes addresses =1;
// request block number
BlockId []github_com_CaduceusMetaverseProtocol_MetaTypes_types.BigInt `protobuf:"bytes,2,rep,name=block_id,json=blockId,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt" json:"block_id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
//repeated base.v1.BigInt block_id = 2[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt"];
List []*NonceRequest `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RepeatedNonceRequest) Reset() { *m = RepeatedNonceRequest{} }
......@@ -1067,16 +1068,18 @@ func (m *RepeatedNonceRequest) XXX_DiscardUnknown() {
var xxx_messageInfo_RepeatedNonceRequest proto.InternalMessageInfo
func (m *RepeatedNonceRequest) GetList() []*NonceRequest {
if m != nil {
return m.List
}
return nil
}
type RepeatedNonceResponse struct {
// request address
Address []github_com_CaduceusMetaverseProtocol_MetaTypes_types.Address `protobuf:"bytes,1,rep,name=address,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address" json:"address,omitempty"`
// request block number
BlockId []github_com_CaduceusMetaverseProtocol_MetaTypes_types.BigInt `protobuf:"bytes,2,rep,name=block_id,json=blockId,proto3,customtype=github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt" json:"block_id,omitempty"`
// nonce
Nonce []uint64 `protobuf:"varint,3,rep,packed,name=nonce,proto3" json:"nonce,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
List []*NonceResponse `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RepeatedNonceResponse) Reset() { *m = RepeatedNonceResponse{} }
......@@ -1103,9 +1106,9 @@ func (m *RepeatedNonceResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_RepeatedNonceResponse proto.InternalMessageInfo
func (m *RepeatedNonceResponse) GetNonce() []uint64 {
func (m *RepeatedNonceResponse) GetList() []*NonceResponse {
if m != nil {
return m.Nonce
return m.List
}
return nil
}
......@@ -3495,117 +3498,118 @@ func init() {
func init() { proto.RegisterFile("ring/v1/account_req_res.proto", fileDescriptor_edf64ab8a9a4cbde) }
var fileDescriptor_edf64ab8a9a4cbde = []byte{
// 1789 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xdb, 0x6f, 0x1b, 0x59,
0x19, 0xd7, 0xd8, 0x69, 0x2e, 0x9f, 0xdd, 0x24, 0x9d, 0x38, 0xb6, 0x37, 0xb0, 0x4a, 0x7b, 0x16,
0x4a, 0xc4, 0x16, 0xbb, 0x6e, 0xd4, 0x95, 0xd8, 0x5d, 0x54, 0x6a, 0xb3, 0xdb, 0xad, 0x94, 0x5a,
0x61, 0x92, 0x8d, 0x56, 0xb0, 0xc8, 0x1c, 0xcf, 0x9c, 0x8c, 0x87, 0x8c, 0xe7, 0xb8, 0x73, 0x8e,
0x53, 0x87, 0xa7, 0x16, 0x24, 0xb4, 0x12, 0x0f, 0x68, 0xc5, 0x33, 0x42, 0x42, 0x08, 0xa1, 0x15,
0xbc, 0x21, 0xf1, 0x37, 0xc0, 0x3b, 0x12, 0xea, 0x43, 0x1f, 0x78, 0xa3, 0x3c, 0x21, 0xf1, 0x07,
0xa0, 0x73, 0xe6, 0xcc, 0xc5, 0x97, 0x5c, 0x36, 0x92, 0xed, 0x28, 0x79, 0x49, 0xe6, 0x7c, 0xf3,
0x5d, 0x7e, 0xdf, 0xc5, 0xdf, 0xf9, 0xce, 0xcc, 0xc0, 0x9b, 0xbe, 0xe3, 0xd9, 0xe5, 0xc3, 0x4a,
0x19, 0x9b, 0x26, 0xed, 0x7a, 0xbc, 0xe1, 0x93, 0xa7, 0x0d, 0x9f, 0xb0, 0x52, 0xc7, 0xa7, 0x9c,
0xea, 0x73, 0xe2, 0x76, 0xe9, 0xb0, 0xb2, 0x76, 0xd3, 0xa6, 0xd4, 0x76, 0x49, 0x59, 0x92, 0x9b,
0xdd, 0xfd, 0xf2, 0xbe, 0x43, 0x5c, 0xab, 0xd1, 0xc6, 0xec, 0x20, 0x60, 0x5d, 0x2b, 0x7a, 0xa4,
0xd9, 0x75, 0xb1, 0xd0, 0xe5, 0x13, 0x46, 0xbb, 0xbe, 0x49, 0xd4, 0x9d, 0xf5, 0x41, 0x59, 0xee,
0xb4, 0x09, 0xe3, 0xb8, 0xdd, 0x51, 0x0c, 0xf9, 0x26, 0x66, 0x64, 0x84, 0xa0, 0x1e, 0xd2, 0xdb,
0x84, 0x63, 0x45, 0x5b, 0x92, 0x34, 0x9b, 0xda, 0x34, 0x20, 0xa0, 0x1c, 0xe8, 0x75, 0x6a, 0x91,
0x3d, 0xe2, 0x33, 0x87, 0x7a, 0x06, 0x79, 0xda, 0x25, 0x8c, 0xa3, 0x32, 0xac, 0xf4, 0x51, 0x59,
0x87, 0x7a, 0x8c, 0xe8, 0x45, 0x98, 0x3b, 0x0c, 0x48, 0x45, 0xed, 0xa6, 0xb6, 0xb1, 0x60, 0x84,
0x4b, 0x74, 0x0b, 0x32, 0x3b, 0x2d, 0xbc, 0xa9, 0xe4, 0x75, 0x1d, 0x66, 0x2c, 0xcc, 0xb1, 0xe4,
0xca, 0x1a, 0xf2, 0x1a, 0x75, 0x20, 0x1b, 0xb0, 0x28, 0x65, 0x3f, 0x86, 0x99, 0x16, 0x66, 0x2d,
0xc9, 0x93, 0xb9, 0x77, 0xbd, 0x24, 0x90, 0x95, 0x0e, 0x2b, 0xa5, 0x8f, 0x30, 0x6b, 0x55, 0xbf,
0xf3, 0xf2, 0xd5, 0xfa, 0xb7, 0x6d, 0x87, 0xb7, 0xba, 0xcd, 0x92, 0x49, 0xdb, 0xe5, 0x1a, 0xb6,
0xba, 0x26, 0xe9, 0xb2, 0x27, 0x84, 0x63, 0x61, 0x93, 0x6c, 0x0b, 0xf4, 0x26, 0x75, 0xcb, 0x82,
0xb2, 0x7b, 0xd4, 0x21, 0xac, 0xcc, 0xc5, 0x5f, 0x29, 0x6e, 0x48, 0xcd, 0x68, 0x05, 0x6e, 0xd4,
0x09, 0x1f, 0x70, 0xad, 0x04, 0x7a, 0x92, 0x78, 0xaa, 0x67, 0xab, 0xb0, 0x52, 0x27, 0x7c, 0x9b,
0x10, 0xbf, 0x26, 0x32, 0x1c, 0xaa, 0xb9, 0x0f, 0xb9, 0x7e, 0xb2, 0x52, 0xf4, 0x26, 0x40, 0x87,
0x10, 0xbf, 0x21, 0xcb, 0x41, 0xea, 0xba, 0x6e, 0x2c, 0x74, 0x42, 0x36, 0x54, 0x84, 0x7c, 0x88,
0x7c, 0x00, 0xd7, 0x26, 0x14, 0x86, 0xee, 0x9c, 0x0a, 0x6e, 0x19, 0x16, 0x77, 0x8e, 0x3c, 0xd3,
0xf1, 0xec, 0x50, 0xcd, 0xdf, 0x52, 0xb0, 0x14, 0x91, 0x94, 0xfc, 0x3e, 0x5c, 0x63, 0x1c, 0xfb,
0x5c, 0x85, 0x7a, 0x29, 0x0a, 0x75, 0xd5, 0xb1, 0x1f, 0x7b, 0xbc, 0xfa, 0xe0, 0xe5, 0xab, 0xf5,
0xf7, 0xce, 0x15, 0xec, 0x40, 0x81, 0x11, 0xa8, 0xd7, 0x9b, 0x90, 0x26, 0x9e, 0x55, 0x4c, 0x8d,
0xc9, 0x8a, 0x50, 0xae, 0xff, 0x04, 0xe6, 0xcc, 0xae, 0xef, 0x13, 0x8f, 0x17, 0xd3, 0x63, 0xb2,
0x13, 0x1a, 0x40, 0x37, 0x60, 0xa9, 0x46, 0x1d, 0x4f, 0xe8, 0x0f, 0xc3, 0xfb, 0x5c, 0x83, 0xe5,
0x98, 0xa6, 0xe2, 0xeb, 0xc2, 0x1c, 0xb6, 0x2c, 0x9f, 0x30, 0xa6, 0x22, 0xbc, 0x1c, 0x61, 0x7a,
0x18, 0xd0, 0xab, 0xdf, 0x7d, 0xf9, 0x6a, 0xfd, 0xfd, 0x73, 0x81, 0x52, 0x1a, 0x8c, 0xd0, 0x04,
0x5a, 0x82, 0xeb, 0x4f, 0x1c, 0x2f, 0x91, 0xf2, 0x0d, 0x58, 0x0c, 0x09, 0x0a, 0x50, 0x1e, 0x66,
0x19, 0xc7, 0xbc, 0xcb, 0x54, 0xbd, 0xa8, 0x95, 0x70, 0x48, 0xfe, 0x3c, 0x30, 0x8f, 0x1c, 0xfa,
0x26, 0x2c, 0xc7, 0xa4, 0x58, 0xdc, 0x27, 0xac, 0xeb, 0xf2, 0x50, 0x3c, 0x58, 0x09, 0xf1, 0x47,
0x98, 0x6d, 0xfb, 0x8e, 0x19, 0x89, 0xbf, 0xd0, 0x60, 0x39, 0xa6, 0x29, 0xf9, 0x36, 0x2c, 0xd8,
0x98, 0x35, 0x3a, 0x82, 0x38, 0xb6, 0x9a, 0x9b, 0xb7, 0x95, 0x59, 0x01, 0xeb, 0x61, 0xd0, 0x7e,
0x59, 0x32, 0x4d, 0x31, 0x6d, 0x54, 0x9a, 0xd2, 0x13, 0x48, 0xd3, 0x47, 0xc4, 0xb1, 0x5b, 0x51,
0xc7, 0xf8, 0x29, 0x2c, 0x86, 0x04, 0x05, 0xa8, 0x05, 0xb3, 0x2d, 0x49, 0x19, 0x5b, 0x90, 0x94,
0x7e, 0xf4, 0x1f, 0x0d, 0x16, 0xab, 0xd8, 0xc5, 0x5e, 0x94, 0xb9, 0xc9, 0x16, 0xad, 0x7e, 0x00,
0xf3, 0x4d, 0x97, 0x9a, 0x07, 0x0d, 0x67, 0x7c, 0xfd, 0x61, 0x4e, 0x5a, 0x78, 0x6c, 0xa1, 0x7f,
0xa6, 0x60, 0x29, 0xf2, 0x76, 0x1a, 0xbf, 0xd1, 0x89, 0xba, 0x2b, 0x5a, 0x62, 0x33, 0xf0, 0x76,
0x7c, 0x2d, 0x51, 0x19, 0x40, 0xff, 0x48, 0xc1, 0xe2, 0x0e, 0xa7, 0x3e, 0xb6, 0xaf, 0x40, 0x21,
0xe9, 0x2d, 0x98, 0xef, 0x50, 0xe6, 0x70, 0xb1, 0xf3, 0xa6, 0xc7, 0x30, 0xa6, 0x44, 0xda, 0xd1,
0x6b, 0xb1, 0x6d, 0x87, 0x71, 0xbd, 0xfc, 0x25, 0x3b, 0xb1, 0xc0, 0x46, 0x93, 0xe8, 0x4c, 0x62,
0x12, 0xfd, 0xb7, 0x06, 0xd9, 0x3a, 0xbd, 0x1a, 0xbd, 0xf0, 0x79, 0x0a, 0xae, 0x2b, 0x5f, 0x2f,
0x7f, 0x59, 0xe5, 0xe0, 0x9a, 0x47, 0xc3, 0x3e, 0x38, 0x63, 0x04, 0x0b, 0xf4, 0x5f, 0x0d, 0x72,
0x06, 0xe9, 0x10, 0xcc, 0x89, 0x75, 0x7c, 0xda, 0xd3, 0x93, 0x8d, 0x44, 0x7a, 0xbc, 0x69, 0xff,
0x2c, 0x05, 0xab, 0x03, 0x3e, 0x4f, 0x63, 0x0a, 0x9a, 0xa8, 0xd3, 0xc9, 0xf4, 0xa7, 0xe3, 0xf4,
0xff, 0x4f, 0x83, 0xc2, 0xae, 0x8f, 0x3d, 0x86, 0x4d, 0xd1, 0x11, 0x92, 0xa7, 0xb8, 0xcb, 0xfc,
0xc3, 0xff, 0x65, 0x0a, 0x8a, 0xc3, 0x6e, 0x5f, 0x89, 0x1e, 0x10, 0x9c, 0xbd, 0x55, 0x0f, 0x90,
0x0b, 0xf4, 0xb9, 0x06, 0xa8, 0x2a, 0x38, 0x06, 0x43, 0x52, 0x3d, 0x92, 0x1b, 0x86, 0xaa, 0x87,
0x03, 0x80, 0x00, 0xe9, 0xd8, 0x9e, 0x4c, 0x2c, 0x48, 0xfd, 0xe2, 0x12, 0xfd, 0x51, 0x83, 0xb7,
0x4e, 0xc4, 0xa4, 0x92, 0x35, 0x49, 0x50, 0x71, 0xf8, 0x52, 0xf2, 0xd1, 0x85, 0x0a, 0xdf, 0xaf,
0x35, 0xf8, 0xda, 0x31, 0x50, 0xeb, 0xdd, 0x76, 0x93, 0xf8, 0x71, 0x00, 0xe3, 0x54, 0x6b, 0xe3,
0x2e, 0xf1, 0x2f, 0x34, 0xf8, 0xfa, 0x29, 0xa8, 0xa2, 0x10, 0x4e, 0x0e, 0xd6, 0x31, 0x21, 0xfc,
0x85, 0x06, 0x85, 0x8f, 0x3d, 0xd3, 0x25, 0xd3, 0x2e, 0xbb, 0xdf, 0x68, 0x50, 0x1c, 0x06, 0x72,
0x71, 0x6a, 0xed, 0x33, 0x0d, 0xde, 0x48, 0xe2, 0x9b, 0x62, 0x81, 0xfd, 0x56, 0x83, 0xb5, 0x51,
0x50, 0x2e, 0x4e, 0x55, 0x89, 0x83, 0xfd, 0x23, 0xc2, 0x6b, 0xd4, 0xba, 0x22, 0xc3, 0xec, 0x52,
0xe4, 0xed, 0xe5, 0xdf, 0xca, 0x74, 0x98, 0x31, 0xa9, 0x15, 0x4c, 0xb3, 0x59, 0x43, 0x5e, 0xa3,
0x5f, 0x69, 0x90, 0xd9, 0x71, 0x6c, 0x6f, 0x3a, 0xd9, 0x0e, 0x4f, 0x53, 0xa9, 0xc4, 0x69, 0xea,
0x0e, 0x64, 0x03, 0x40, 0x2a, 0x21, 0x5f, 0x85, 0x05, 0xe6, 0xd8, 0x1e, 0xe6, 0x5d, 0x9f, 0xa8,
0x17, 0x00, 0x31, 0x01, 0xfd, 0x55, 0x83, 0xbc, 0x60, 0x4f, 0xb4, 0xec, 0xe9, 0xb8, 0x52, 0x80,
0x39, 0xde, 0x6b, 0x24, 0xbc, 0x99, 0xe5, 0xbd, 0xef, 0x61, 0x8e, 0xf5, 0x3c, 0xcc, 0xb6, 0x09,
0x6f, 0x51, 0x4b, 0xc5, 0x5d, 0xad, 0xd0, 0x3b, 0x50, 0x18, 0x02, 0xae, 0x5c, 0xfe, 0x4a, 0xe0,
0x32, 0xb1, 0x1a, 0xbc, 0xa7, 0x5c, 0x9e, 0x0f, 0x08, 0xbb, 0x3d, 0xf4, 0x17, 0xe1, 0x31, 0xf1,
0xac, 0xa9, 0x7b, 0x7c, 0xa7, 0xdf, 0xe3, 0xcc, 0xbd, 0x95, 0xc8, 0x9a, 0x94, 0xed, 0x55, 0x31,
0x23, 0x61, 0x18, 0xd0, 0x73, 0x0d, 0x0a, 0x43, 0xb0, 0x95, 0xbf, 0x44, 0x6a, 0x1a, 0xdb, 0x16,
0x31, 0xcb, 0x7b, 0x72, 0xa7, 0xaa, 0xc3, 0x1b, 0x02, 0x81, 0x81, 0x9f, 0x8d, 0x88, 0x5d, 0x65,
0x30, 0xe6, 0x99, 0x7b, 0xb9, 0x3e, 0x7f, 0xb6, 0x7d, 0x4a, 0xf7, 0x77, 0x7b, 0x89, 0x4c, 0xfc,
0x5c, 0x83, 0xb5, 0x51, 0x0a, 0x27, 0xeb, 0xd5, 0x03, 0xc8, 0xd4, 0xb0, 0xeb, 0x86, 0x7e, 0xdc,
0x1d, 0xf6, 0x63, 0x64, 0x5e, 0x62, 0x37, 0x6e, 0x43, 0x36, 0x50, 0x30, 0xf2, 0x71, 0x7d, 0x36,
0x7a, 0x5c, 0xff, 0x21, 0xe8, 0x1f, 0x30, 0xee, 0xb4, 0x31, 0x27, 0x8f, 0x30, 0x3b, 0xbf, 0xbd,
0xcf, 0x35, 0x58, 0xe9, 0x53, 0x74, 0xb2, 0x5d, 0xbd, 0x09, 0x69, 0x1b, 0xb3, 0xf1, 0xbd, 0x06,
0xb2, 0x31, 0x43, 0x2f, 0x34, 0xd0, 0xe5, 0xe8, 0x37, 0xc5, 0x41, 0xea, 0x01, 0xac, 0xf4, 0x41,
0x50, 0x61, 0xd9, 0x80, 0x6b, 0x92, 0x47, 0x99, 0xd7, 0xfb, 0x82, 0x2b, 0x05, 0x8c, 0x80, 0x41,
0xd4, 0x63, 0x4e, 0x69, 0x98, 0xe2, 0x90, 0xf3, 0x10, 0x56, 0x07, 0x40, 0x7c, 0x69, 0x47, 0x5e,
0x68, 0x7d, 0x67, 0xcd, 0xfe, 0x9c, 0x4c, 0xae, 0x59, 0x8c, 0x80, 0xa0, 0x5c, 0xa9, 0xc4, 0xad,
0x2f, 0xc0, 0x50, 0xec, 0x2f, 0xf9, 0x44, 0x37, 0x08, 0xfb, 0x9f, 0x38, 0x5c, 0xf4, 0x29, 0xac,
0x86, 0x89, 0x7f, 0xe8, 0x59, 0x8f, 0x3d, 0x8b, 0xf4, 0xa6, 0x51, 0x74, 0x62, 0x0c, 0x74, 0x84,
0xf1, 0x70, 0x0c, 0x94, 0x0b, 0xf4, 0x43, 0xb8, 0x7d, 0x1a, 0xd6, 0xf3, 0x47, 0xe2, 0x4f, 0x1a,
0x7c, 0x63, 0x58, 0x7b, 0x50, 0x2c, 0xc3, 0xb1, 0x98, 0xec, 0x48, 0x3c, 0x22, 0x16, 0x3f, 0x82,
0x8d, 0xd3, 0xd1, 0x9e, 0x3f, 0x1a, 0x3f, 0xd3, 0xfa, 0x0a, 0xcd, 0x20, 0x26, 0x71, 0x3a, 0x7c,
0xc2, 0xc5, 0xfe, 0x7d, 0x58, 0x1b, 0x85, 0x41, 0x79, 0xb5, 0x09, 0xc0, 0x7b, 0x0d, 0x3f, 0xa0,
0x8e, 0xdc, 0x1b, 0x43, 0x89, 0x05, 0xde, 0x53, 0x97, 0xe8, 0xf7, 0x1a, 0xac, 0xcb, 0xb3, 0xce,
0xc5, 0xae, 0xf4, 0x1a, 0xdc, 0x3c, 0x1e, 0xa5, 0xf2, 0x7f, 0x1d, 0x32, 0x5d, 0xc1, 0xd3, 0x88,
0xdb, 0x57, 0xd6, 0x00, 0x49, 0x92, 0x42, 0xe8, 0x0f, 0x1a, 0xdc, 0x4a, 0x6a, 0xb9, 0xb0, 0xb5,
0xfc, 0x01, 0xa0, 0x93, 0x70, 0x9e, 0xd5, 0x5f, 0x1d, 0x96, 0x6b, 0xb4, 0xdd, 0x71, 0x5c, 0xe2,
0x47, 0xaf, 0xc8, 0x2b, 0x70, 0x23, 0x41, 0x8b, 0x67, 0x77, 0x33, 0x24, 0x86, 0xb3, 0x7b, 0x44,
0x40, 0x77, 0x21, 0xaf, 0x44, 0x76, 0xa8, 0xeb, 0x58, 0x0e, 0x3f, 0x0a, 0x43, 0x95, 0x87, 0xd9,
0xe0, 0xd3, 0xa3, 0x70, 0x14, 0x08, 0x56, 0xe8, 0x5b, 0x50, 0x18, 0x92, 0x50, 0xa6, 0xc2, 0xc3,
0x8d, 0x96, 0x38, 0xdc, 0xbc, 0x1d, 0x61, 0xda, 0xda, 0xda, 0x3a, 0x4d, 0xf7, 0x06, 0xe8, 0x49,
0xe6, 0x13, 0xd4, 0x96, 0x61, 0x35, 0x44, 0x41, 0xfc, 0x0e, 0x89, 0x1f, 0xff, 0x1e, 0xa7, 0xfa,
0x4e, 0xec, 0x68, 0x28, 0x70, 0x82, 0xfa, 0x0d, 0x58, 0xae, 0x93, 0x67, 0x1f, 0x3a, 0x2e, 0x8f,
0x77, 0xf0, 0x1c, 0x5c, 0xeb, 0x60, 0x1f, 0xb7, 0x15, 0x63, 0xb0, 0x40, 0x77, 0xe1, 0x46, 0x82,
0x33, 0x3e, 0x3c, 0xec, 0x4b, 0x4a, 0x58, 0x67, 0x59, 0x63, 0x3e, 0x20, 0x3c, 0xb6, 0x50, 0x01,
0x56, 0xeb, 0xe4, 0x99, 0xcc, 0x62, 0x9f, 0x01, 0x74, 0x1f, 0xf2, 0x83, 0x37, 0xce, 0xa2, 0xef,
0x16, 0xac, 0x6f, 0x13, 0xcf, 0x72, 0x3c, 0x3b, 0xd1, 0x3f, 0xfa, 0x35, 0x3f, 0x80, 0x9b, 0xc7,
0xb3, 0x9c, 0xc5, 0xc6, 0x7d, 0xc8, 0x7f, 0xec, 0x39, 0x1e, 0xe3, 0xd8, 0x75, 0xfb, 0xa3, 0x72,
0xa2, 0x58, 0x05, 0x0a, 0x43, 0x62, 0x23, 0x27, 0xcd, 0xf9, 0x68, 0xc2, 0xdd, 0x84, 0x5c, 0xc0,
0x59, 0x6b, 0x61, 0xcf, 0x26, 0xec, 0x4c, 0x76, 0xde, 0x86, 0xd5, 0x01, 0xa1, 0x38, 0xb7, 0x8e,
0xb7, 0x4f, 0xc3, 0xdc, 0x8a, 0x6b, 0x91, 0xb1, 0x80, 0x79, 0x8b, 0xda, 0x67, 0x53, 0xff, 0x3e,
0xe8, 0x49, 0x09, 0xa5, 0xfb, 0x36, 0xcc, 0xb8, 0xd4, 0x0e, 0x5f, 0xb9, 0xe8, 0x03, 0x03, 0xf7,
0x16, 0xb5, 0x0d, 0x79, 0x1f, 0xbd, 0x05, 0x99, 0xa4, 0xa5, 0xd1, 0x65, 0xf4, 0x0e, 0x64, 0xcf,
0xa3, 0xbc, 0xfa, 0x67, 0x0d, 0x32, 0x26, 0x6d, 0x97, 0xd4, 0x57, 0x89, 0x55, 0x5d, 0x7d, 0x22,
0x63, 0x90, 0xa7, 0x06, 0x61, 0xb2, 0x55, 0x6d, 0x6b, 0x3f, 0x78, 0x72, 0xe6, 0x7e, 0x16, 0x2d,
0x6c, 0xe2, 0x05, 0x9f, 0x27, 0x96, 0x6d, 0x5a, 0x56, 0x9f, 0x44, 0xbe, 0x27, 0xfe, 0x1f, 0x56,
0x7e, 0x97, 0x4a, 0x1b, 0x9f, 0x7c, 0xf2, 0x45, 0x6a, 0xce, 0x10, 0x46, 0xf7, 0x2a, 0x7f, 0x0f,
0xae, 0x3e, 0xdd, 0xab, 0xfc, 0x2b, 0xb5, 0xa2, 0xae, 0x3e, 0x7d, 0xb4, 0x5d, 0x15, 0xfa, 0xc4,
0x3e, 0xfc, 0x3a, 0x35, 0x2f, 0xa8, 0xef, 0xbe, 0xbb, 0x57, 0x69, 0xce, 0x4a, 0x9d, 0x9b, 0xff,
0x0f, 0x00, 0x00, 0xff, 0xff, 0xcf, 0x0b, 0xcb, 0xce, 0x66, 0x29, 0x00, 0x00,
// 1795 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5a, 0xdd, 0x6f, 0x1b, 0x59,
0x15, 0xd7, 0x38, 0x69, 0x3e, 0x8e, 0xdd, 0x24, 0x9d, 0x24, 0xb6, 0x37, 0xb0, 0x4a, 0x7b, 0x17,
0x4a, 0xd8, 0x2d, 0x76, 0xdd, 0xa8, 0x2b, 0xb1, 0xbb, 0xa8, 0xc4, 0x66, 0xb7, 0x5b, 0x29, 0x8d,
0xc2, 0xa4, 0x5b, 0xad, 0x60, 0x91, 0xb9, 0x9e, 0xb9, 0x19, 0x0f, 0x1d, 0xcf, 0x75, 0xe7, 0x5e,
0xa7, 0x2e, 0x4f, 0x2d, 0x48, 0x08, 0x89, 0x07, 0xb4, 0xe2, 0x19, 0x21, 0x21, 0x84, 0xd0, 0x0a,
0xde, 0x90, 0xf8, 0x1b, 0xe0, 0x1d, 0x09, 0xf5, 0xa1, 0x0f, 0xbc, 0x51, 0x5e, 0xf9, 0x03, 0xd0,
0xbd, 0x73, 0xef, 0x7c, 0xd8, 0xce, 0xc7, 0x46, 0xb2, 0x5d, 0xb5, 0x2f, 0xed, 0xdc, 0x33, 0xe7,
0xfc, 0xce, 0xef, 0x7c, 0xe4, 0xce, 0xb9, 0xe3, 0x81, 0x37, 0x43, 0x2f, 0x70, 0xab, 0x47, 0xb5,
0x2a, 0xb6, 0x6d, 0xda, 0x0b, 0x78, 0x33, 0x24, 0x0f, 0x9b, 0x21, 0x61, 0x95, 0x6e, 0x48, 0x39,
0x35, 0xe7, 0xc5, 0xed, 0xca, 0x51, 0x6d, 0xe3, 0xb2, 0x4b, 0xa9, 0xeb, 0x93, 0xaa, 0x14, 0xb7,
0x7a, 0x87, 0xd5, 0x43, 0x8f, 0xf8, 0x4e, 0xb3, 0x83, 0xd9, 0x83, 0x48, 0x75, 0xa3, 0x1c, 0x90,
0x56, 0xcf, 0xc7, 0x02, 0x2b, 0x24, 0x8c, 0xf6, 0x42, 0x9b, 0xa8, 0x3b, 0x9b, 0x83, 0xb6, 0xdc,
0xeb, 0x10, 0xc6, 0x71, 0xa7, 0xab, 0x14, 0x8a, 0x2d, 0xcc, 0xc8, 0x08, 0x43, 0x53, 0xcb, 0x3b,
0x84, 0x63, 0x25, 0x5b, 0x96, 0x32, 0x97, 0xba, 0x34, 0x12, 0xa0, 0x35, 0x30, 0xf7, 0xa8, 0x43,
0xee, 0x93, 0x90, 0x79, 0x34, 0xb0, 0xc8, 0xc3, 0x1e, 0x61, 0x1c, 0x55, 0x61, 0x35, 0x23, 0x65,
0x5d, 0x1a, 0x30, 0x62, 0x96, 0x61, 0xfe, 0x28, 0x12, 0x95, 0x8d, 0xcb, 0xc6, 0xd6, 0xa2, 0xa5,
0x97, 0xe8, 0x0a, 0xe4, 0x0f, 0xda, 0x78, 0x5b, 0xd9, 0x9b, 0x26, 0xcc, 0x3a, 0x98, 0x63, 0xa9,
0x55, 0xb0, 0xe4, 0x35, 0xea, 0x42, 0x21, 0x52, 0x51, 0x60, 0x3f, 0x86, 0xd9, 0x36, 0x66, 0x6d,
0xa9, 0x93, 0xbf, 0x71, 0xb1, 0x22, 0x98, 0x55, 0x8e, 0x6a, 0x95, 0x8f, 0x31, 0x6b, 0xd7, 0xbf,
0xf3, 0xec, 0xf9, 0xe6, 0xb7, 0x5d, 0x8f, 0xb7, 0x7b, 0xad, 0x8a, 0x4d, 0x3b, 0xd5, 0x06, 0x76,
0x7a, 0x36, 0xe9, 0xb1, 0xbb, 0x84, 0x63, 0xe1, 0x93, 0xec, 0x0b, 0xf6, 0x36, 0xf5, 0xab, 0x42,
0x72, 0xef, 0x71, 0x97, 0xb0, 0x2a, 0x17, 0xff, 0x4a, 0x73, 0x4b, 0x22, 0xa3, 0x55, 0xb8, 0xb4,
0x47, 0xf8, 0x40, 0x68, 0x15, 0x30, 0xd3, 0xc2, 0x53, 0x23, 0x5b, 0x87, 0xd5, 0x3d, 0xc2, 0xf7,
0x09, 0x09, 0x1b, 0xa2, 0xc2, 0x1a, 0xe6, 0x26, 0xac, 0x65, 0xc5, 0x0a, 0xe8, 0x4d, 0x80, 0x2e,
0x21, 0x61, 0x53, 0xb6, 0x83, 0xc4, 0xba, 0x68, 0x2d, 0x76, 0xb5, 0x1a, 0x2a, 0x43, 0x51, 0x33,
0x1f, 0xe0, 0xb5, 0x0d, 0xa5, 0xa1, 0x3b, 0xa7, 0x92, 0x5b, 0x81, 0xa5, 0x83, 0xc7, 0x81, 0xed,
0x05, 0xae, 0x86, 0xf9, 0x7b, 0x0e, 0x96, 0x63, 0x91, 0xb2, 0x3f, 0x84, 0x0b, 0x8c, 0xe3, 0x90,
0xab, 0x54, 0x2f, 0xc7, 0xa9, 0xae, 0x7b, 0xee, 0x9d, 0x80, 0xd7, 0x6f, 0x3d, 0x7b, 0xbe, 0xf9,
0xfe, 0xb9, 0x92, 0x1d, 0x01, 0x58, 0x11, 0xbc, 0xd9, 0x82, 0x19, 0x12, 0x38, 0xe5, 0xdc, 0x98,
0xbc, 0x08, 0x70, 0xf3, 0x27, 0x30, 0x6f, 0xf7, 0xc2, 0x90, 0x04, 0xbc, 0x3c, 0x33, 0x26, 0x3f,
0xda, 0x01, 0xba, 0x04, 0xcb, 0x0d, 0xea, 0x05, 0x02, 0x5f, 0xa7, 0xf7, 0x89, 0x01, 0x2b, 0x89,
0x4c, 0xe5, 0xd7, 0x87, 0x79, 0xec, 0x38, 0x21, 0x61, 0x4c, 0x65, 0x78, 0x25, 0xe6, 0xb4, 0x13,
0xc9, 0xeb, 0xdf, 0x7d, 0xf6, 0x7c, 0xf3, 0x83, 0x73, 0x91, 0x52, 0x08, 0x96, 0x76, 0x81, 0x96,
0xe1, 0xe2, 0x5d, 0x2f, 0x48, 0x95, 0x7c, 0x0b, 0x96, 0xb4, 0x40, 0x11, 0x2a, 0xc2, 0x1c, 0xe3,
0x98, 0xf7, 0x98, 0xea, 0x17, 0xb5, 0x12, 0x01, 0xc9, 0x3f, 0x0f, 0xcc, 0xe3, 0x80, 0xde, 0x86,
0x95, 0x44, 0x94, 0x98, 0x87, 0x84, 0xf5, 0x7c, 0xae, 0xcd, 0xa3, 0x95, 0x30, 0xbf, 0x8d, 0xd9,
0x7e, 0xe8, 0xd9, 0xb1, 0xf9, 0x53, 0x03, 0x56, 0x12, 0x99, 0xb2, 0xef, 0xc0, 0xa2, 0x8b, 0x59,
0xb3, 0x2b, 0x84, 0x63, 0xeb, 0xb9, 0x05, 0x57, 0xb9, 0x15, 0xb4, 0x76, 0xa2, 0xed, 0x97, 0xa5,
0xcb, 0x94, 0xc8, 0x46, 0x95, 0x69, 0x66, 0x02, 0x65, 0xfa, 0x98, 0x78, 0x6e, 0x3b, 0xde, 0x31,
0x7e, 0x0a, 0x4b, 0x5a, 0xa0, 0x08, 0xb5, 0x61, 0xae, 0x2d, 0x25, 0x63, 0x4b, 0x92, 0xc2, 0x47,
0xff, 0x35, 0x60, 0xa9, 0x8e, 0x7d, 0x1c, 0xc4, 0x95, 0x9b, 0x6c, 0xd3, 0x9a, 0x0f, 0x60, 0xa1,
0xe5, 0x53, 0xfb, 0x41, 0xd3, 0x1b, 0xdf, 0xfe, 0x30, 0x2f, 0x3d, 0xdc, 0x71, 0xd0, 0xbf, 0x72,
0xb0, 0x1c, 0x47, 0x3b, 0x8d, 0xbf, 0xd1, 0x89, 0x86, 0x2b, 0xb6, 0xc4, 0x56, 0x14, 0xed, 0xf8,
0xb6, 0x44, 0xe5, 0x00, 0xfd, 0x33, 0x07, 0x4b, 0x07, 0x9c, 0x86, 0xd8, 0x7d, 0x0d, 0x1a, 0xc9,
0x6c, 0xc3, 0x42, 0x97, 0x32, 0x8f, 0x8b, 0x27, 0xef, 0xcc, 0x18, 0xc6, 0x94, 0x18, 0x1d, 0xbd,
0x10, 0x8f, 0x6d, 0x9d, 0xd7, 0x57, 0xbf, 0x65, 0x27, 0x96, 0xd8, 0x78, 0x12, 0x9d, 0x4d, 0x4d,
0xa2, 0xff, 0x31, 0xa0, 0xb0, 0x47, 0x5f, 0x8f, 0xbd, 0xf0, 0x49, 0x0e, 0x2e, 0xaa, 0x58, 0x5f,
0xfd, 0xb6, 0x5a, 0x83, 0x0b, 0x01, 0xd5, 0xfb, 0xe0, 0xac, 0x15, 0x2d, 0xd0, 0x0e, 0xac, 0x59,
0xa4, 0x4b, 0x30, 0x27, 0x4e, 0xa6, 0xea, 0xdf, 0x84, 0x59, 0xdf, 0x63, 0x5c, 0x0d, 0x03, 0xeb,
0x15, 0x75, 0x58, 0xab, 0xa4, 0x95, 0x2c, 0xa9, 0x82, 0x1a, 0xb0, 0x3e, 0x00, 0xa1, 0x92, 0xf9,
0x76, 0x06, 0xa3, 0x38, 0x88, 0x11, 0x69, 0x29, 0x90, 0xff, 0x19, 0x50, 0xba, 0x17, 0xe2, 0x80,
0x61, 0x5b, 0xb4, 0x66, 0xfa, 0x38, 0xf1, 0x2a, 0x77, 0xe0, 0xaf, 0x72, 0x50, 0x1e, 0x0e, 0xfb,
0xb5, 0x68, 0xc6, 0xe8, 0x10, 0xa8, 0x9a, 0x51, 0x2e, 0xd0, 0xe7, 0x06, 0xa0, 0xba, 0xd0, 0x18,
0x4c, 0x49, 0xfd, 0xb1, 0xdc, 0xb9, 0x54, 0x3f, 0x3c, 0x00, 0x88, 0x98, 0x8e, 0xed, 0x88, 0xbc,
0x28, 0xf1, 0xc5, 0x25, 0xfa, 0x93, 0x01, 0x6f, 0x9d, 0xc8, 0x49, 0x15, 0x6b, 0x92, 0xa4, 0x92,
0xf4, 0xe5, 0xe4, 0x19, 0x5a, 0xa5, 0xef, 0x37, 0x06, 0x7c, 0xed, 0x18, 0xaa, 0x7b, 0xbd, 0x4e,
0x8b, 0x84, 0x49, 0x02, 0x93, 0x52, 0x1b, 0xe3, 0x6e, 0xf1, 0x2f, 0x0c, 0xf8, 0xfa, 0x29, 0xac,
0xe2, 0x14, 0x4e, 0x8e, 0xd6, 0x31, 0x29, 0xfc, 0x85, 0x01, 0xa5, 0x4f, 0x02, 0xdb, 0x27, 0xd3,
0x6e, 0xbb, 0xdf, 0x1a, 0x50, 0x1e, 0x26, 0xf2, 0xf2, 0xf4, 0xda, 0x2f, 0x0d, 0x78, 0x23, 0xcd,
0x6f, 0x8a, 0x0d, 0xf6, 0x3b, 0x03, 0x36, 0x46, 0x51, 0x79, 0x79, 0xba, 0x4a, 0x9c, 0x30, 0x6f,
0x13, 0xde, 0xa0, 0xce, 0x6b, 0x32, 0x55, 0x2d, 0xc7, 0xd1, 0xbe, 0xfa, 0x8f, 0x32, 0x13, 0x66,
0x6d, 0xea, 0x44, 0x63, 0x55, 0xc1, 0x92, 0xd7, 0xe8, 0xd7, 0x06, 0xe4, 0x0f, 0x3c, 0x37, 0x98,
0x4e, 0xb5, 0xf5, 0x58, 0x9f, 0x4b, 0x8d, 0xf5, 0xd7, 0xa0, 0x10, 0x11, 0x52, 0x05, 0xf9, 0x2a,
0x2c, 0x32, 0xcf, 0x0d, 0x30, 0xef, 0x85, 0x44, 0xbd, 0x89, 0x4e, 0x04, 0xe8, 0x6f, 0x06, 0x14,
0x85, 0x7a, 0x6a, 0xcb, 0x9e, 0x4e, 0x28, 0x25, 0x98, 0xe7, 0xfd, 0x66, 0x2a, 0x9a, 0x39, 0xde,
0xff, 0x1e, 0xe6, 0xd8, 0x2c, 0xc2, 0x5c, 0x87, 0xf0, 0x36, 0x75, 0x54, 0xde, 0xd5, 0x0a, 0xbd,
0x0b, 0xa5, 0x21, 0xe2, 0x2a, 0xe4, 0xaf, 0x44, 0x21, 0x13, 0xa7, 0xc9, 0xfb, 0x2a, 0xe4, 0x85,
0x48, 0x70, 0xaf, 0x8f, 0xfe, 0x2a, 0x22, 0x26, 0x81, 0x33, 0xf5, 0x88, 0xaf, 0x65, 0x23, 0xce,
0xdf, 0x58, 0x8d, 0xbd, 0x49, 0xdb, 0x7e, 0x1d, 0x33, 0xa2, 0xd3, 0x80, 0x9e, 0x18, 0x50, 0x1a,
0xa2, 0xad, 0xe2, 0x25, 0x12, 0x69, 0x6c, 0x8f, 0x88, 0x39, 0xde, 0x97, 0x4f, 0xaa, 0x3d, 0x78,
0x43, 0x30, 0xb0, 0xf0, 0xa3, 0x11, 0xb9, 0xab, 0x0d, 0xe6, 0x3c, 0x7f, 0x63, 0x2d, 0x13, 0xcf,
0x7e, 0x48, 0xe9, 0xe1, 0xbd, 0x7e, 0xaa, 0x12, 0x3f, 0x37, 0x60, 0x63, 0x14, 0xe0, 0x64, 0xa3,
0xba, 0x05, 0xf9, 0x06, 0xf6, 0x7d, 0x1d, 0xc7, 0xf5, 0xe1, 0x38, 0x46, 0xd6, 0x25, 0x09, 0xe3,
0x2a, 0x14, 0x22, 0x80, 0x91, 0xef, 0x8d, 0x0b, 0xf1, 0x7b, 0xe3, 0x8f, 0xc0, 0xfc, 0x90, 0x71,
0xaf, 0x83, 0x39, 0xb9, 0x8d, 0xd9, 0xf9, 0xfd, 0x7d, 0x6e, 0xc0, 0x6a, 0x06, 0xe8, 0x64, 0xbf,
0x66, 0x0b, 0x66, 0x5c, 0xcc, 0xc6, 0xf7, 0x7b, 0x84, 0x8b, 0x19, 0x7a, 0x6a, 0x80, 0x29, 0x47,
0xbf, 0x29, 0x0e, 0x52, 0xb7, 0x60, 0x35, 0x43, 0x41, 0xa5, 0x65, 0x0b, 0x2e, 0x48, 0x1d, 0xe5,
0xde, 0xcc, 0x24, 0x57, 0x1a, 0x58, 0x91, 0x82, 0xe8, 0xc7, 0x35, 0x85, 0x30, 0xc5, 0x21, 0x67,
0x07, 0xd6, 0x07, 0x48, 0x7c, 0xe9, 0x40, 0x9e, 0x1a, 0x99, 0xb3, 0x66, 0xb6, 0x26, 0x93, 0xdb,
0x2c, 0x46, 0x50, 0x50, 0xa1, 0xd4, 0x92, 0xad, 0x2f, 0xe2, 0x50, 0xce, 0xb6, 0x7c, 0x6a, 0x37,
0xd0, 0xfb, 0x9f, 0x38, 0x5c, 0x64, 0x00, 0xeb, 0xba, 0xf0, 0x3b, 0x81, 0x73, 0x27, 0x70, 0x48,
0x7f, 0x1a, 0x4d, 0x27, 0xc6, 0x40, 0x4f, 0x38, 0xd7, 0x63, 0xa0, 0x5c, 0xa0, 0x1f, 0xc2, 0xd5,
0xd3, 0xb8, 0x9e, 0x3f, 0x13, 0x7f, 0x36, 0xe0, 0x1b, 0xc3, 0xe8, 0x51, 0xb3, 0x0c, 0xe7, 0x62,
0xb2, 0x23, 0xf1, 0x88, 0x5c, 0xfc, 0x08, 0xb6, 0x4e, 0x67, 0x7b, 0xfe, 0x6c, 0xfc, 0xcc, 0xc8,
0x34, 0x9a, 0x45, 0x6c, 0xe2, 0x75, 0xf9, 0x84, 0x9b, 0xfd, 0xfb, 0xb0, 0x31, 0x8a, 0x83, 0x8a,
0x6a, 0x1b, 0x80, 0xf7, 0x9b, 0x61, 0x24, 0x1d, 0xf9, 0x6c, 0xd4, 0x16, 0x8b, 0xbc, 0xaf, 0x2e,
0xd1, 0x1f, 0x0c, 0xd8, 0x94, 0x67, 0x9d, 0x97, 0xbb, 0xd3, 0x1b, 0x70, 0xf9, 0x78, 0x96, 0x2a,
0xfe, 0x4d, 0xc8, 0xf7, 0x84, 0x4e, 0x33, 0xd9, 0xbe, 0x0a, 0x16, 0x48, 0x91, 0x34, 0x42, 0x7f,
0x34, 0xe0, 0x4a, 0x1a, 0xe5, 0xa5, 0xed, 0xe5, 0x0f, 0x01, 0x9d, 0xc4, 0xf3, 0xac, 0xf1, 0x9a,
0xb0, 0xd2, 0xa0, 0x9d, 0xae, 0xe7, 0x93, 0x30, 0xfe, 0xad, 0xb6, 0x06, 0x97, 0x52, 0xb2, 0x64,
0x76, 0xb7, 0xb5, 0x50, 0xcf, 0xee, 0xb1, 0x00, 0x5d, 0x87, 0xa2, 0x32, 0x39, 0xa0, 0xbe, 0xe7,
0x78, 0xfc, 0xb1, 0x4e, 0x55, 0x11, 0xe6, 0xa2, 0x6f, 0x60, 0xf4, 0x28, 0x10, 0xad, 0xd0, 0xb7,
0xa0, 0x34, 0x64, 0xa1, 0x5c, 0xe9, 0xc3, 0x8d, 0x91, 0x3a, 0xdc, 0xbc, 0x13, 0x73, 0xda, 0xdd,
0xdd, 0x3d, 0x0d, 0x7b, 0x0b, 0xcc, 0xb4, 0xf2, 0x09, 0xb0, 0x55, 0x58, 0xd7, 0x2c, 0x48, 0xd8,
0x25, 0xc9, 0xeb, 0xdf, 0xe3, 0xa0, 0xaf, 0x25, 0x81, 0x6a, 0x83, 0x13, 0xe0, 0xb7, 0x60, 0x65,
0x8f, 0x3c, 0xfa, 0xc8, 0xf3, 0x79, 0xf2, 0x04, 0x5f, 0x83, 0x0b, 0x5d, 0x1c, 0xe2, 0x8e, 0x52,
0x8c, 0x16, 0xe8, 0x3a, 0x5c, 0x4a, 0x69, 0x26, 0x87, 0x87, 0x43, 0x29, 0xd1, 0x7d, 0x56, 0xb0,
0x16, 0x22, 0xc1, 0x1d, 0x07, 0x95, 0x60, 0x7d, 0x8f, 0x3c, 0x92, 0x55, 0xcc, 0x38, 0x40, 0x37,
0xa1, 0x38, 0x78, 0xe3, 0x2c, 0x78, 0x57, 0x60, 0x73, 0x9f, 0x04, 0x8e, 0x17, 0xb8, 0xa9, 0xfd,
0x23, 0x8b, 0x7c, 0x0b, 0x2e, 0x1f, 0xaf, 0x72, 0x16, 0x1f, 0x37, 0xa1, 0xf8, 0x49, 0xe0, 0x05,
0x8c, 0x63, 0xdf, 0xcf, 0x66, 0xe5, 0x44, 0xb3, 0x1a, 0x94, 0x86, 0xcc, 0x46, 0x4e, 0x9a, 0x0b,
0xf1, 0x84, 0xbb, 0x0d, 0x6b, 0x91, 0x66, 0xa3, 0x8d, 0x03, 0x97, 0xb0, 0x33, 0xf9, 0x79, 0x07,
0xd6, 0x07, 0x8c, 0x92, 0xda, 0x7a, 0xc1, 0x21, 0xd5, 0xb5, 0x15, 0xd7, 0xa2, 0x62, 0x91, 0xf2,
0x2e, 0x75, 0xcf, 0x06, 0xff, 0x01, 0x98, 0x69, 0x0b, 0x85, 0x7d, 0x15, 0x66, 0x7d, 0xea, 0xea,
0x2f, 0x20, 0xcc, 0x81, 0x81, 0x7b, 0x97, 0xba, 0x96, 0xbc, 0x8f, 0xde, 0x82, 0x7c, 0xda, 0xd3,
0xe8, 0x36, 0x7a, 0x17, 0x0a, 0xe7, 0x01, 0xaf, 0xff, 0xc5, 0x80, 0xbc, 0x4d, 0x3b, 0xfa, 0xd7,
0x92, 0xba, 0xa9, 0xbe, 0xd5, 0xb0, 0xc8, 0x43, 0x8b, 0x30, 0xb9, 0x55, 0xed, 0x1b, 0x3f, 0xb8,
0x7b, 0xe6, 0xfd, 0x2c, 0x5e, 0xb8, 0x24, 0x88, 0xbe, 0x93, 0xab, 0xba, 0xb4, 0xaa, 0xbe, 0xcd,
0x7b, 0x5f, 0xfc, 0x7f, 0x54, 0xfb, 0x7d, 0x6e, 0xc6, 0xfa, 0xf4, 0xd3, 0x2f, 0x72, 0xf3, 0x96,
0x70, 0x7a, 0xbf, 0xf6, 0x8f, 0xe8, 0xea, 0xb3, 0xfb, 0xb5, 0x7f, 0xe7, 0x56, 0xd5, 0xd5, 0x67,
0xb7, 0xf7, 0xeb, 0x02, 0x4f, 0x3c, 0x87, 0x5f, 0xe4, 0x16, 0x84, 0xf4, 0xbd, 0xf7, 0xee, 0xd7,
0x5a, 0x73, 0x12, 0x73, 0xfb, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf5, 0xd3, 0x4b, 0xb2, 0xef,
0x27, 0x00, 0x00,
}
......@@ -22,6 +22,82 @@ var _ = math.Inf
// proto package needs to be updated.
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
type RequestBroadcastTx struct {
Tx []byte `protobuf:"bytes,1,opt,name=tx,proto3" json:"tx,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RequestBroadcastTx) Reset() { *m = RequestBroadcastTx{} }
func (m *RequestBroadcastTx) String() string { return proto.CompactTextString(m) }
func (*RequestBroadcastTx) ProtoMessage() {}
func (*RequestBroadcastTx) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{0}
}
func (m *RequestBroadcastTx) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RequestBroadcastTx.Unmarshal(m, b)
}
func (m *RequestBroadcastTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_RequestBroadcastTx.Marshal(b, m, deterministic)
}
func (m *RequestBroadcastTx) XXX_Merge(src proto.Message) {
xxx_messageInfo_RequestBroadcastTx.Merge(m, src)
}
func (m *RequestBroadcastTx) XXX_Size() int {
return xxx_messageInfo_RequestBroadcastTx.Size(m)
}
func (m *RequestBroadcastTx) XXX_DiscardUnknown() {
xxx_messageInfo_RequestBroadcastTx.DiscardUnknown(m)
}
var xxx_messageInfo_RequestBroadcastTx proto.InternalMessageInfo
func (m *RequestBroadcastTx) GetTx() []byte {
if m != nil {
return m.Tx
}
return nil
}
type ResponseBroadcastTx struct {
Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ResponseBroadcastTx) Reset() { *m = ResponseBroadcastTx{} }
func (m *ResponseBroadcastTx) String() string { return proto.CompactTextString(m) }
func (*ResponseBroadcastTx) ProtoMessage() {}
func (*ResponseBroadcastTx) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{1}
}
func (m *ResponseBroadcastTx) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResponseBroadcastTx.Unmarshal(m, b)
}
func (m *ResponseBroadcastTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ResponseBroadcastTx.Marshal(b, m, deterministic)
}
func (m *ResponseBroadcastTx) XXX_Merge(src proto.Message) {
xxx_messageInfo_ResponseBroadcastTx.Merge(m, src)
}
func (m *ResponseBroadcastTx) XXX_Size() int {
return xxx_messageInfo_ResponseBroadcastTx.Size(m)
}
func (m *ResponseBroadcastTx) XXX_DiscardUnknown() {
xxx_messageInfo_ResponseBroadcastTx.DiscardUnknown(m)
}
var xxx_messageInfo_ResponseBroadcastTx proto.InternalMessageInfo
func (m *ResponseBroadcastTx) GetHash() []byte {
if m != nil {
return m.Hash
}
return nil
}
type BroadcastEthTxWithFromRequest struct {
EthTx *v1.EthTransaction `protobuf:"bytes,1,opt,name=ethTx,proto3" json:"ethTx,omitempty"`
From string `protobuf:"bytes,2,opt,name=from,proto3" json:"from,omitempty"`
......@@ -34,7 +110,7 @@ func (m *BroadcastEthTxWithFromRequest) Reset() { *m = BroadcastEthTxWit
func (m *BroadcastEthTxWithFromRequest) String() string { return proto.CompactTextString(m) }
func (*BroadcastEthTxWithFromRequest) ProtoMessage() {}
func (*BroadcastEthTxWithFromRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{0}
return fileDescriptor_2dc67120507b0009, []int{2}
}
func (m *BroadcastEthTxWithFromRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BroadcastEthTxWithFromRequest.Unmarshal(m, b)
......@@ -68,6 +144,166 @@ func (m *BroadcastEthTxWithFromRequest) GetFrom() string {
return ""
}
type BroadcastLegacyEthTxWithFromRequest struct {
LegacyTx *v1.EthLegacyTx `protobuf:"bytes,1,opt,name=LegacyTx,proto3" json:"LegacyTx,omitempty"`
From string `protobuf:"bytes,2,opt,name=from,proto3" json:"from,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BroadcastLegacyEthTxWithFromRequest) Reset() { *m = BroadcastLegacyEthTxWithFromRequest{} }
func (m *BroadcastLegacyEthTxWithFromRequest) String() string { return proto.CompactTextString(m) }
func (*BroadcastLegacyEthTxWithFromRequest) ProtoMessage() {}
func (*BroadcastLegacyEthTxWithFromRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{3}
}
func (m *BroadcastLegacyEthTxWithFromRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BroadcastLegacyEthTxWithFromRequest.Unmarshal(m, b)
}
func (m *BroadcastLegacyEthTxWithFromRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BroadcastLegacyEthTxWithFromRequest.Marshal(b, m, deterministic)
}
func (m *BroadcastLegacyEthTxWithFromRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_BroadcastLegacyEthTxWithFromRequest.Merge(m, src)
}
func (m *BroadcastLegacyEthTxWithFromRequest) XXX_Size() int {
return xxx_messageInfo_BroadcastLegacyEthTxWithFromRequest.Size(m)
}
func (m *BroadcastLegacyEthTxWithFromRequest) XXX_DiscardUnknown() {
xxx_messageInfo_BroadcastLegacyEthTxWithFromRequest.DiscardUnknown(m)
}
var xxx_messageInfo_BroadcastLegacyEthTxWithFromRequest proto.InternalMessageInfo
func (m *BroadcastLegacyEthTxWithFromRequest) GetLegacyTx() *v1.EthLegacyTx {
if m != nil {
return m.LegacyTx
}
return nil
}
func (m *BroadcastLegacyEthTxWithFromRequest) GetFrom() string {
if m != nil {
return m.From
}
return ""
}
type ResponseLegacyEthTxBroadcastTx struct {
Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ResponseLegacyEthTxBroadcastTx) Reset() { *m = ResponseLegacyEthTxBroadcastTx{} }
func (m *ResponseLegacyEthTxBroadcastTx) String() string { return proto.CompactTextString(m) }
func (*ResponseLegacyEthTxBroadcastTx) ProtoMessage() {}
func (*ResponseLegacyEthTxBroadcastTx) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{4}
}
func (m *ResponseLegacyEthTxBroadcastTx) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResponseLegacyEthTxBroadcastTx.Unmarshal(m, b)
}
func (m *ResponseLegacyEthTxBroadcastTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ResponseLegacyEthTxBroadcastTx.Marshal(b, m, deterministic)
}
func (m *ResponseLegacyEthTxBroadcastTx) XXX_Merge(src proto.Message) {
xxx_messageInfo_ResponseLegacyEthTxBroadcastTx.Merge(m, src)
}
func (m *ResponseLegacyEthTxBroadcastTx) XXX_Size() int {
return xxx_messageInfo_ResponseLegacyEthTxBroadcastTx.Size(m)
}
func (m *ResponseLegacyEthTxBroadcastTx) XXX_DiscardUnknown() {
xxx_messageInfo_ResponseLegacyEthTxBroadcastTx.DiscardUnknown(m)
}
var xxx_messageInfo_ResponseLegacyEthTxBroadcastTx proto.InternalMessageInfo
func (m *ResponseLegacyEthTxBroadcastTx) GetHash() []byte {
if m != nil {
return m.Hash
}
return nil
}
type BroadcastLegacyEthTxsWithFromRequest struct {
List []*BroadcastLegacyEthTxWithFromRequest `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BroadcastLegacyEthTxsWithFromRequest) Reset() { *m = BroadcastLegacyEthTxsWithFromRequest{} }
func (m *BroadcastLegacyEthTxsWithFromRequest) String() string { return proto.CompactTextString(m) }
func (*BroadcastLegacyEthTxsWithFromRequest) ProtoMessage() {}
func (*BroadcastLegacyEthTxsWithFromRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{5}
}
func (m *BroadcastLegacyEthTxsWithFromRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BroadcastLegacyEthTxsWithFromRequest.Unmarshal(m, b)
}
func (m *BroadcastLegacyEthTxsWithFromRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BroadcastLegacyEthTxsWithFromRequest.Marshal(b, m, deterministic)
}
func (m *BroadcastLegacyEthTxsWithFromRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_BroadcastLegacyEthTxsWithFromRequest.Merge(m, src)
}
func (m *BroadcastLegacyEthTxsWithFromRequest) XXX_Size() int {
return xxx_messageInfo_BroadcastLegacyEthTxsWithFromRequest.Size(m)
}
func (m *BroadcastLegacyEthTxsWithFromRequest) XXX_DiscardUnknown() {
xxx_messageInfo_BroadcastLegacyEthTxsWithFromRequest.DiscardUnknown(m)
}
var xxx_messageInfo_BroadcastLegacyEthTxsWithFromRequest proto.InternalMessageInfo
func (m *BroadcastLegacyEthTxsWithFromRequest) GetList() []*BroadcastLegacyEthTxWithFromRequest {
if m != nil {
return m.List
}
return nil
}
type ResponseLegacyEthTxsBroadcastTx struct {
List []*ResponseLegacyEthTxBroadcastTx `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ResponseLegacyEthTxsBroadcastTx) Reset() { *m = ResponseLegacyEthTxsBroadcastTx{} }
func (m *ResponseLegacyEthTxsBroadcastTx) String() string { return proto.CompactTextString(m) }
func (*ResponseLegacyEthTxsBroadcastTx) ProtoMessage() {}
func (*ResponseLegacyEthTxsBroadcastTx) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{6}
}
func (m *ResponseLegacyEthTxsBroadcastTx) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResponseLegacyEthTxsBroadcastTx.Unmarshal(m, b)
}
func (m *ResponseLegacyEthTxsBroadcastTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ResponseLegacyEthTxsBroadcastTx.Marshal(b, m, deterministic)
}
func (m *ResponseLegacyEthTxsBroadcastTx) XXX_Merge(src proto.Message) {
xxx_messageInfo_ResponseLegacyEthTxsBroadcastTx.Merge(m, src)
}
func (m *ResponseLegacyEthTxsBroadcastTx) XXX_Size() int {
return xxx_messageInfo_ResponseLegacyEthTxsBroadcastTx.Size(m)
}
func (m *ResponseLegacyEthTxsBroadcastTx) XXX_DiscardUnknown() {
xxx_messageInfo_ResponseLegacyEthTxsBroadcastTx.DiscardUnknown(m)
}
var xxx_messageInfo_ResponseLegacyEthTxsBroadcastTx proto.InternalMessageInfo
func (m *ResponseLegacyEthTxsBroadcastTx) GetList() []*ResponseLegacyEthTxBroadcastTx {
if m != nil {
return m.List
}
return nil
}
type BroadcastEthTxWithFromRequests struct {
List []*BroadcastEthTxWithFromRequest `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
......@@ -79,7 +315,7 @@ func (m *BroadcastEthTxWithFromRequests) Reset() { *m = BroadcastEthTxWi
func (m *BroadcastEthTxWithFromRequests) String() string { return proto.CompactTextString(m) }
func (*BroadcastEthTxWithFromRequests) ProtoMessage() {}
func (*BroadcastEthTxWithFromRequests) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{1}
return fileDescriptor_2dc67120507b0009, []int{7}
}
func (m *BroadcastEthTxWithFromRequests) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BroadcastEthTxWithFromRequests.Unmarshal(m, b)
......@@ -117,7 +353,7 @@ func (m *ResponseBroadcastTxs) Reset() { *m = ResponseBroadcastTxs{} }
func (m *ResponseBroadcastTxs) String() string { return proto.CompactTextString(m) }
func (*ResponseBroadcastTxs) ProtoMessage() {}
func (*ResponseBroadcastTxs) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{2}
return fileDescriptor_2dc67120507b0009, []int{8}
}
func (m *ResponseBroadcastTxs) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResponseBroadcastTxs.Unmarshal(m, b)
......@@ -154,7 +390,7 @@ func (m *RequestPing) Reset() { *m = RequestPing{} }
func (m *RequestPing) String() string { return proto.CompactTextString(m) }
func (*RequestPing) ProtoMessage() {}
func (*RequestPing) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{3}
return fileDescriptor_2dc67120507b0009, []int{9}
}
func (m *RequestPing) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RequestPing.Unmarshal(m, b)
......@@ -184,7 +420,7 @@ func (m *ResponsePing) Reset() { *m = ResponsePing{} }
func (m *ResponsePing) String() string { return proto.CompactTextString(m) }
func (*ResponsePing) ProtoMessage() {}
func (*ResponsePing) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{4}
return fileDescriptor_2dc67120507b0009, []int{10}
}
func (m *ResponsePing) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResponsePing.Unmarshal(m, b)
......@@ -204,177 +440,112 @@ func (m *ResponsePing) XXX_DiscardUnknown() {
var xxx_messageInfo_ResponsePing proto.InternalMessageInfo
type RequestBroadcastTx struct {
Tx []byte `protobuf:"bytes,1,opt,name=tx,proto3" json:"tx,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RequestBroadcastTx) Reset() { *m = RequestBroadcastTx{} }
func (m *RequestBroadcastTx) String() string { return proto.CompactTextString(m) }
func (*RequestBroadcastTx) ProtoMessage() {}
func (*RequestBroadcastTx) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{5}
}
func (m *RequestBroadcastTx) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RequestBroadcastTx.Unmarshal(m, b)
}
func (m *RequestBroadcastTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_RequestBroadcastTx.Marshal(b, m, deterministic)
}
func (m *RequestBroadcastTx) XXX_Merge(src proto.Message) {
xxx_messageInfo_RequestBroadcastTx.Merge(m, src)
}
func (m *RequestBroadcastTx) XXX_Size() int {
return xxx_messageInfo_RequestBroadcastTx.Size(m)
}
func (m *RequestBroadcastTx) XXX_DiscardUnknown() {
xxx_messageInfo_RequestBroadcastTx.DiscardUnknown(m)
}
var xxx_messageInfo_RequestBroadcastTx proto.InternalMessageInfo
func (m *RequestBroadcastTx) GetTx() []byte {
if m != nil {
return m.Tx
}
return nil
}
type ResponseBroadcastTx struct {
Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ResponseBroadcastTx) Reset() { *m = ResponseBroadcastTx{} }
func (m *ResponseBroadcastTx) String() string { return proto.CompactTextString(m) }
func (*ResponseBroadcastTx) ProtoMessage() {}
func (*ResponseBroadcastTx) Descriptor() ([]byte, []int) {
return fileDescriptor_2dc67120507b0009, []int{6}
}
func (m *ResponseBroadcastTx) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResponseBroadcastTx.Unmarshal(m, b)
}
func (m *ResponseBroadcastTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ResponseBroadcastTx.Marshal(b, m, deterministic)
}
func (m *ResponseBroadcastTx) XXX_Merge(src proto.Message) {
xxx_messageInfo_ResponseBroadcastTx.Merge(m, src)
}
func (m *ResponseBroadcastTx) XXX_Size() int {
return xxx_messageInfo_ResponseBroadcastTx.Size(m)
}
func (m *ResponseBroadcastTx) XXX_DiscardUnknown() {
xxx_messageInfo_ResponseBroadcastTx.DiscardUnknown(m)
}
var xxx_messageInfo_ResponseBroadcastTx proto.InternalMessageInfo
func (m *ResponseBroadcastTx) GetHash() []byte {
if m != nil {
return m.Hash
}
return nil
}
func init() {
proto.RegisterType((*RequestBroadcastTx)(nil), "ring.v1.RequestBroadcastTx")
proto.RegisterType((*ResponseBroadcastTx)(nil), "ring.v1.ResponseBroadcastTx")
proto.RegisterType((*BroadcastEthTxWithFromRequest)(nil), "ring.v1.broadcastEthTxWithFromRequest")
proto.RegisterType((*BroadcastLegacyEthTxWithFromRequest)(nil), "ring.v1.broadcastLegacyEthTxWithFromRequest")
proto.RegisterType((*ResponseLegacyEthTxBroadcastTx)(nil), "ring.v1.ResponseLegacyEthTxBroadcastTx")
proto.RegisterType((*BroadcastLegacyEthTxsWithFromRequest)(nil), "ring.v1.broadcastLegacyEthTxsWithFromRequest")
proto.RegisterType((*ResponseLegacyEthTxsBroadcastTx)(nil), "ring.v1.ResponseLegacyEthTxsBroadcastTx")
proto.RegisterType((*BroadcastEthTxWithFromRequests)(nil), "ring.v1.broadcastEthTxWithFromRequests")
proto.RegisterType((*ResponseBroadcastTxs)(nil), "ring.v1.ResponseBroadcastTxs")
proto.RegisterType((*RequestPing)(nil), "ring.v1.RequestPing")
proto.RegisterType((*ResponsePing)(nil), "ring.v1.ResponsePing")
proto.RegisterType((*RequestBroadcastTx)(nil), "ring.v1.RequestBroadcastTx")
proto.RegisterType((*ResponseBroadcastTx)(nil), "ring.v1.ResponseBroadcastTx")
}
func init() { proto.RegisterFile("ring/v1/service.proto", fileDescriptor_2dc67120507b0009) }
var fileDescriptor_2dc67120507b0009 = []byte{
// 1323 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x58, 0xdd, 0x6e, 0x1b, 0xc5,
0x17, 0xff, 0xdb, 0x4d, 0x9b, 0x76, 0x9c, 0xa6, 0x7f, 0xb6, 0x4d, 0x6b, 0x1c, 0xf2, 0x81, 0x41,
0x90, 0x52, 0xba, 0xae, 0x5b, 0x21, 0xa1, 0x56, 0x7c, 0xd4, 0x26, 0x4d, 0x01, 0xc7, 0xb2, 0xec,
0x36, 0x14, 0x14, 0xa9, 0x1a, 0xaf, 0xa7, 0xeb, 0x15, 0xeb, 0x19, 0x67, 0x67, 0xec, 0x24, 0x5c,
0x21, 0x71, 0xc5, 0x6b, 0x70, 0x83, 0xc4, 0xa3, 0xf0, 0x18, 0x5c, 0x72, 0xc1, 0x33, 0xa0, 0xd9,
0x9d, 0x19, 0x9f, 0xdd, 0x59, 0x3b, 0xe6, 0x2a, 0xde, 0xf3, 0xfb, 0x38, 0x33, 0xc7, 0x73, 0xe6,
0xac, 0x83, 0x36, 0xa2, 0x80, 0xfa, 0xb5, 0x69, 0xbd, 0xc6, 0x49, 0x34, 0x0d, 0x3c, 0xe2, 0x8e,
0x23, 0x26, 0x98, 0xb3, 0x2a, 0xc3, 0xee, 0xb4, 0x5e, 0xd9, 0xf4, 0x19, 0xf3, 0x43, 0x52, 0x8b,
0xc3, 0xfd, 0xc9, 0x9b, 0x1a, 0x19, 0x8d, 0xc5, 0x79, 0xc2, 0xaa, 0x6c, 0x6b, 0x71, 0x44, 0x4e,
0x26, 0x84, 0x8b, 0xd7, 0x11, 0xe1, 0x63, 0x46, 0xb9, 0x72, 0xa9, 0x6c, 0x69, 0x1c, 0x7b, 0x1e,
0x9b, 0x50, 0x89, 0x9f, 0x48, 0x8e, 0x82, 0x6f, 0xf7, 0x31, 0x27, 0x89, 0x9c, 0xb3, 0x49, 0xa4,
0x93, 0x57, 0x6e, 0xe9, 0x38, 0x11, 0xc3, 0xd7, 0xe2, 0x2c, 0x89, 0x56, 0xfb, 0x68, 0xab, 0x1f,
0x31, 0x3c, 0xf0, 0x30, 0x17, 0xfb, 0x62, 0xf8, 0xe2, 0xec, 0xbb, 0x40, 0x0c, 0x9f, 0x45, 0x6c,
0xd4, 0x4d, 0x92, 0x3b, 0xf7, 0xd1, 0x65, 0x22, 0xe3, 0xe5, 0xc2, 0x6e, 0x61, 0xaf, 0xf4, 0xf0,
0x8e, 0x2b, 0x6d, 0xdc, 0x69, 0xdd, 0x95, 0xec, 0x08, 0x53, 0x8e, 0x3d, 0x11, 0x30, 0xda, 0x4d,
0x58, 0x8e, 0x83, 0x56, 0xde, 0x44, 0x6c, 0x54, 0x2e, 0xee, 0x16, 0xf6, 0xae, 0x75, 0xe3, 0xcf,
0xd5, 0x63, 0xb4, 0xbd, 0x30, 0x07, 0x77, 0x1e, 0xa3, 0x95, 0x30, 0xe0, 0xa2, 0x5c, 0xd8, 0xbd,
0xb4, 0x57, 0x7a, 0xf8, 0x81, 0xab, 0xea, 0xe4, 0x2e, 0x94, 0x75, 0x63, 0x4d, 0xf5, 0x39, 0xba,
0xd5, 0x55, 0x05, 0x6a, 0x68, 0xfa, 0x8b, 0x33, 0xee, 0x3c, 0x48, 0x79, 0xbe, 0x63, 0x3c, 0x73,
0xc8, 0xca, 0xe9, 0x3a, 0x2a, 0x29, 0xeb, 0x4e, 0x40, 0xfd, 0xea, 0x3a, 0x5a, 0xd3, 0xdc, 0xf8,
0xf9, 0x7d, 0xe4, 0x28, 0x18, 0x48, 0x9d, 0x75, 0x54, 0x14, 0x49, 0x71, 0xd6, 0xba, 0x45, 0x71,
0x56, 0xbd, 0x8b, 0x6e, 0xe6, 0x64, 0x90, 0x75, 0x19, 0x62, 0x3e, 0x54, 0xc4, 0xf8, 0xf3, 0xc3,
0x7f, 0x76, 0x50, 0xa9, 0x1b, 0x50, 0xbf, 0x97, 0x1c, 0x12, 0xe7, 0x11, 0x5a, 0x91, 0x89, 0x9c,
0x5b, 0x60, 0xad, 0x66, 0x39, 0x95, 0x0d, 0x6b, 0x07, 0x31, 0xf9, 0x08, 0xad, 0xa5, 0xb6, 0xfd,
0xe1, 0x72, 0xc5, 0xe3, 0x95, 0xad, 0x45, 0x15, 0xe1, 0x4e, 0x0f, 0x95, 0xe0, 0xfa, 0x97, 0xfc,
0x4e, 0x2a, 0x0b, 0xeb, 0xec, 0x7c, 0x82, 0x56, 0x7a, 0x43, 0xfc, 0x08, 0xec, 0x50, 0x3e, 0x6a,
0xed, 0x46, 0x26, 0x9a, 0xe8, 0xab, 0xff, 0x73, 0xf6, 0x51, 0xa9, 0xcd, 0x06, 0xe4, 0x88, 0x44,
0x3c, 0x60, 0xd4, 0xb9, 0xed, 0x26, 0xed, 0xe3, 0xea, 0xf6, 0x71, 0xf7, 0x65, 0xfb, 0x80, 0xdc,
0x80, 0x0d, 0x6c, 0x9a, 0x08, 0xb5, 0x89, 0xb8, 0xc8, 0x65, 0x73, 0xe6, 0x62, 0xc8, 0xc0, 0xe4,
0x00, 0xad, 0xb5, 0x89, 0xe8, 0x10, 0x12, 0x35, 0x65, 0xf3, 0xcd, 0xb5, 0xd9, 0x82, 0x36, 0x86,
0x0e, 0x8c, 0x0e, 0xd1, 0x8d, 0x8e, 0x94, 0x78, 0x2c, 0xbc, 0x68, 0x49, 0xbb, 0xc6, 0x2b, 0xa3,
0x00, 0x76, 0x9f, 0xa1, 0xd5, 0xde, 0x39, 0xf5, 0xe4, 0x91, 0x98, 0x67, 0x53, 0x9e, 0xd5, 0x37,
0x61, 0x02, 0xf9, 0x17, 0xe8, 0x6a, 0x93, 0x05, 0x54, 0x36, 0xf7, 0x5c, 0xfd, 0xdb, 0x46, 0xaf,
0xa9, 0xc0, 0xe0, 0x09, 0xba, 0x72, 0x18, 0xd0, 0x45, 0xe9, 0xef, 0x18, 0x79, 0x42, 0x4c, 0x67,
0x7f, 0x8e, 0xf9, 0xb0, 0x8b, 0xc5, 0x32, 0xd9, 0x35, 0x35, 0x6d, 0xf0, 0x34, 0xb9, 0x0d, 0xf9,
0x12, 0x06, 0x9a, 0x9a, 0x36, 0x38, 0xc0, 0xbc, 0x13, 0xc9, 0x3e, 0xbc, 0xd8, 0x40, 0x53, 0x81,
0xc1, 0x97, 0xa8, 0xd4, 0x08, 0x99, 0xf7, 0x63, 0x7b, 0x32, 0xea, 0x93, 0x68, 0x89, 0x22, 0x3c,
0x27, 0x81, 0x3f, 0x84, 0x07, 0xe2, 0x1b, 0xe5, 0xd0, 0x38, 0x97, 0x1b, 0x74, 0x66, 0xe7, 0x10,
0x44, 0xed, 0x36, 0x4b, 0x81, 0xc6, 0xab, 0x83, 0xae, 0x2b, 0x40, 0xad, 0x67, 0x2b, 0x2b, 0x48,
0xe2, 0xda, 0x6f, 0x7b, 0x1e, 0x6c, 0x1c, 0x7f, 0x42, 0x9b, 0x31, 0x04, 0xee, 0xfc, 0xf8, 0x44,
0xab, 0xd5, 0xde, 0x4b, 0x1b, 0xe4, 0xb3, 0x74, 0xb6, 0x8f, 0x97, 0x23, 0x9b, 0xdc, 0x3f, 0x17,
0xd0, 0xd6, 0x1c, 0xa6, 0xda, 0xde, 0xfd, 0x8b, 0x1c, 0xd3, 0xdb, 0x75, 0x97, 0xa5, 0x9b, 0x25,
0x7c, 0x8f, 0xfe, 0xff, 0x92, 0x7a, 0x21, 0x81, 0x7b, 0x9e, 0xb5, 0x65, 0x16, 0xd2, 0x79, 0xde,
0x5d, 0xc0, 0x30, 0xd6, 0xaf, 0x91, 0x03, 0x51, 0xb5, 0xa3, 0x6a, 0xae, 0x34, 0xbd, 0x8d, 0xf7,
0x16, 0x72, 0x4c, 0x82, 0x13, 0x54, 0x8e, 0xf1, 0xc6, 0x79, 0xbc, 0x5b, 0x99, 0xfe, 0x29, 0x1d,
0x7c, 0x4d, 0x07, 0xe4, 0xcc, 0xd9, 0x4b, 0x5b, 0xe4, 0x50, 0x74, 0xb2, 0xbb, 0x4b, 0x30, 0x4d,
0xca, 0x53, 0x54, 0x81, 0xac, 0x64, 0x49, 0x26, 0xe9, 0x47, 0xb9, 0x56, 0x69, 0x92, 0x4e, 0x7b,
0x6f, 0x29, 0xae, 0x49, 0xfc, 0x15, 0xba, 0xd6, 0x64, 0xa3, 0x71, 0x10, 0x92, 0x88, 0x3b, 0xf0,
0xc2, 0x52, 0x31, 0x6d, 0x5b, 0xc9, 0x83, 0x8c, 0xcb, 0x11, 0xba, 0xa1, 0xc2, 0x3d, 0x16, 0x06,
0x83, 0x40, 0x9c, 0x3b, 0x3b, 0x59, 0x81, 0x46, 0xb4, 0xe3, 0xee, 0x7c, 0x02, 0x18, 0x1e, 0x48,
0x81, 0xad, 0x56, 0xcb, 0xb1, 0xd6, 0xd0, 0x6a, 0xb5, 0xb4, 0xdb, 0x66, 0x2e, 0x66, 0x8c, 0x7a,
0x68, 0x5d, 0x67, 0x21, 0xd1, 0x98, 0x50, 0xe1, 0x6c, 0x5b, 0xe9, 0x13, 0x40, 0x1b, 0xee, 0xcc,
0xc5, 0xe1, 0x05, 0xb4, 0xcf, 0x45, 0x30, 0xc2, 0x82, 0x1c, 0x60, 0x0e, 0x2e, 0x20, 0x10, 0xb5,
0x2f, 0xa0, 0x14, 0x68, 0xbc, 0x8e, 0xd1, 0x5b, 0xa0, 0xab, 0x54, 0xc3, 0xcc, 0xda, 0xc1, 0xc2,
0xb4, 0x6f, 0x75, 0x11, 0xc5, 0xb8, 0xff, 0x52, 0x40, 0xdb, 0x29, 0xdc, 0x3e, 0xd8, 0x6e, 0xbe,
0xd1, 0xdc, 0xe3, 0x5d, 0x5b, 0x9a, 0x6f, 0x56, 0xf1, 0x6b, 0x01, 0xed, 0xda, 0xe4, 0xcc, 0x59,
0x7f, 0xb0, 0xc0, 0x37, 0xff, 0xc4, 0xd7, 0xff, 0x83, 0x02, 0x5e, 0x22, 0xf0, 0x6d, 0x9c, 0x78,
0x24, 0x18, 0x0b, 0x27, 0xb7, 0x9a, 0x0a, 0xb4, 0x2f, 0x91, 0x3c, 0x8e, 0x49, 0xf0, 0x39, 0x5a,
0x6d, 0xe0, 0x10, 0x53, 0x8f, 0x38, 0xb3, 0x19, 0xa6, 0x22, 0xda, 0xaa, 0x6c, 0x03, 0x50, 0xdf,
0x13, 0x2c, 0xc2, 0x3e, 0xd4, 0xab, 0x88, 0xad, 0x37, 0x80, 0xd1, 0x7f, 0x8a, 0x2e, 0xb7, 0x99,
0xcc, 0xbe, 0x01, 0xde, 0xf2, 0x40, 0xee, 0xdb, 0xd9, 0x30, 0x9c, 0x85, 0x5d, 0x32, 0x26, 0x58,
0x90, 0x41, 0xe2, 0x00, 0xdf, 0x7c, 0x41, 0xdc, 0x9e, 0x85, 0x19, 0x18, 0x0e, 0x83, 0xec, 0xc8,
0x00, 0xc3, 0x20, 0x0b, 0xd9, 0xc3, 0xc0, 0x66, 0xc0, 0x32, 0x1d, 0x10, 0xd1, 0x64, 0x03, 0x58,
0x26, 0x15, 0xb1, 0xcb, 0x64, 0x00, 0xa3, 0x97, 0x6f, 0xd8, 0x81, 0x4f, 0xe1, 0x1b, 0x76, 0xe0,
0xd3, 0x9c, 0x37, 0xec, 0x38, 0x0a, 0x2f, 0x3c, 0x19, 0x01, 0x0b, 0x03, 0x17, 0x5e, 0x06, 0xb1,
0x2f, 0x3c, 0x8b, 0x90, 0xf2, 0x25, 0x74, 0x30, 0xc7, 0x37, 0x8d, 0xe4, 0xf8, 0x66, 0x09, 0xf0,
0xb8, 0x4b, 0xb0, 0x8b, 0x4f, 0xa1, 0x75, 0x35, 0xa5, 0x4c, 0x83, 0xf6, 0x71, 0xcf, 0xe3, 0xc0,
0x3a, 0x36, 0x71, 0x18, 0x82, 0x3a, 0xca, 0x47, 0xbb, 0x8e, 0x49, 0x14, 0x8e, 0x9f, 0x36, 0x39,
0x7d, 0x16, 0x84, 0x82, 0x44, 0x60, 0xfc, 0x98, 0x98, 0x3d, 0x7e, 0x00, 0x64, 0x5c, 0xbe, 0x45,
0xeb, 0x6d, 0x72, 0x1a, 0x37, 0xbc, 0xb2, 0x9a, 0xf7, 0x3a, 0xb9, 0x03, 0x7d, 0x80, 0x20, 0x55,
0xaa, 0x72, 0x87, 0xd0, 0x41, 0x40, 0x7d, 0xb0, 0xd3, 0x0b, 0x6c, 0x67, 0xb3, 0x7e, 0x9e, 0x34,
0xfd, 0x1d, 0xbf, 0xa4, 0x01, 0xe5, 0x02, 0x87, 0xa1, 0xf2, 0xdd, 0x01, 0x43, 0x3b, 0x85, 0xd8,
0xdf, 0xb1, 0x45, 0x80, 0x7d, 0x9b, 0xc4, 0x9a, 0x43, 0x4c, 0x7d, 0xc2, 0x41, 0xdf, 0xa6, 0xe2,
0x76, 0xdf, 0x66, 0x60, 0x38, 0x7e, 0x13, 0xa8, 0xc5, 0x7c, 0x0e, 0xc6, 0xef, 0x2c, 0x68, 0x8f,
0x5f, 0x88, 0xc1, 0xd3, 0x11, 0x5b, 0xcc, 0x4e, 0x07, 0x14, 0x6f, 0x64, 0xa2, 0x5a, 0xd6, 0xf8,
0xbd, 0x80, 0x4a, 0x1e, 0x1b, 0x69, 0xb8, 0xb1, 0xa6, 0x7e, 0xf9, 0xc7, 0xbf, 0xea, 0x3a, 0x85,
0x1f, 0x0e, 0xfd, 0x40, 0x0c, 0x27, 0x7d, 0xd7, 0x63, 0xa3, 0x5a, 0x13, 0x0f, 0x26, 0x1e, 0x99,
0xf0, 0x43, 0x22, 0xf0, 0x94, 0x44, 0x9c, 0xe8, 0x9f, 0x7e, 0x35, 0x19, 0x31, 0x0f, 0x3e, 0xa1,
0xc9, 0x7f, 0x91, 0x6a, 0x3e, 0xab, 0xa9, 0x7f, 0x0c, 0x3d, 0x91, 0x7f, 0xa7, 0xf5, 0xdf, 0x8a,
0x97, 0xba, 0xaf, 0x5e, 0xfd, 0x51, 0x5c, 0xed, 0xca, 0x74, 0x47, 0xf5, 0x3f, 0x93, 0x4f, 0xc7,
0x47, 0xf5, 0xbf, 0x8a, 0x37, 0xd5, 0xa7, 0xe3, 0x83, 0x4e, 0x43, 0xfa, 0x0d, 0xb0, 0xc0, 0x7f,
0x17, 0xaf, 0xca, 0xe8, 0xe3, 0xc7, 0x47, 0xf5, 0xfe, 0x95, 0xd8, 0xf3, 0xd1, 0xbf, 0x01, 0x00,
0x00, 0xff, 0xff, 0xe6, 0x63, 0x18, 0x9d, 0xc9, 0x12, 0x00, 0x00,
// 1429 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x58, 0xdf, 0x72, 0xd3, 0xc6,
0x17, 0xfe, 0x39, 0x04, 0x02, 0xeb, 0x10, 0x7e, 0x2c, 0x09, 0xb8, 0x4e, 0xf3, 0x07, 0xc3, 0x94,
0x50, 0x40, 0xc6, 0xd0, 0xce, 0x74, 0x60, 0xda, 0x82, 0xdd, 0x10, 0xda, 0x3a, 0x1e, 0x8f, 0x0c,
0x29, 0xed, 0x64, 0xca, 0xac, 0xe5, 0x45, 0x56, 0x91, 0x25, 0xa3, 0x5d, 0x27, 0x4e, 0xaf, 0x3a,
0xd3, 0xab, 0xbe, 0x46, 0x6f, 0x3a, 0xd3, 0x37, 0x69, 0x1f, 0xa3, 0x97, 0x7d, 0x8a, 0xce, 0x4a,
0xbb, 0xeb, 0x23, 0xad, 0xec, 0x98, 0xab, 0xd8, 0xe7, 0xfb, 0xce, 0xf7, 0x9d, 0x5d, 0x9d, 0xdd,
0xa3, 0x18, 0xad, 0x45, 0x5e, 0xe0, 0x56, 0x8f, 0x6a, 0x55, 0x46, 0xa3, 0x23, 0xcf, 0xa1, 0xd6,
0x30, 0x0a, 0x79, 0x88, 0x97, 0x44, 0xd8, 0x3a, 0xaa, 0x95, 0xd7, 0xdd, 0x30, 0x74, 0x7d, 0x5a,
0x8d, 0xc3, 0xdd, 0xd1, 0x9b, 0x2a, 0x1d, 0x0c, 0xf9, 0x49, 0xc2, 0x2a, 0x6f, 0xaa, 0xe4, 0x88,
0xbe, 0x1b, 0x51, 0xc6, 0x5f, 0x47, 0x94, 0x0d, 0xc3, 0x80, 0x49, 0x95, 0xf2, 0x86, 0xc2, 0x89,
0xe3, 0x84, 0xa3, 0x40, 0xe0, 0xef, 0x04, 0x47, 0xc2, 0x57, 0xbb, 0x84, 0xd1, 0x24, 0x9d, 0x85,
0xa3, 0x48, 0x99, 0x97, 0x57, 0x55, 0x9c, 0xf2, 0xfe, 0x6b, 0x3e, 0x4e, 0xa2, 0x95, 0x9b, 0x08,
0xdb, 0x89, 0x4d, 0x3d, 0x0a, 0x49, 0xcf, 0x21, 0x8c, 0xbf, 0x18, 0xe3, 0x15, 0xb4, 0xc0, 0xc7,
0xa5, 0xc2, 0x76, 0x61, 0x67, 0xd9, 0x5e, 0xe0, 0xe3, 0xca, 0x6d, 0x74, 0xc5, 0x96, 0x45, 0x40,
0x1a, 0x46, 0x8b, 0x7d, 0xc2, 0xfa, 0x92, 0x18, 0x7f, 0xae, 0x74, 0xd1, 0x46, 0x57, 0x51, 0x76,
0x79, 0xff, 0xc5, 0xf8, 0x3b, 0x8f, 0xf7, 0x9f, 0x45, 0xe1, 0x40, 0xda, 0xe0, 0x7b, 0xe8, 0x2c,
0x15, 0xf1, 0x38, 0xab, 0xf8, 0xe0, 0x9a, 0x25, 0xea, 0xb2, 0x8e, 0x6a, 0x96, 0x60, 0x47, 0x24,
0x60, 0xc4, 0xe1, 0x5e, 0x18, 0xd8, 0x09, 0x4b, 0x78, 0xbc, 0x89, 0xc2, 0x41, 0x69, 0x61, 0xbb,
0xb0, 0x73, 0xc1, 0x8e, 0x3f, 0x57, 0xde, 0xa2, 0x1b, 0xda, 0xa3, 0x49, 0x5d, 0xe2, 0x9c, 0xe4,
0x3a, 0xdd, 0x47, 0xe7, 0x13, 0x54, 0x9b, 0xad, 0x42, 0x33, 0x85, 0xd9, 0x9a, 0x95, 0x6b, 0xf6,
0x09, 0xda, 0x54, 0x6b, 0x07, 0x5e, 0xa7, 0x6d, 0x43, 0x1f, 0xdd, 0xcc, 0x2b, 0x91, 0x65, 0x6b,
0x7c, 0x82, 0x16, 0x7d, 0x8f, 0xf1, 0x52, 0x61, 0xfb, 0xcc, 0x4e, 0xf1, 0xc1, 0x5d, 0x4b, 0x76,
0x88, 0x35, 0xc7, 0xfa, 0xec, 0x38, 0xb3, 0xf2, 0x23, 0xda, 0xca, 0xa9, 0x8f, 0xc1, 0x02, 0x1f,
0xa7, 0x4c, 0x6e, 0x69, 0x93, 0xd9, 0xeb, 0x92, 0xfa, 0x87, 0x68, 0x73, 0xe6, 0x03, 0x65, 0xf8,
0x51, 0x4a, 0xfe, 0x23, 0x73, 0x0d, 0x33, 0xaa, 0x7f, 0x8e, 0x56, 0x73, 0x3a, 0x8b, 0xe1, 0xfb,
0x29, 0xcd, 0x0f, 0x8d, 0x92, 0xcd, 0x3a, 0x2f, 0xa2, 0xa2, 0x94, 0x6e, 0x7b, 0x81, 0x5b, 0x59,
0x41, 0xcb, 0x8a, 0x2b, 0xbe, 0x3f, 0xf8, 0xeb, 0x3a, 0x2a, 0xda, 0x5e, 0xe0, 0x76, 0x92, 0x13,
0x89, 0x1f, 0xa2, 0x45, 0x11, 0xc7, 0xab, 0x40, 0x5a, 0x67, 0x97, 0xd7, 0x0c, 0xc3, 0x98, 0x7c,
0x80, 0x96, 0x53, 0x55, 0xde, 0x9a, 0x6f, 0xad, 0xac, 0xbc, 0x31, 0x6b, 0x01, 0x0c, 0x77, 0x50,
0x11, 0x3e, 0xaf, 0x39, 0xb7, 0xb0, 0x3c, 0x73, 0x5b, 0xf0, 0x4f, 0xe8, 0x72, 0x3d, 0xdd, 0x45,
0x2f, 0xc6, 0xf8, 0xbd, 0x3a, 0xac, 0x3c, 0x6f, 0xab, 0xe0, 0x01, 0xc2, 0x86, 0x17, 0xc3, 0xf7,
0x66, 0x9a, 0x65, 0xcf, 0x42, 0x79, 0x67, 0x96, 0x5b, 0xaa, 0xa1, 0x3f, 0x45, 0x8b, 0x9d, 0x3e,
0x79, 0x08, 0x1e, 0x9e, 0xf8, 0xaa, 0x74, 0xd6, 0x32, 0xd1, 0x44, 0xab, 0xf2, 0x3f, 0xbc, 0x8b,
0x8a, 0xad, 0xb0, 0x47, 0x0f, 0x68, 0xc4, 0xbc, 0x30, 0xc0, 0x57, 0xad, 0xe4, 0x1a, 0xb6, 0xd4,
0x35, 0x6c, 0xed, 0x8a, 0x6b, 0x18, 0x6c, 0x2b, 0x60, 0x03, 0x99, 0x06, 0x42, 0x2d, 0xca, 0x4f,
0x53, 0x59, 0x9f, 0xa8, 0x68, 0x32, 0x10, 0xd9, 0x43, 0xcb, 0x2d, 0xca, 0xdb, 0x94, 0x46, 0x0d,
0x71, 0x89, 0x4f, 0x95, 0xd9, 0x80, 0x32, 0x9a, 0x0e, 0x84, 0xf6, 0xd1, 0xa5, 0xb6, 0x48, 0x71,
0x42, 0xff, 0xb4, 0x92, 0xb6, 0xb5, 0x56, 0x26, 0x03, 0xc8, 0x7d, 0x8e, 0x96, 0x3a, 0x27, 0x81,
0x23, 0xba, 0x7d, 0x9a, 0x4c, 0x69, 0xb2, 0xbf, 0x09, 0x13, 0xa4, 0x7f, 0x89, 0xce, 0x37, 0x42,
0x2f, 0x10, 0xd7, 0xec, 0xd4, 0xfc, 0x0f, 0x74, 0xbe, 0xa2, 0x02, 0x81, 0xc7, 0xe8, 0xdc, 0xbe,
0x17, 0xcc, 0xb2, 0xbf, 0xa6, 0xd3, 0x13, 0x62, 0xda, 0xfd, 0x39, 0x61, 0x7d, 0x9b, 0xf0, 0x79,
0xdc, 0x15, 0x35, 0x2d, 0xf0, 0x34, 0x99, 0xaa, 0x6c, 0x0e, 0x01, 0x45, 0x4d, 0x0b, 0xec, 0x11,
0xd6, 0x8e, 0xc4, 0x15, 0x73, 0xba, 0x80, 0xa2, 0x02, 0x81, 0x27, 0xa8, 0x58, 0xf7, 0x43, 0xe7,
0x6d, 0x6b, 0x34, 0xe8, 0xd2, 0x68, 0x8e, 0x4d, 0x78, 0x4e, 0x3d, 0xb7, 0x0f, 0x1b, 0xe2, 0x1b,
0xa9, 0x50, 0x3f, 0x11, 0x0b, 0xc4, 0x93, 0x3e, 0x04, 0x51, 0xf3, 0x06, 0x49, 0x81, 0x5a, 0xab,
0x8d, 0x2e, 0x4a, 0x40, 0xd6, 0xb3, 0x91, 0x4d, 0x48, 0xe2, 0x4a, 0x6f, 0x73, 0x1a, 0xac, 0x15,
0x7f, 0x46, 0xeb, 0x31, 0x04, 0x46, 0x7d, 0xdc, 0xd1, 0xb2, 0xda, 0x3b, 0x69, 0x81, 0x7c, 0x96,
0x72, 0xbb, 0x3b, 0x1f, 0x59, 0x7b, 0xff, 0x52, 0x40, 0x1b, 0x53, 0x98, 0x72, 0x79, 0xf7, 0x4e,
0x53, 0x4c, 0x2f, 0xd7, 0x9a, 0x97, 0xae, 0x4b, 0xf8, 0x1e, 0xfd, 0xff, 0x65, 0xe0, 0xf8, 0x14,
0xae, 0x79, 0x72, 0x2c, 0xb3, 0x90, 0xf2, 0xb9, 0x3e, 0x83, 0xa1, 0xa5, 0x5f, 0x23, 0x0c, 0x51,
0xb9, 0xa2, 0x4a, 0x6e, 0x6a, 0x7a, 0x19, 0x37, 0x66, 0x72, 0xb4, 0xc1, 0x3b, 0x54, 0x8a, 0xf1,
0xfa, 0x49, 0xbc, 0x5a, 0x61, 0xff, 0x34, 0xe8, 0x7d, 0x1d, 0xf4, 0xe8, 0x18, 0xef, 0xa4, 0x25,
0x72, 0x28, 0xca, 0xec, 0xf6, 0x1c, 0x4c, 0x6d, 0x79, 0x8c, 0xca, 0x90, 0x95, 0x94, 0xa4, 0x4d,
0x3f, 0xce, 0x95, 0x4a, 0x93, 0x94, 0xed, 0x9d, 0xb9, 0xb8, 0xda, 0xf8, 0x2b, 0x74, 0xa1, 0x11,
0x0e, 0x86, 0x9e, 0x4f, 0x23, 0x86, 0xe1, 0x85, 0x25, 0x63, 0x4a, 0xb6, 0x9c, 0x07, 0x69, 0x95,
0x03, 0x74, 0x49, 0x86, 0x3b, 0xa1, 0xef, 0xf5, 0x3c, 0x7e, 0x82, 0xb7, 0xb2, 0x09, 0x0a, 0x51,
0x8a, 0xdb, 0xd3, 0x09, 0x60, 0x78, 0x20, 0x09, 0x36, 0x9b, 0x4d, 0x6c, 0xd4, 0xd0, 0x6c, 0x36,
0x95, 0xda, 0x7a, 0x2e, 0xa6, 0x85, 0x3a, 0x68, 0x45, 0xb9, 0xd0, 0x68, 0x48, 0x03, 0x8e, 0x37,
0x0d, 0xfb, 0x04, 0x50, 0x82, 0x5b, 0x53, 0x71, 0x78, 0x01, 0xed, 0x32, 0xee, 0x0d, 0x08, 0xa7,
0x7b, 0x84, 0x81, 0x0b, 0x08, 0x44, 0xcd, 0x0b, 0x28, 0x05, 0x6a, 0xad, 0x43, 0x74, 0x19, 0x9c,
0x2a, 0x79, 0x60, 0x26, 0xc7, 0xc1, 0xc0, 0x94, 0x6e, 0x65, 0x16, 0x45, 0xab, 0xff, 0x5a, 0x40,
0x9b, 0x29, 0xdc, 0x6c, 0x6c, 0x2b, 0x5f, 0x68, 0x6a, 0x7b, 0x57, 0xe7, 0xe6, 0xeb, 0x2a, 0x7e,
0x2b, 0xa0, 0x6d, 0x93, 0x9c, 0xe9, 0xf5, 0xfb, 0x33, 0x74, 0xf3, 0x3b, 0xbe, 0xf6, 0x1e, 0x19,
0xf0, 0x12, 0x81, 0xff, 0x84, 0x51, 0x87, 0x7a, 0x43, 0x8e, 0x73, 0x77, 0x53, 0x82, 0xe6, 0x25,
0x92, 0xc7, 0xd1, 0x06, 0x5f, 0xa0, 0xa5, 0x3a, 0xf1, 0x49, 0xe0, 0x50, 0x3c, 0x99, 0x61, 0x32,
0xa2, 0xa4, 0x4a, 0x26, 0x00, 0xf3, 0x3b, 0x3c, 0x8c, 0x88, 0x0b, 0xf3, 0x65, 0xc4, 0xcc, 0xd7,
0x80, 0xce, 0xff, 0x0c, 0x9d, 0x6d, 0x85, 0xc2, 0x7d, 0x0d, 0xbc, 0xe5, 0x01, 0xef, 0xab, 0xd9,
0x30, 0x9c, 0x85, 0x36, 0x1d, 0x52, 0xc2, 0x69, 0x2f, 0x51, 0x80, 0x2f, 0xf5, 0x20, 0x6e, 0xce,
0xc2, 0x0c, 0x0c, 0x87, 0x41, 0x76, 0x64, 0x80, 0x61, 0x90, 0x85, 0xcc, 0x61, 0x60, 0x32, 0xe0,
0x36, 0xed, 0x51, 0xde, 0x08, 0x7b, 0x70, 0x9b, 0x64, 0xc4, 0xdc, 0x26, 0x0d, 0xe8, 0x7c, 0xf1,
0x86, 0xed, 0xb9, 0x01, 0x7c, 0xc3, 0xf6, 0xdc, 0x20, 0xe7, 0x0d, 0x3b, 0x8e, 0xc2, 0x0b, 0x4f,
0x44, 0x40, 0x61, 0xe0, 0xc2, 0xcb, 0x20, 0xe6, 0x85, 0x67, 0x10, 0x52, 0xba, 0x34, 0xe8, 0x4d,
0xd1, 0x4d, 0x23, 0x39, 0xba, 0x59, 0x02, 0x6c, 0x77, 0x01, 0xda, 0xe4, 0x18, 0x4a, 0x57, 0x52,
0x99, 0x69, 0xd0, 0x6c, 0xf7, 0x3c, 0x0e, 0xdc, 0xc7, 0x06, 0xf1, 0x7d, 0xb0, 0x8f, 0xe2, 0xab,
0xb9, 0x8f, 0x49, 0x14, 0x8e, 0x9f, 0x16, 0x3d, 0x7e, 0xe6, 0xf9, 0x9c, 0x46, 0x60, 0xfc, 0xe8,
0x98, 0x39, 0x7e, 0x00, 0xa4, 0x55, 0xbe, 0x45, 0x2b, 0x2d, 0x7a, 0x1c, 0x1f, 0x78, 0x29, 0x35,
0xed, 0x75, 0x72, 0x0b, 0xea, 0x80, 0x84, 0xd4, 0x56, 0x95, 0xda, 0x34, 0xe8, 0x79, 0x81, 0x0b,
0x56, 0x7a, 0x8a, 0xec, 0x64, 0xd6, 0x4f, 0x4b, 0x4d, 0x3f, 0xe3, 0x97, 0x81, 0x17, 0x30, 0x4e,
0x7c, 0x5f, 0xea, 0x6e, 0x81, 0xa1, 0x9d, 0x42, 0xcc, 0x67, 0x6c, 0x10, 0xe0, 0xb9, 0x4d, 0x62,
0x8d, 0x3e, 0x09, 0x5c, 0xca, 0xc0, 0xb9, 0x4d, 0xc5, 0xcd, 0x73, 0x9b, 0x81, 0xe1, 0xf8, 0x4d,
0xa0, 0x66, 0xe8, 0x32, 0x30, 0x7e, 0x27, 0x41, 0x73, 0xfc, 0x42, 0x0c, 0x76, 0x47, 0x2c, 0x31,
0xe9, 0x0e, 0x98, 0xbc, 0x96, 0x89, 0xaa, 0xb4, 0xfa, 0x1f, 0x05, 0x54, 0x74, 0xc2, 0x81, 0x82,
0xeb, 0xcb, 0xf2, 0x47, 0x8d, 0xf8, 0xbf, 0xba, 0x76, 0xe1, 0x87, 0x7d, 0xd7, 0xe3, 0xfd, 0x51,
0xd7, 0x72, 0xc2, 0x41, 0xb5, 0x41, 0x7a, 0x23, 0x87, 0x8e, 0xd8, 0x3e, 0xe5, 0xe4, 0x88, 0x46,
0x8c, 0xaa, 0x7f, 0xfd, 0xaa, 0x22, 0xa2, 0xbf, 0xb8, 0x34, 0x48, 0x7e, 0x8d, 0xac, 0xba, 0x61,
0x55, 0xfe, 0xc0, 0xf8, 0x58, 0xfc, 0x3d, 0xaa, 0xfd, 0xbe, 0x70, 0xc6, 0x7e, 0xf5, 0xea, 0xcf,
0x85, 0x25, 0x5b, 0xd8, 0x1d, 0xd4, 0xfe, 0x4e, 0x3e, 0x1d, 0x1e, 0xd4, 0xfe, 0x59, 0xb8, 0x22,
0x3f, 0x1d, 0xee, 0xb5, 0xeb, 0x42, 0xaf, 0x47, 0x38, 0xf9, 0x77, 0xe1, 0xbc, 0x88, 0x3e, 0x7a,
0x74, 0x50, 0xeb, 0x9e, 0x8b, 0x35, 0x1f, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0x9e, 0x6c, 0x66,
0x91, 0x11, 0x15, 0x00, 0x00,
}
......@@ -24,9 +24,11 @@ const _ = grpc.SupportPackageIsVersion7
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type RingServiceClient interface {
Ping(ctx context.Context, in *RequestPing, opts ...grpc.CallOption) (*ResponsePing, error)
// rpc BroadcastTx(RequestBroadcastTx) returns (ResponseBroadcastTx);
//rpc BroadcastTx(RequestBroadcastTx) returns (ResponseBroadcastTx);
BroadcastTxs(ctx context.Context, in *BroadcastEthTxWithFromRequests, opts ...grpc.CallOption) (*ResponseBroadcastTxs, error)
BroadcastTx(ctx context.Context, in *BroadcastEthTxWithFromRequest, opts ...grpc.CallOption) (*ResponseBroadcastTx, error)
BroadcastLegacyTx(ctx context.Context, in *BroadcastLegacyEthTxWithFromRequest, opts ...grpc.CallOption) (*ResponseLegacyEthTxBroadcastTx, error)
BroadcastLegacyTxs(ctx context.Context, in *BroadcastLegacyEthTxsWithFromRequest, opts ...grpc.CallOption) (*ResponseLegacyEthTxsBroadcastTx, error)
// web3
Sha3(ctx context.Context, in *Sha3Request, opts ...grpc.CallOption) (*Sha3Response, error)
NodeVersion(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*NodeVersionResponse, error)
......@@ -120,6 +122,24 @@ func (c *ringServiceClient) BroadcastTx(ctx context.Context, in *BroadcastEthTxW
return out, nil
}
func (c *ringServiceClient) BroadcastLegacyTx(ctx context.Context, in *BroadcastLegacyEthTxWithFromRequest, opts ...grpc.CallOption) (*ResponseLegacyEthTxBroadcastTx, error) {
out := new(ResponseLegacyEthTxBroadcastTx)
err := c.cc.Invoke(ctx, "/ring.v1.RingService/BroadcastLegacyTx", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *ringServiceClient) BroadcastLegacyTxs(ctx context.Context, in *BroadcastLegacyEthTxsWithFromRequest, opts ...grpc.CallOption) (*ResponseLegacyEthTxsBroadcastTx, error) {
out := new(ResponseLegacyEthTxsBroadcastTx)
err := c.cc.Invoke(ctx, "/ring.v1.RingService/BroadcastLegacyTxs", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *ringServiceClient) Sha3(ctx context.Context, in *Sha3Request, opts ...grpc.CallOption) (*Sha3Response, error) {
out := new(Sha3Response)
err := c.cc.Invoke(ctx, "/ring.v1.RingService/Sha3", in, out, opts...)
......@@ -548,9 +568,11 @@ func (c *ringServiceClient) Logs(ctx context.Context, in *LogsRequest, opts ...g
// for forward compatibility
type RingServiceServer interface {
Ping(context.Context, *RequestPing) (*ResponsePing, error)
// rpc BroadcastTx(RequestBroadcastTx) returns (ResponseBroadcastTx);
//rpc BroadcastTx(RequestBroadcastTx) returns (ResponseBroadcastTx);
BroadcastTxs(context.Context, *BroadcastEthTxWithFromRequests) (*ResponseBroadcastTxs, error)
BroadcastTx(context.Context, *BroadcastEthTxWithFromRequest) (*ResponseBroadcastTx, error)
BroadcastLegacyTx(context.Context, *BroadcastLegacyEthTxWithFromRequest) (*ResponseLegacyEthTxBroadcastTx, error)
BroadcastLegacyTxs(context.Context, *BroadcastLegacyEthTxsWithFromRequest) (*ResponseLegacyEthTxsBroadcastTx, error)
// web3
Sha3(context.Context, *Sha3Request) (*Sha3Response, error)
NodeVersion(context.Context, *emptypb.Empty) (*NodeVersionResponse, error)
......@@ -623,6 +645,12 @@ func (UnimplementedRingServiceServer) BroadcastTxs(context.Context, *BroadcastEt
func (UnimplementedRingServiceServer) BroadcastTx(context.Context, *BroadcastEthTxWithFromRequest) (*ResponseBroadcastTx, error) {
return nil, status.Errorf(codes.Unimplemented, "method BroadcastTx not implemented")
}
func (UnimplementedRingServiceServer) BroadcastLegacyTx(context.Context, *BroadcastLegacyEthTxWithFromRequest) (*ResponseLegacyEthTxBroadcastTx, error) {
return nil, status.Errorf(codes.Unimplemented, "method BroadcastLegacyTx not implemented")
}
func (UnimplementedRingServiceServer) BroadcastLegacyTxs(context.Context, *BroadcastLegacyEthTxsWithFromRequest) (*ResponseLegacyEthTxsBroadcastTx, error) {
return nil, status.Errorf(codes.Unimplemented, "method BroadcastLegacyTxs not implemented")
}
func (UnimplementedRingServiceServer) Sha3(context.Context, *Sha3Request) (*Sha3Response, error) {
return nil, status.Errorf(codes.Unimplemented, "method Sha3 not implemented")
}
......@@ -831,6 +859,42 @@ func _RingService_BroadcastTx_Handler(srv interface{}, ctx context.Context, dec
return interceptor(ctx, in, info, handler)
}
func _RingService_BroadcastLegacyTx_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(BroadcastLegacyEthTxWithFromRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(RingServiceServer).BroadcastLegacyTx(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/ring.v1.RingService/BroadcastLegacyTx",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(RingServiceServer).BroadcastLegacyTx(ctx, req.(*BroadcastLegacyEthTxWithFromRequest))
}
return interceptor(ctx, in, info, handler)
}
func _RingService_BroadcastLegacyTxs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(BroadcastLegacyEthTxsWithFromRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(RingServiceServer).BroadcastLegacyTxs(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/ring.v1.RingService/BroadcastLegacyTxs",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(RingServiceServer).BroadcastLegacyTxs(ctx, req.(*BroadcastLegacyEthTxsWithFromRequest))
}
return interceptor(ctx, in, info, handler)
}
func _RingService_Sha3_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Sha3Request)
if err := dec(in); err != nil {
......@@ -1696,6 +1760,14 @@ var RingService_ServiceDesc = grpc.ServiceDesc{
MethodName: "BroadcastTx",
Handler: _RingService_BroadcastTx_Handler,
},
{
MethodName: "BroadcastLegacyTx",
Handler: _RingService_BroadcastLegacyTx_Handler,
},
{
MethodName: "BroadcastLegacyTxs",
Handler: _RingService_BroadcastLegacyTxs_Handler,
},
{
MethodName: "Sha3",
Handler: _RingService_Sha3_Handler,
......
......@@ -8,6 +8,13 @@ require (
google.golang.org/protobuf v1.28.1
)
require (
github.com/ghodss/yaml v1.0.0 // indirect
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect
github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
)
require (
github.com/CaduceusMetaverseProtocol/MetaTypes v1.0.0
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
......
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8=
github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k=
github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU=
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0=
github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/ethereum/go-ethereum v1.10.26 h1:i/7d9RBBwiXCEuyduBQzJw/mKmnvzsN14jqBmytw72s=
github.com/ethereum/go-ethereum v1.10.26/go.mod h1:EYFyF19u3ezGLD4RqOkLq+ZCXzYbLoNDdZlMt7kyKFg=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU=
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY=
github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4=
......@@ -41,22 +67,39 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/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-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw=
golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
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/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
......@@ -69,6 +112,10 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k=
golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
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-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
......@@ -78,11 +125,27 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20221205194025-8222ab48f5fc h1:nUKKji0AarrQKh6XpFEpG3p1TNztxhe7C8TcUvDgXqw=
google.golang.org/genproto v0.0.0-20221205194025-8222ab48f5fc/go.mod h1:1dOng4TWOomJrDGhpXjfCD35wQC6jnC7HpRmOFRqEV0=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U=
google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
......@@ -133,25 +133,22 @@ message NonceResponse {
uint64 nonce = 3;
}
message RepeatedNonceRequest {
// request address
repeated base.v1.Address address = 1[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address"];
repeated bytes address = 1;
// request block number
repeated base.v1.BigInt block_id = 2[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt"];
repeated bytes block_id = 2;
}
message RepeatedNonceResponse {
// request address
repeated base.v1.Address address = 1[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address"];
// request block number
repeated base.v1.BigInt block_id = 2[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt"];
// the address
repeated bytes address = 1;
// block height
repeated bytes block_id = 2;
// nonce
repeated uint64 nonce = 3;
}
message TransactionCountRequest {
// request address
base.v1.Address address = 1[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address"];
......
......@@ -136,18 +136,25 @@ message NonceResponse {
message RepeatedNonceRequest {
// request address
repeated base.v1.Address address = 1[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address"];
// repeated base.v1.Address address = 1[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address"];
//repeated bytes addresses =1;
// request block number
repeated base.v1.BigInt block_id = 2[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt"];
//repeated base.v1.BigInt block_id = 2[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt"];
repeated NonceRequest list=1;
}
message RepeatedNonceResponse {
// request address
repeated base.v1.Address address = 1[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address"];
// request block number
repeated base.v1.BigInt block_id = 2[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt"];
// nonce
repeated uint64 nonce = 3;
//repeated base.v1.Address address = 1[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.Address"];
// repeated bytes addresses =1;
// // request block number
// repeated base.v1.BigInt block_id = 2[(gogoproto.customtype) = "github.com/CaduceusMetaverseProtocol/MetaTypes/types.BigInt"];
// // nonce
// repeated uint64 nonce = 3;
repeated NonceResponse list=1;
}
......
......@@ -11,18 +11,63 @@ import "base/v1/eth_tx.proto";
message RequestBroadcastTx {
bytes tx = 1;
}
message ResponseBroadcastTx {
bytes hash =1;
}
message broadcastEthTxWithFromRequest{
base.v1.EthTransaction ethTx =1;
string from =2;
}
message broadcastLegacyEthTxWithFromRequest{
base.v1.EthLegacyTx LegacyTx =1;
string from =2;
}
message ResponseLegacyEthTxBroadcastTx {
bytes hash =1;
}
message broadcastLegacyEthTxsWithFromRequest{
repeated broadcastLegacyEthTxWithFromRequest list =1;
}
message ResponseLegacyEthTxsBroadcastTx {
repeated ResponseLegacyEthTxBroadcastTx list=1;
}
message broadcastEthTxWithFromRequests{
repeated broadcastEthTxWithFromRequest list =1;
}
message ResponseBroadcastTxs{
repeated ResponseBroadcastTx list =1;
}
service RingService{
rpc Ping(RequestPing) returns (ResponsePing);
//rpc BroadcastTx(RequestBroadcastTx) returns (ResponseBroadcastTx);
rpc BroadcastTxs(broadcastEthTxWithFromRequests) returns (ResponseBroadcastTxs);
rpc BroadcastTx(broadcastEthTxWithFromRequest) returns (ResponseBroadcastTx);
rpc BroadcastLegacyTx(broadcastLegacyEthTxWithFromRequest) returns (ResponseLegacyEthTxBroadcastTx);
rpc BroadcastLegacyTxs(broadcastLegacyEthTxsWithFromRequest) returns (ResponseLegacyEthTxsBroadcastTx);
// web3
rpc Sha3(Sha3Request) returns (Sha3Response) {};
......@@ -100,10 +145,3 @@ message RequestPing {}
message ResponsePing {}
message RequestBroadcastTx {
bytes tx = 1;
}
message ResponseBroadcastTx {
bytes hash =1;
}
\ No newline at end of file
......@@ -2,7 +2,8 @@
"receiveAddr": "0x0Fb196385c8826e3806ebA2cA2cb78B26E08fEEe",
"count": 100,
"type": 1,
"rpcNode": "54.168.125.67:8545",
"rpcNode": "54.168.125.67:5001",
"grpcNode": "18.183.99.139:38002",
"amount": 10000000,
"chainId": 100,
"initAccountPrv": "FD5CC6F5E7E2805E920AC5DC83D5AF1106F9C92F0C04F9D5E1FD4261B4B4464A",
......
......@@ -22,7 +22,7 @@ func init() {
startCmd.PersistentFlags().StringVar(&cpuProfile, "cpuProfile", "cpuProfile.prof", "Statistics cpu profile")
startCmd.PersistentFlags().IntVar(&startCount, "startCount", 0, "read excel start count")
startCmd.PersistentFlags().IntVar(&endCount, "endCount", 100, "read excel end count")
startCmd.PersistentFlags().BoolVar(&broadcastTxArr, "broadcastTxArr", false, "test grpc interface -> broadcastTxArr")
startCmd.PersistentFlags().BoolVar(&broadcastTxArr, "broadcastTxArr", true, "test grpc interface -> broadcastTxArr")
startCmd.PersistentFlags().IntVar(&txCount, "txCount", 1000, "send tran count")
startCmd.PersistentFlags().IntVar(&goRoutineCount, "goRoutineCount", 10, "send tran goRoutine count")
startCmd.PersistentFlags().IntVar(&batchCount, "batchCount", 100, "batch send tran count")
......
......@@ -4,13 +4,13 @@ import (
"ChainGrpcTest/log"
"ChainGrpcTest/tool"
"ChainGrpcTest/transaction"
"github.com/ethereum/go-ethereum/core/types"
basev1 "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/base/v1"
"sync"
)
var (
SendTxAccountArr [][]string
tranArrChan chan []*types.Transaction
tranArrChan chan []*basev1.MetaTxBase
)
func init() {
......@@ -21,7 +21,7 @@ func init() {
return
}
cfg.StorageAccFileName += ".xlsx"
tranArrChan = make(chan []*types.Transaction, 10000)
tranArrChan = make(chan []*basev1.MetaTxBase, 10000)
}
func startTest() {
......@@ -49,7 +49,8 @@ func startTest() {
}()
for {
log.Info("----------------------------------start")
arr := transaction.SignedTxArr(syncMap, SendTxAccountArr, cfg)
//arr := transaction.SignedTxArr(syncMap, SendTxAccountArr, cfg)
arr := transaction.GrpcSignedTxArr(syncMap, SendTxAccountArr, cfg)
log.Info("----------------------------------end")
tranArrChan <- arr
syncMap = updateNonce(syncMap, cfg)
......
......@@ -15,6 +15,7 @@ type Config struct {
GoRoutineCount int `json:"goRoutineCount"`
Type int `json:"type"`
RpcNode string `json:"rpcNode"`
GrpcNode string `json:"grpcNode"`
Amount int64 `json:"amount"`
ChainId int64 `json:"chainId"`
InitAccountPrv string `json:"initAccountPrv"`
......
......@@ -3,12 +3,9 @@ package transaction
import (
"ChainGrpcTest/log"
"ChainGrpcTest/tool"
"ChainGrpcTest/txcache"
"context"
v1 "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/base/v1"
ring "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/ring/v1"
metatypes "github.com/CaduceusMetaverseProtocol/MetaTypes/types"
"github.com/ethereum/go-ethereum/core/types"
gogotypes "github.com/gogo/protobuf/types"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
......@@ -25,7 +22,7 @@ func init() {
broadcastEthTxWithFromRequestsArr = make(chan *ring.BroadcastEthTxWithFromRequests, 1000000)
}
func BroadcastTxArr(tranArr []*types.Transaction, cfg *tool.Config) error {
func BroadcastTxArr(tranArr []*v1.MetaTxBase, cfg *tool.Config) error {
client, err := grpc.Dial(cfg.RpcNode, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
return err
......@@ -44,9 +41,7 @@ func BroadcastTxArr(tranArr []*types.Transaction, cfg *tool.Config) error {
if err != nil {
log.Error("gogo types.MarshalAny error:", err)
}
fromAddr, _ := txcache.GetFromAddr(tranArr[i].Hash().Hex())
request := ring.BroadcastEthTxWithFromRequest{
From: fromAddr,
EthTx: &v1.EthTransaction{Tx: ethTxAsAny},
}
ethTxArr = append(ethTxArr, &request)
......@@ -92,25 +87,17 @@ func broadcastTx(cfg *tool.Config, client ring.RingServiceClient) error {
}
}
func constructionEthLegacyTx(tran *types.Transaction) v1.EthLegacyTx {
v, r, s := tran.RawSignatureValues()
toAddr := metatypes.BytesToAddress(tran.To().Bytes())
nv := metatypes.NewBigInt(0)
nv.Set(v)
nr := metatypes.NewBigInt(0)
nr.Set(r)
ns := metatypes.NewBigInt(0)
ns.Set(s)
func constructionEthLegacyTx(tran *v1.MetaTxBase) v1.EthLegacyTx {
rawTx := v1.EthLegacyTx{
Nonce: tran.Nonce(),
GasPrice: metatypes.NewBigInt(tran.GasPrice().Int64()),
Gas: tran.Gas(),
To: &toAddr,
Value: metatypes.NewBigInt(tran.Value().Int64()),
Data: tran.Data(),
V: nv,
R: nr,
S: ns,
Nonce: tran.Nonce,
GasPrice: tran.GasPrice,
Gas: tran.Gas,
To: tran.To,
Value: tran.Value,
Data: tran.Data,
V: tran.V,
R: tran.R,
S: tran.S,
}
return rawTx
}
......@@ -6,15 +6,16 @@ import (
"ChainGrpcTest/txcache"
"context"
"crypto/ecdsa"
ring "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/ring/v1"
basev1 "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/base/v1"
crypterv1 "github.com/CaduceusMetaverseProtocol/MetaProtocol/gen/proto/go/crypter/v1"
metatypes "github.com/CaduceusMetaverseProtocol/MetaTypes/types"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"math/big"
"net"
"strconv"
"strings"
"sync"
"sync/atomic"
......@@ -41,11 +42,20 @@ type SignTranArr struct {
mux sync.RWMutex
}
type GrpcSignTranArr struct {
TranArr []*basev1.MetaTxBase
mux sync.RWMutex
}
var (
tran = make(chan *Transactor, 0)
grpcTran = make(chan *crypterv1.BatchSignTxRequest, 0)
signTranArr = &SignTranArr{
TranArr: make([]*types.Transaction, 0),
}
grpcSignTranArr = &GrpcSignTranArr{
TranArr: make([]*basev1.MetaTxBase, 0),
}
batchSignCount, handleNonceCount int32
)
......@@ -97,26 +107,26 @@ func InitAccNonce(sendTxAccountArr [][]string, cfg *tool.Config) (error, sync.Ma
return err, sync.Map{}
}
defer client.Close()
serviceClient := ring.NewRingServiceClient(client)
//serviceClient := ring.NewRingServiceClient(client)
for i := 0; i < cfg.GoRoutineCount; i++ {
go func() {
for {
select {
case sendTxAccount := <-rowsCh:
addressRow := sendTxAccount[0]
//addressRow := sendTxAccount[0]
privateKey := sendTxAccount[1]
fromAddr := metatypes.HexToAddress(addressRow)
nonceReq := &ring.NonceRequest{
Address: (*metatypes.Address)(fromAddr.Bytes()),
}
ctx, cancel := context.WithTimeout(context.Background(), time.Second*20)
defer cancel()
response, err := serviceClient.Nonce(ctx, nonceReq)
//fromAddr := metatypes.HexToAddress(addressRow)
//nonceReq := &ring.NonceRequest{
// Address: (*metatypes.Address)(fromAddr.Bytes()),
//}
//ctx, cancel := context.WithTimeout(context.Background(), time.Second*20)
//defer cancel()
//response, err := serviceClient.Nonce(ctx, nonceReq)
if err != nil {
log.Error("get account nonce error:", err)
}
intNum, _ := strconv.Atoi(strconv.FormatUint(response.Nonce, 10))
accountsNonceMap.Store(privateKey, intNum)
//intNum, _ := strconv.Atoi(strconv.FormatUint(response.Nonce, 10))
accountsNonceMap.Store(privateKey, 0)
atomic.AddInt32(&handleNonceCount, 1)
}
}
......@@ -206,6 +216,92 @@ func signedTxFunc() (*types.Transaction, error) {
}
}
// GrpcSignedTxArr 获取全部签名数据
func GrpcSignedTxArr(syncMap sync.Map, sendTxAccountArr [][]string, cfg *tool.Config) []*basev1.MetaTxBase {
client, err := grpc.Dial(cfg.GrpcNode, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
log.Error("dial nebula failed", "err", err)
}
serviceClient := crypterv1.NewCrypterServiceClient(client)
for i := 0; i < cfg.GoRoutineCount; i++ {
go grpcSignedTxFunc(serviceClient)
}
for _, rows := range sendTxAccountArr {
fromAddr := rows[0]
privateKey := rows[1]
value, ok := syncMap.Load(privateKey)
if !ok {
log.Error("Load nonce map error...........")
continue
}
nonce := new(big.Int).SetInt64(int64(value.(int)))
log.Infof("from addr:%s,nonce:%d", fromAddr, nonce)
rawTxArr := make([]*basev1.MetaTxBase, 0)
prv, err := crypto.HexToECDSA(privateKey)
if err != nil {
return nil
}
for signCount := 0; signCount < cfg.SignCount; signCount++ {
toAddress := metatypes.HexToAddress(cfg.ReceiveAddr)
base := &basev1.MetaTxBase{
ChainId: metatypes.NewBigInt(cfg.ChainId),
Nonce: nonce.Uint64(),
GasPrice: metatypes.NewBigInt(1000000001),
Gas: metatypes.NewBigInt(300000).Uint64(),
To: &toAddress,
Value: metatypes.NewBigInt(cfg.Amount),
Data: nil,
}
rawTxArr = append(rawTxArr, base)
if err != nil {
log.Errorf("signed tx error %s ", err)
continue
}
nonce = big.NewInt(1).Add(nonce, big.NewInt(1))
}
requestMetaTx := crypterv1.BatchSignTxRequest{
RawTx: rawTxArr,
Private: prv.D.Bytes(),
}
grpcTran <- &requestMetaTx
}
for {
if len(sendTxAccountArr)*cfg.SignCount == int(batchSignCount) && len(grpcSignTranArr.TranArr) == len(sendTxAccountArr)*cfg.SignCount {
batchSignCount = 0
newTranArr := make([]*basev1.MetaTxBase, 0)
for _, tran := range grpcSignTranArr.TranArr {
newTranArr = append(newTranArr, tran)
}
grpcSignTranArr.TranArr = make([]*basev1.MetaTxBase, 0)
return newTranArr
}
}
}
// grpcSignedTxFunc 签名本币转账交易
func grpcSignedTxFunc(client crypterv1.CrypterServiceClient) (*types.Transaction, error) {
for {
select {
case t := <-grpcTran:
tx, err := client.BatchSignTx(context.Background(), t)
if err != nil {
return nil, err
}
AddGrpcTran(tx.GetSignedTx())
}
}
}
func AddGrpcTran(grpcSignTx []*basev1.MetaTxBase) {
grpcSignTranArr.mux.Lock()
defer grpcSignTranArr.mux.Unlock()
for _, txBase := range grpcSignTx {
grpcSignTranArr.TranArr = append(grpcSignTranArr.TranArr, txBase)
atomic.AddInt32(&batchSignCount, 1)
}
}
func Add(signedTx *types.Transaction) {
signTranArr.mux.Lock()
defer signTranArr.mux.Unlock()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment