From 832131cb0e12b6645c7452b0c6c74cd4814c39ee Mon Sep 17 00:00:00 2001 From: Artem Date: Wed, 6 Oct 2021 14:28:12 +0300 Subject: [PATCH] Fix: restore and ethereum websocket disconnetct --- cmd/watch_tower/config.test.yml | 2 +- cmd/watch_tower/swap.go | 57 +++++- cmd/watch_tower/watch_tower.go | 178 ++++++++++-------- go.mod | 1 + go.sum | 104 ----------- internal/chain/chain.go | 140 ++++++++++++-- internal/chain/ethereum/chain.go | 303 ++++++++++++++++--------------- internal/chain/hex.go | 7 +- internal/chain/tezos/chain.go | 204 ++++++++++----------- 9 files changed, 533 insertions(+), 463 deletions(-) diff --git a/cmd/watch_tower/config.test.yml b/cmd/watch_tower/config.test.yml index ff03192..7eb1cb5 100644 --- a/cmd/watch_tower/config.test.yml +++ b/cmd/watch_tower/config.test.yml @@ -13,7 +13,7 @@ ethereum: erc20_address: 0x189737A901f57Fc52640F9B96E61019981C6c1eb user_address: 0x5660A5b91E41033304cB98c8e4895dCd086EC08b min_payoff: "0" -restore: false +restore: true types: - redeem - refund diff --git a/cmd/watch_tower/swap.go b/cmd/watch_tower/swap.go index 1dc080e..bae5653 100644 --- a/cmd/watch_tower/swap.go +++ b/cmd/watch_tower/swap.go @@ -11,7 +11,6 @@ import ( type Swap struct { HashedSecret chain.Hex Secret chain.Hex - Contract string Status Status RefundTime time.Time Initiator Leg @@ -22,8 +21,7 @@ type Swap struct { // NewSwap - func NewSwap(event chain.Event) *Swap { return &Swap{ - HashedSecret: event.HashedSecret, - Contract: event.Contract, + HashedSecret: event.HashedSecret(), Status: StatusEmpty, } } @@ -39,7 +37,7 @@ func (swap *Swap) log() { // FromInitEvent - func (swap *Swap) FromInitEvent(event chain.InitEvent) { - if swap.HashedSecret != event.HashedSecret { + if swap.HashedSecret != event.HashedSecret() { return } @@ -50,20 +48,25 @@ func (swap *Swap) FromInitEvent(event chain.InitEvent) { swap.Initiator = Leg{ ChainType: event.Chain, Address: event.Initiator, + Contract: event.ContractAddress, + Status: StatusInitiated, } swap.Acceptor = Leg{ - Address: event.Initiator, + Address: event.Participant, + Status: StatusEmpty, } swap.Status = StatusInitiatedOnce case StatusInitiatedOnce: swap.Acceptor.ChainType = event.Chain + swap.Acceptor.Contract = event.ContractAddress + swap.Acceptor.Status = StatusInitiated swap.Status = StatusInitiated } } // FromRedeemEvent - func (swap *Swap) FromRedeemEvent(event chain.RedeemEvent) { - if swap.HashedSecret != event.HashedSecret { + if swap.HashedSecret != event.HashedSecret() { return } if swap.Secret == "" { @@ -76,11 +79,18 @@ func (swap *Swap) FromRedeemEvent(event chain.RedeemEvent) { case StatusRedeemedOnce: swap.Status = StatusRedeemed } + + if swap.Acceptor.Contract == event.ContractAddress && swap.Acceptor.ChainType == event.Chain { + swap.Acceptor.Status = StatusRedeemed + } + if swap.Initiator.Contract == event.ContractAddress && swap.Initiator.ChainType == event.Chain { + swap.Initiator.Status = StatusRedeemed + } } // FromRefundEvent - func (swap *Swap) FromRefundEvent(event chain.RefundEvent) { - if swap.HashedSecret != event.HashedSecret { + if swap.HashedSecret != event.HashedSecret() { return } switch swap.Status { @@ -89,12 +99,45 @@ func (swap *Swap) FromRefundEvent(event chain.RefundEvent) { case StatusRefundedOnce: swap.Status = StatusRefunded } + + if swap.Acceptor.Contract == event.ContractAddress && swap.Acceptor.ChainType == event.Chain { + swap.Acceptor.Status = StatusRefunded + } + if swap.Initiator.Contract == event.ContractAddress && swap.Initiator.ChainType == event.Chain { + swap.Initiator.Status = StatusRefunded + } +} + +// Leg - +func (swap *Swap) Leg() *Leg { + if swap.Acceptor.ChainType == chain.ChainTypeUnknown || swap.Initiator.ChainType == chain.ChainTypeUnknown { + return nil + } + + if swap.Acceptor.IsFinished() && swap.Initiator.IsFinished() { + return nil + } + + switch { + case swap.Acceptor.Status > swap.Initiator.Status: + return &swap.Initiator + case swap.Acceptor.Status < swap.Initiator.Status: + return &swap.Acceptor + } + return nil } // Leg - type Leg struct { ChainType chain.ChainType Address string + Contract string + Status Status +} + +// IsFinished - +func (leg Leg) IsFinished() bool { + return leg.Status == StatusRedeemed || leg.Status == StatusRefunded } // Status - diff --git a/cmd/watch_tower/watch_tower.go b/cmd/watch_tower/watch_tower.go index b6df56b..dd0bab0 100644 --- a/cmd/watch_tower/watch_tower.go +++ b/cmd/watch_tower/watch_tower.go @@ -2,6 +2,7 @@ package main import ( "sync" + "sync/atomic" "time" "github.com/atomex-protocol/watch_tower/internal/chain" @@ -12,6 +13,10 @@ import ( "github.com/rs/zerolog/log" ) +const ( + chainsCount = 2 +) + // WatchTower - type WatchTower struct { tezos *tezos.Tezos @@ -24,10 +29,10 @@ type WatchTower struct { needRefund bool retryCount uint - restoring bool - stopped bool - stop chan struct{} - wg sync.WaitGroup + restoreCounter int32 + stopped bool + stop chan struct{} + wg sync.WaitGroup } // NewWatchTower - @@ -64,13 +69,11 @@ func NewWatchTower(cfg config.Config) (*WatchTower, error) { // Run - func (wt *WatchTower) Run(restore bool) error { - log.Info().Str("blockchain", "tezos").Msg("running...") - if err := wt.tezos.Run(); err != nil { + if err := wt.tezos.Init(); err != nil { return err } - log.Info().Str("blockchain", "ethereum").Msg("running...") - if err := wt.ethereum.Run(); err != nil { + if err := wt.ethereum.Init(); err != nil { return err } @@ -81,17 +84,22 @@ func (wt *WatchTower) Run(restore bool) error { if err := wt.restore(); err != nil { return err } + } else { + wt.restoreCounter = chainsCount + } + + if err := wt.tezos.Run(); err != nil { + return err + } + + if err := wt.ethereum.Run(); err != nil { + return err } return nil } func (wt *WatchTower) restore() error { - defer func() { - wt.restoring = false - }() - wt.restoring = true - if err := wt.tezos.Restore(); err != nil { return err } @@ -100,8 +108,6 @@ func (wt *WatchTower) restore() error { return err } - time.Sleep(time.Second * 30) - return nil } @@ -126,7 +132,7 @@ func (wt *WatchTower) Close() error { func (wt *WatchTower) listen() { defer wt.wg.Done() - ticker := time.NewTicker(time.Second * 15) + ticker := time.NewTicker(time.Minute) defer ticker.Stop() for { @@ -135,17 +141,9 @@ func (wt *WatchTower) listen() { return // Tezos - case event := <-wt.tezos.InitEvents(): - if err := wt.onInit(event); err != nil { - log.Err(err).Msg("onInit") - } - case event := <-wt.tezos.RedeemEvents(): - if err := wt.onRedeem(event); err != nil { - log.Err(err).Msg("onRedeem") - } - case event := <-wt.tezos.RefundEvents(): - if err := wt.onRefund(event); err != nil { - log.Err(err).Msg("onRefund") + case event := <-wt.tezos.Events(): + if err := wt.onEvent(event); err != nil { + log.Err(err).Msg("onEvent") } case operation := <-wt.tezos.Operations(): if err := wt.processOperation(operation); err != nil { @@ -153,17 +151,9 @@ func (wt *WatchTower) listen() { } // Ethereum - case event := <-wt.ethereum.InitEvents(): - if err := wt.onInit(event); err != nil { - log.Err(err).Msg("onInit") - } - case event := <-wt.ethereum.RedeemEvents(): - if err := wt.onRedeem(event); err != nil { - log.Err(err).Msg("onRedeem") - } - case event := <-wt.ethereum.RefundEvents(): - if err := wt.onRefund(event); err != nil { - log.Err(err).Msg("onRefund") + case event := <-wt.ethereum.Events(): + if err := wt.onEvent(event); err != nil { + log.Err(err).Msg("onEvent") } case operation := <-wt.ethereum.Operations(): if err := wt.processOperation(operation); err != nil { @@ -177,29 +167,58 @@ func (wt *WatchTower) listen() { } } +func (wt *WatchTower) onEvent(event chain.Event) error { + switch e := event.(type) { + case chain.InitEvent: + if err := wt.onInit(e); err != nil { + return errors.Wrap(err, "onInit") + } + case chain.RedeemEvent: + if err := wt.onRedeem(e); err != nil { + return errors.Wrap(err, "onRedeem") + } + case chain.RefundEvent: + if err := wt.onRefund(e); err != nil { + return errors.Wrap(err, "onRefund") + } + case chain.RestoredEvent: + atomic.AddInt32(&wt.restoreCounter, 1) + log.Info().Str("blockchain", e.Chain.String()).Msg("restored") + + if wt.restoreCounter == chainsCount { + for i := range wt.swaps { + if err := wt.processSwap(wt.swaps[i]); err != nil { + return err + } + } + } + } + return nil +} + func (wt *WatchTower) onInit(event chain.InitEvent) error { - swap := wt.getSwap(event.Event) + swap := wt.getSwap(event) swap.FromInitEvent(event) return wt.processSwap(swap) } func (wt *WatchTower) onRedeem(event chain.RedeemEvent) error { - swap := wt.getSwap(event.Event) + swap := wt.getSwap(event) swap.FromRedeemEvent(event) return wt.processSwap(swap) } func (wt *WatchTower) onRefund(event chain.RefundEvent) error { - swap := wt.getSwap(event.Event) + swap := wt.getSwap(event) swap.FromRefundEvent(event) return wt.processSwap(swap) } func (wt *WatchTower) getSwap(event chain.Event) *Swap { - s, ok := wt.swaps[event.HashedSecret] + s, ok := wt.swaps[event.HashedSecret()] if !ok { s = NewSwap(event) - wt.swaps[event.HashedSecret] = s + wt.swaps[event.HashedSecret()] = s } return s } @@ -229,7 +248,7 @@ func (wt *WatchTower) processSwap(swap *Swap) error { } func (wt *WatchTower) checkRefundTime() { - if !wt.needRefund || wt.restoring { + if !wt.needRefund || wt.restoreCounter < chainsCount { return } @@ -239,61 +258,64 @@ func (wt *WatchTower) checkRefundTime() { } if swap.RefundTime.UTC().Before(time.Now().UTC()) { if err := wt.refund(swap); err != nil { - log.Err(err).Msg("checkRefundTime") + log.Err(err).Msg("refund") continue } delete(wt.swaps, hashedSecret) - time.Sleep(time.Second) } } } func (wt *WatchTower) redeem(swap *Swap) error { - if swap.Acceptor.ChainType == chain.ChainTypeUnknown { - swap.RetryCount = wt.retryCount - delete(wt.swaps, swap.HashedSecret) + if wt.restoreCounter < chainsCount { return nil } - if wt.restoring { - return nil + if leg := swap.Leg(); leg != nil { + swap.RetryCount++ + switch leg.ChainType { + case chain.ChainTypeEthereum: + if err := wt.ethereum.Redeem(swap.HashedSecret, swap.Secret, leg.Contract); err != nil { + return err + } + time.Sleep(time.Second) + case chain.ChainTypeTezos: + if err := wt.tezos.Redeem(swap.HashedSecret, swap.Secret, leg.Contract); err != nil { + return err + } + time.Sleep(time.Second) + default: + return errors.Errorf("unknown chain type: %v", leg.ChainType) + } } - log.Info().Str("hashed_secret", swap.HashedSecret.String()).Str("blockchain", swap.Initiator.ChainType.String()).Msg("redeem") - - swap.RetryCount++ - switch swap.Initiator.ChainType { - case chain.ChainTypeEthereum: - return wt.ethereum.Redeem(swap.HashedSecret, swap.Secret, swap.Contract) - case chain.ChainTypeTezos: - return wt.tezos.Redeem(swap.HashedSecret, swap.Secret, swap.Contract) - default: - return errors.Errorf("unknown chain type: %v", swap.Initiator.ChainType) - } + return nil } func (wt *WatchTower) refund(swap *Swap) error { - if swap.Acceptor.ChainType == chain.ChainTypeUnknown { - swap.RetryCount = wt.retryCount - delete(wt.swaps, swap.HashedSecret) + if wt.restoreCounter < chainsCount { return nil } - if wt.restoring { - return nil + if leg := swap.Leg(); leg != nil { + swap.RetryCount++ + switch leg.ChainType { + case chain.ChainTypeEthereum: + if err := wt.ethereum.Refund(swap.HashedSecret, leg.Contract); err != nil { + return err + } + time.Sleep(time.Second) + case chain.ChainTypeTezos: + if err := wt.tezos.Refund(swap.HashedSecret, leg.Contract); err != nil { + return err + } + time.Sleep(time.Second) + default: + return errors.Errorf("unknown chain type: %v", leg.ChainType) + } } - log.Info().Str("hashed_secret", swap.HashedSecret.String()).Str("blockchain", swap.Initiator.ChainType.String()).Msg("refund") - - swap.RetryCount++ - switch swap.Initiator.ChainType { - case chain.ChainTypeEthereum: - return wt.ethereum.Refund(swap.HashedSecret, swap.Contract) - case chain.ChainTypeTezos: - return wt.tezos.Refund(swap.HashedSecret, swap.Contract) - default: - return errors.Errorf("unknown chain type: %v", swap.Initiator.ChainType) - } + return nil } func (wt *WatchTower) processOperation(operation chain.Operation) error { diff --git a/go.mod b/go.mod index d66c12c..45eaef7 100644 --- a/go.mod +++ b/go.mod @@ -13,6 +13,7 @@ require ( github.com/go-stack/stack v1.8.1 // indirect github.com/goat-systems/go-tezos/v4 v4.0.4 github.com/google/uuid v1.3.0 // indirect + github.com/gorilla/websocket v1.4.2 github.com/json-iterator/go v1.1.12 // indirect github.com/mitchellh/mapstructure v1.4.2 github.com/pkg/errors v0.9.1 diff --git a/go.sum b/go.sum index 893e74e..2405bb8 100644 --- a/go.sum +++ b/go.sum @@ -19,9 +19,7 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= -github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= -github.com/Azure/azure-storage-blob-go v0.7.0 h1:MuueVOYkufCxJw5YZzF842DY2MBsp+hLuh2apKY0mck= github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= @@ -37,26 +35,20 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= -github.com/VictoriaMetrics/fastcache v1.5.7 h1:4y6y0G8PRzszQUYIQHHssv/jgPHAb5qQuuDNdCbyAgw= github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= -github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= -github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847 h1:rtI0fD4oG/8eVokGVPYJEW1F88p1ZNgXiEIs9thEE4A= github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= -github.com/aws/aws-sdk-go v1.25.48 h1:J82DYDGZHOKHdhx6hD24Tm30c2C3GchYGfN0mf9iKUk= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= @@ -72,28 +64,20 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v1.0.2 h1:9iZ1Terx9fMIOtq1VrwdqfsATL9MC2l8ZrUY6YZ2uts= github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/goleveldb v1.0.0 h1:Tvd0BfvqX9o823q1j2UZ/epQo09eJh6dTcRp79ilIN4= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/snappy-go v1.0.0 h1:ZxaA6lo2EpxGddsA8JwWOcxlzRybb444sgmeJQMJGQE= github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 h1:R8vQdOQdZ9Y3SkEwmHoWBmX1DNXhXZqlTpq6s4tyJGc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0 h1:J9B4L7e3oqhXOcm+2IuNApwzQec85lE+QaikUcCs+dk= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -107,7 +91,6 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR 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/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9 h1:J82+/8rub3qSy0HxEnoYD8cs+HDlHWYrqYXe2Vqxluk= github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= @@ -125,11 +108,9 @@ github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea h1:j4317fAZh7X6GqbFowYdYdI0L9bwxL07jyPZIdepyZ0= github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/deckarep/golang-set v1.7.1 h1:SCQV0S6gTtp6itiFrTqI+pfmJ4LN85S1YzhDf9rTHJQ= github.com/deckarep/golang-set v1.7.1/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= -github.com/decred/dcrd/lru v1.0.0 h1:Kbsb1SFDsIlaupWPwsPp+dkxiBY1frcS07PCPgotKz8= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= @@ -138,35 +119,27 @@ github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMa github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dipdup-net/go-lib v0.1.26 h1:NmiroC60gS+UPow4Pwu8JK1qhCWExVi0WqBDPl5FP3s= github.com/dipdup-net/go-lib v0.1.26/go.mod h1:8HmLvEu4KKzJAJpvs/yQwEv53tS+ma6gypxSrcNw1/g= -github.com/dlclark/regexp2 v1.2.0 h1:8sAhBGEM0dRWogWqWyQeIJnxjWO6oIjl8FKqREDsGfk= github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf h1:sh8rkQZavChcmakYiSlqu2425CHyFXLZZnvm7PDpU8M= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498 h1:Y9vTBSsV4hSwPSj4bacAU/eSnV3dAxVpepaghAdhGoQ= github.com/dop251/goja v0.0.0-20200721192441-a695b0cdd498/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= github.com/dvyukov/go-fuzz v0.0.0-20200318091601-be3528f3a813/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= github.com/ebellocchia/go-base58 v0.1.0/go.mod h1:RHE/6C6Ru6YAH9Tc+A9eHQ6ZKEooLC0jw+YLnpt3CAU= github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= -github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c h1:JHHhtb9XWJrGNMcrVP6vyzO4dusgi/HnceHTgxSejUM= github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.9.23 h1:SIKhg/z4Q7AbvqcxuPYvMxf36che/Rq/Pp0IdYEkbtw= github.com/ethereum/go-ethereum v1.9.23/go.mod h1:JIfVb6esrqALTExdz9hRYvrP0xBDf6wCncIu1hNwHpM= github.com/ethereum/go-ethereum v1.10.8 h1:0UP5WUR8hh46ffbjJV7PK499+uGEyasRIfffS0vy06o= github.com/ethereum/go-ethereum v1.10.8/go.mod h1:pJNuIUYfX5+JKzSD/BTdNsvJSZ1TJqmz0dVyXMAbf6M= -github.com/fatih/color v1.3.0 h1:YehCCcyeQ6Km0D6+IapqPinWBK6y+0eB5umvZXK9WPs= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc h1:jtW8jbpkO4YirRSyepBOH8E+2HEw6/hKkBvFPwhUN8c= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= @@ -178,13 +151,9 @@ github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1T github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= 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-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0 h1:8HUsc87TaSWLKwrnumgC8/YconD2fJQsRJAsWaPg2ic= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= @@ -192,33 +161,26 @@ github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34 github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.9.0 h1:NgTtmN58D0m8+UuxtYmGztBJB7VnPgjj221I1QHci2A= github.com/go-playground/validator/v10 v10.9.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= -github.com/go-resty/resty/v2 v2.3.0 h1:JOOeAvjSlapTT92p8xiS19Zxev1neGikoHsXJeOq8So= github.com/go-resty/resty/v2 v2.3.0/go.mod h1:UpN9CgLZNsv4e9XG50UU8xdI0F43UQ4HmxLBDwaroHU= github.com/go-resty/resty/v2 v2.6.0 h1:joIR5PNLM2EFqqESUjCMGXrWmXNHEU9CEiK813oKYS4= github.com/go-resty/resty/v2 v2.6.0/go.mod h1:PwvJS6hvaPkjtjNg9ph+VrSD92bi5Zq73w/BIH7cC3Q= -github.com/go-sourcemap/sourcemap v2.1.2+incompatible h1:0b/xya7BKGhXuqFESKM4oIiRo9WOt2ebz7KxfreD6ug= github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/goat-systems/go-tezos/v4 v4.0.4 h1:5AYxk1uVc0BKGqMCerAf+yzuATa2b2ZkzH4GIwxaeBM= github.com/goat-systems/go-tezos/v4 v4.0.4/go.mod h1:R6pBtn/dC3bw1D65Ik17femN2LulEUKQH9W5DKckfJk= -github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= @@ -240,13 +202,11 @@ github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:x 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.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.2-0.20200707131729-196ae77b8a26 h1:lMm2hD9Fy0ynom5+85/pbdkiYcBqM1JWmhpAXLmy0fw= github.com/golang/snappy v0.0.2-0.20200707131729-196ae77b8a26/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -257,20 +217,16 @@ github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv 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 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= 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.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa h1:Q75Upo5UN4JbPFURXZ8nLKYUvF85dyFRop/vQ0Rv+64= github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= 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/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.5 h1:kxhtnfFVi+rYdOALN0B3k9UT86zVJKfBimRaciULW4I= github.com/google/uuid v1.1.5/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -281,23 +237,19 @@ github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB7 github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277 h1:E0whKxgp2ojts0FDgUA8dl62bmH0LxKanMoBr6MDTDM= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/graph-gophers/graphql-go v0.0.0-20201113091052-beb923fada29/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= 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/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.1.1 h1:4JywC80b+/hSfljFlEBLHrrh+CIONLDz9NuFl0af4Mw= github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/holiman/uint256 v1.2.0 h1:gpSYcPLWGv4sG43I2mVLiDZCNDh/EpGjSk8tmtxitHM= github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v1.0.0 h1:wg75sLpL6DZqwHQN6E1Cfk6mtfzS45z8OV+ic+DtHRo= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= github.com/huin/goupnp v1.0.2 h1:RfGLP+h3mvisuWEyybxNq5Eft3NWhHLPeUN72kpKZoI= github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= @@ -306,7 +258,6 @@ github.com/iancoleman/strcase v0.1.3/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5N github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= -github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883 h1:FSeK4fZCo8u40n2JMnyAsd6x7+SbvoOMHvQOU/n10P4= github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= @@ -363,19 +314,15 @@ github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458 h1:6OvNmYgJye github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jinzhu/now v1.1.2/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/jrick/logrotate v1.0.0 h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= @@ -383,7 +330,6 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21 h1:F/iKcka0K2LgnKy/fgSBf235AETtm1n1TvBzqu40LE0= github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= @@ -392,7 +338,6 @@ github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356 h1:I/yrLt2WilKxlQKCM5 github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= @@ -400,16 +345,13 @@ github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPR github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= @@ -417,7 +359,6 @@ github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+ github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= @@ -432,13 +373,11 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d h1:oNAwILwmgWKFpuU+dXvI6dl9jG2mAWAZLX3r9s0PPiw= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= @@ -449,7 +388,6 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= @@ -459,49 +397,37 @@ github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4f github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mitchellh/mapstructure v1.4.2 h1:6h7AQ0yhTcIsmFmnAwQls75jp2Gzs4iB8W7pjMO+rqo= github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= -github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= -github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c h1:1RHs3tNxjXGHeul8z2t6H2N2TlAqpKe5yryJztRx4Jk= github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= 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/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= 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/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= -github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222 h1:goeTyGkArOZIVOMA0dQbyuPWGNQJZGPwPu/QS9GlpnA= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= @@ -523,12 +449,10 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150 h1:ZeU+auZj1iNzN8iVhff6M38Mfu73FQiJve/GEXYJBjE= github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= -github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8= github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa4QEjJeqM= @@ -536,11 +460,9 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00 h1:8DPul/X0IT/1TNMIxoKLwdemEOBBHDC/K4EB16Cw5WE= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521 h1:3hxavr+IHMsQBrYUPQM5v0CgENFktkkbg1sfpgM3h20= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= @@ -554,9 +476,7 @@ github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfP github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shirou/gopsutil v2.20.5+incompatible h1:tYH07UPoQt0OCQdgWWMgYHy3/a9bcxNpBIysykNIP7I= github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil v3.21.8+incompatible h1:sh0foI8tMRlCidUJR+KzqWYWxrkuuPIGiO6Vp+KXdCU= github.com/shirou/gopsutil v3.21.8+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= @@ -568,7 +488,6 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeV github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= @@ -580,13 +499,10 @@ github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= -github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 h1:gIlAHnH1vJb5vwEjIp5kBj/eu99p/bl0Ay2goiPe5xE= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= -github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3 h1:njlZPzLwU639dk2kqnCPPv+wNjq7Xb6EfUxe/oX0/NM= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= @@ -596,7 +512,6 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca h1:Ld/zXl5t4+D69SiV4JoN7kkfvJdOWlPpfxrzxpLMoUk= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954 h1:xQdMZ1WLrgkkvOZ/LDQxjVxMLdby7osSh4ZEVa5sIjs= github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= @@ -604,30 +519,25 @@ github.com/tidwall/gjson v1.8.1/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.1.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4= github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo= github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= -github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ= github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/tyler-smith/go-bip39 v1.0.2 h1:+t3w+KwLXO6154GNJY+qUtIxLTmFjfUmpguQT1OlOT8= github.com/tyler-smith/go-bip39 v1.0.2/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fastjson v1.5.4 h1:r8gpiVwdzDU09NrlN38OyL5dUFpdwGQR5RQEBqY+hLg= github.com/valyala/fastjson v1.5.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY= github.com/valyala/fastjson v1.6.3 h1:tAKFnnwmeMGPbwJ7IwxcTPCNr3uIzoIj3/Fh90ra4xc= github.com/valyala/fastjson v1.6.3/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 h1:1cngl9mPEoITZG8s8cVcUy5CeIBYhEESkOB7m6Gmkrk= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/yhirose/go-peg v0.0.0-20210119023502-a1af152bac31/go.mod h1:q2QWLflHsZxT6ixYcXveTYicEvxGh5Uv6CnI7f7BfjQ= @@ -661,7 +571,6 @@ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg= @@ -723,9 +632,7 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d h1:20cMwl2fHAzkJMEA+8J4JgqBQcQGzbisXo31MIeenXI= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210928044308-7d9f5e0b762b h1:eB48h3HiRycXNy8E0Gf5e0hv7YT6Kt14L/D73G1fuwo= golang.org/x/net v0.0.0-20210928044308-7d9f5e0b762b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -787,31 +694,25 @@ golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912 h1:uCLL3g5wH2xjxVREVuAbP9JM5PPKjRbXKRa6IBjkzmU= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 h1:foEbQz/B0Oz6YIqu/69kfXPYeFQAuuMYFkjaqXzl5Wo= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 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 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= 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.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE= @@ -854,7 +755,6 @@ golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8T 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 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= @@ -903,7 +803,6 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -912,9 +811,7 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6 h1:a6cXbcDDUkSBlpnkWV1bJ+vv3mOgQEltEJ2rPxroVu0= gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/urfave/cli.v1 v1.20.0 h1:NdAVW6RYxDif9DhDHaAortIu956m2c0v+09AZBPTbE0= gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= @@ -926,7 +823,6 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/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= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/chain/chain.go b/internal/chain/chain.go index f7236a8..f07ee8b 100644 --- a/internal/chain/chain.go +++ b/internal/chain/chain.go @@ -16,43 +16,112 @@ var ( // Chain - type Chain interface { io.Closer + Init() error Run() error Redeem(hashedSecret, secret Hex, contract string) error Refund(hashedSecret Hex, contract string) error Restore() error - InitEvents() <-chan InitEvent - RedeemEvents() <-chan RedeemEvent - RefundEvents() <-chan RefundEvent + Events() <-chan Event Operations() <-chan Operation } +// Event - +type Event interface { + Level() uint64 + HashedSecret() Hex + ChainType() ChainType + Contract() string +} + // RedeemEvent - type RedeemEvent struct { - Event - Secret Hex + HashedSecretHex Hex + ContractAddress string + Chain ChainType + BlockNumber uint64 + Secret Hex +} + +// Level - +func (e RedeemEvent) Level() uint64 { + return e.BlockNumber +} + +// Contract - +func (e RedeemEvent) Contract() string { + return e.ContractAddress +} + +// ChainType - +func (e RedeemEvent) ChainType() ChainType { + return e.Chain +} + +// HashedSecret - +func (e RedeemEvent) HashedSecret() Hex { + return e.HashedSecretHex } // RefundEvent - type RefundEvent struct { - Event + HashedSecretHex Hex + ContractAddress string + Chain ChainType + BlockNumber uint64 +} + +// Level - +func (e RefundEvent) Level() uint64 { + return e.BlockNumber +} + +// Contract - +func (e RefundEvent) Contract() string { + return e.ContractAddress +} + +// ChainType - +func (e RefundEvent) ChainType() ChainType { + return e.Chain +} + +// HashedSecret - +func (e RefundEvent) HashedSecret() Hex { + return e.HashedSecretHex } // InitEvent - type InitEvent struct { - Event - Initiator string - Participant string - Amount decimal.Decimal - PayOff decimal.Decimal - RefundTime time.Time + HashedSecretHex Hex + ContractAddress string + Chain ChainType + BlockNumber uint64 + Initiator string + Participant string + Amount decimal.Decimal + PayOff decimal.Decimal + RefundTime time.Time } -// Event - -type Event struct { - HashedSecret Hex - Contract string - Chain ChainType +// Level - +func (e InitEvent) Level() uint64 { + return e.BlockNumber +} + +// Contract - +func (e InitEvent) Contract() string { + return e.ContractAddress +} + +// ChainType - +func (e InitEvent) ChainType() ChainType { + return e.Chain +} + +// HashedSecret - +func (e InitEvent) HashedSecret() Hex { + return e.HashedSecretHex } // SetAmountFromString - @@ -78,6 +147,31 @@ func (event *InitEvent) SetPayOff(payoff string, minPayoff decimal.Decimal) erro return nil } +// RestoredEvent - +type RestoredEvent struct { + Chain ChainType +} + +// Level - +func (e RestoredEvent) Level() uint64 { + return 0 +} + +// Contract - +func (e RestoredEvent) Contract() string { + return "" +} + +// ChainType - +func (e RestoredEvent) ChainType() ChainType { + return e.Chain +} + +// HashedSecret - +func (e RestoredEvent) HashedSecret() Hex { + return "" +} + // ChainType - type ChainType int @@ -99,3 +193,15 @@ func (c ChainType) String() string { return "unknown" } } + +// ByLevel - +type ByLevel []Event + +// Len - +func (a ByLevel) Len() int { return len(a) } + +// Less - +func (a ByLevel) Less(i, j int) bool { return a[i].Level() < a[j].Level() } + +// Swap - +func (a ByLevel) Swap(i, j int) { a[i], a[j] = a[j], a[i] } diff --git a/internal/chain/ethereum/chain.go b/internal/chain/ethereum/chain.go index 8521a7a..f13168c 100644 --- a/internal/chain/ethereum/chain.go +++ b/internal/chain/ethereum/chain.go @@ -4,6 +4,7 @@ import ( "context" "crypto/ecdsa" "math/big" + "sort" "sync" "time" @@ -16,6 +17,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethclient" + "github.com/gorilla/websocket" "github.com/pkg/errors" "github.com/rs/zerolog" "github.com/rs/zerolog/log" @@ -40,9 +42,7 @@ type Ethereum struct { logs chan types.Log head chan *types.Header - initChan chan chain.InitEvent - redeemChan chan chain.RedeemEvent - refundChan chan chain.RefundEvent + events chan chain.Event operations chan chain.Operation stop chan struct{} wg sync.WaitGroup @@ -88,9 +88,7 @@ func New(cfg config.Ethereum) (*Ethereum, error) { wss: wss, logs: make(chan types.Log, 1024), head: make(chan *types.Header, 16), - initChan: make(chan chain.InitEvent, 1024), - redeemChan: make(chan chain.RedeemEvent, 1024), - refundChan: make(chan chain.RefundEvent, 1024), + events: make(chan chain.Event, 1024), operations: make(chan chain.Operation, 1024), stop: make(chan struct{}, 1), } @@ -130,18 +128,32 @@ func (e *Ethereum) err() *zerolog.Event { return log.Error().Str("blockchain", chain.ChainTypeEthereum.String()) } +// Init - +func (e *Ethereum) Init() error { + e.info().Msg("initializing...") + return LoadAbi() +} + // Run - func (e *Ethereum) Run() error { - if err := LoadAbi(); err != nil { - return err - } - + e.info().Msg("running...") latest, err := e.client.BlockNumber(context.Background()) if err != nil { return err } e.latest = int64(latest) + if err := e.subscribe(); err != nil { + return errors.Wrap(err, "subscribe") + } + + e.wg.Add(1) + go e.listen() + + return nil +} + +func (e *Ethereum) subscribe() error { query := ethereum.FilterQuery{ Addresses: []common.Address{ common.HexToAddress(e.cfg.EthAddress), @@ -161,10 +173,18 @@ func (e *Ethereum) Run() error { return err } e.subHead = subHead + return nil +} - e.wg.Add(1) - go e.listen() - +func (e *Ethereum) reconnect() error { + wss, err := ethclient.Dial(e.cfg.Wss) + if err != nil { + return errors.Wrap(err, "reconnect Dial") + } + e.wss = wss + if err := e.subscribe(); err != nil { + return errors.Wrap(err, "reconnect subscribe") + } return nil } @@ -181,27 +201,15 @@ func (e *Ethereum) Close() error { close(e.logs) close(e.head) - close(e.initChan) - close(e.redeemChan) - close(e.refundChan) + close(e.events) close(e.operations) close(e.stop) return nil } // InitEvents - -func (e *Ethereum) InitEvents() <-chan chain.InitEvent { - return e.initChan -} - -// RedeemEvents - -func (e *Ethereum) RedeemEvents() <-chan chain.RedeemEvent { - return e.redeemChan -} - -// RefundEvents - -func (e *Ethereum) RefundEvents() <-chan chain.RefundEvent { - return e.refundChan +func (e *Ethereum) Events() <-chan chain.Event { + return e.events } // Operations - @@ -211,6 +219,8 @@ func (e *Ethereum) Operations() <-chan chain.Operation { // Redeem - func (e *Ethereum) Redeem(hashedSecret, secret chain.Hex, contract string) error { + e.info().Str("hashed_secret", hashedSecret.String()).Str("contract", contract).Msg("redeem") + opts, err := e.buildTxOpts() if err != nil { return err @@ -251,6 +261,8 @@ func (e *Ethereum) Redeem(hashedSecret, secret chain.Hex, contract string) error // Refund - func (e *Ethereum) Refund(hashedSecret chain.Hex, contract string) error { + e.info().Str("hashed_secret", hashedSecret.String()).Str("contract", contract).Msg("refund") + opts, err := e.buildTxOpts() if err != nil { return err @@ -311,144 +323,141 @@ func (e *Ethereum) buildTxOpts() (*bind.TransactOpts, error) { // Restore - func (e *Ethereum) Restore() error { e.info().Msg("restoring...") - if err := e.restoreEth(); err != nil { + ethEvents, err := e.restoreEth() + if err != nil { return err } - if err := e.restoreErc20(); err != nil { + erc20Events, err := e.restoreErc20() + if err != nil { return err } - e.info().Msg("restored") + events := append(ethEvents, erc20Events...) + sort.Sort(chain.ByLevel(events)) + + for i := range events { + e.events <- events[i] + } + e.events <- chain.RestoredEvent{Chain: chain.ChainTypeEthereum} return nil } -func (e *Ethereum) restoreEth() error { +func (e *Ethereum) restoreEth() ([]chain.Event, error) { + events := make([]chain.Event, 0) iterInit, err := e.eth.FilterInitiated(nil, nil, nil) if err != nil { - return err + return nil, err } for iterInit.Next() { - hashedSecret := chain.NewHexFromBytes32(iterInit.Event.HashedSecret) - - if e.minPayoff.Cmp(iterInit.Event.Payoff) > 0 { - continue - } - - e.initChan <- chain.InitEvent{ - Event: chain.Event{ - HashedSecret: hashedSecret, - Contract: e.cfg.EthAddress, - Chain: chain.ChainTypeEthereum, - }, - Participant: iterInit.Event.Participant.Hex(), - Initiator: iterInit.Event.Initiator.Hex(), - Amount: decimal.NewFromBigInt(iterInit.Event.Value, 0), - PayOff: decimal.NewFromBigInt(iterInit.Event.Payoff, 0), - RefundTime: time.Unix(iterInit.Event.RefundTimestamp.Int64(), 0), - } + events = append(events, chain.InitEvent{ + HashedSecretHex: chain.NewHexFromBytes32(iterInit.Event.HashedSecret), + ContractAddress: e.cfg.EthAddress, + Chain: chain.ChainTypeEthereum, + BlockNumber: iterInit.Event.Raw.BlockNumber, + Participant: iterInit.Event.Participant.Hex(), + Initiator: iterInit.Event.Initiator.Hex(), + Amount: decimal.NewFromBigInt(iterInit.Event.Value, 0), + PayOff: decimal.NewFromBigInt(iterInit.Event.Payoff, 0), + RefundTime: time.Unix(iterInit.Event.RefundTimestamp.Int64(), 0), + }) } if err := iterInit.Close(); err != nil { - return err + return nil, err } iterRedeemed, err := e.eth.FilterRedeemed(nil, nil) if err != nil { - return err + return nil, err } for iterRedeemed.Next() { - e.redeemChan <- chain.RedeemEvent{ - Event: chain.Event{ - HashedSecret: chain.NewHexFromBytes32(iterRedeemed.Event.HashedSecret), - Contract: e.cfg.EthAddress, - Chain: chain.ChainTypeEthereum, - }, - Secret: chain.Hex(iterRedeemed.event), - } + events = append(events, chain.RedeemEvent{ + HashedSecretHex: chain.NewHexFromBytes32(iterRedeemed.Event.HashedSecret), + ContractAddress: e.cfg.EthAddress, + Chain: chain.ChainTypeEthereum, + BlockNumber: iterRedeemed.Event.Raw.BlockNumber, + Secret: chain.NewHexFromBytes32(iterRedeemed.Event.Secret), + }) } if err := iterRedeemed.Close(); err != nil { - return err + return nil, err } iterRefunded, err := e.eth.FilterRefunded(nil, nil) if err != nil { - return err + return nil, err } for iterRefunded.Next() { - hashedSecret := chain.NewHexFromBytes32(iterRefunded.Event.HashedSecret) - e.refundChan <- chain.RefundEvent{ - Event: chain.Event{ - HashedSecret: hashedSecret, - Contract: e.cfg.EthAddress, - Chain: chain.ChainTypeEthereum, - }, - } + events = append(events, chain.RefundEvent{ + HashedSecretHex: chain.NewHexFromBytes32(iterRefunded.Event.HashedSecret), + ContractAddress: e.cfg.EthAddress, + Chain: chain.ChainTypeEthereum, + BlockNumber: iterRefunded.Event.Raw.BlockNumber, + }) } if err := iterRefunded.Close(); err != nil { - return err + return nil, err } - return nil + return events, nil } -func (e *Ethereum) restoreErc20() error { +func (e *Ethereum) restoreErc20() ([]chain.Event, error) { + events := make([]chain.Event, 0) + iterInit, err := e.erc20.FilterInitiated(nil, nil, nil, nil) if err != nil { - return err + return nil, err } for iterInit.Next() { - e.initChan <- chain.InitEvent{ - Event: chain.Event{ - HashedSecret: chain.NewHexFromBytes32(iterInit.Event.HashedSecret), - Contract: e.cfg.Erc20Address, - Chain: chain.ChainTypeEthereum, - }, - Participant: iterInit.Event.Participant.Hex(), - Initiator: iterInit.Event.Initiator.Hex(), - Amount: decimal.NewFromBigInt(iterInit.Event.Value, 0), - PayOff: decimal.NewFromBigInt(iterInit.Event.Payoff, 0), - RefundTime: time.Unix(iterInit.Event.RefundTimestamp.Int64(), 0), - } + events = append(events, chain.InitEvent{ + HashedSecretHex: chain.NewHexFromBytes32(iterInit.Event.HashedSecret), + ContractAddress: e.cfg.Erc20Address, + Chain: chain.ChainTypeEthereum, + BlockNumber: iterInit.Event.Raw.BlockNumber, + Participant: iterInit.Event.Participant.Hex(), + Initiator: iterInit.Event.Initiator.Hex(), + Amount: decimal.NewFromBigInt(iterInit.Event.Value, 0), + PayOff: decimal.NewFromBigInt(iterInit.Event.Payoff, 0), + RefundTime: time.Unix(iterInit.Event.RefundTimestamp.Int64(), 0), + }) } if err := iterInit.Close(); err != nil { - return err + return nil, err } iterRedeemed, err := e.erc20.FilterRedeemed(nil, nil) if err != nil { - return err + return nil, err } for iterRedeemed.Next() { - e.redeemChan <- chain.RedeemEvent{ - Event: chain.Event{ - HashedSecret: chain.NewHexFromBytes32(iterRedeemed.Event.HashedSecret), - Contract: e.cfg.Erc20Address, - Chain: chain.ChainTypeEthereum, - }, - Secret: chain.Hex(iterRedeemed.event), - } + events = append(events, chain.RedeemEvent{ + HashedSecretHex: chain.NewHexFromBytes32(iterRedeemed.Event.HashedSecret), + ContractAddress: e.cfg.Erc20Address, + Chain: chain.ChainTypeEthereum, + BlockNumber: iterRedeemed.Event.Raw.BlockNumber, + Secret: chain.NewHexFromBytes32(iterRedeemed.Event.Secret), + }) } if err := iterRedeemed.Close(); err != nil { - return err + return nil, err } iterRefunded, err := e.erc20.FilterRefunded(nil, nil) if err != nil { - return err + return nil, err } for iterRefunded.Next() { - hashedSecret := chain.NewHexFromBytes32(iterRefunded.Event.HashedSecret) - e.refundChan <- chain.RefundEvent{ - Event: chain.Event{ - HashedSecret: hashedSecret, - Contract: e.cfg.Erc20Address, - Chain: chain.ChainTypeEthereum, - }, - } + events = append(events, chain.RefundEvent{ + HashedSecretHex: chain.NewHexFromBytes32(iterRefunded.Event.HashedSecret), + ContractAddress: e.cfg.Erc20Address, + Chain: chain.ChainTypeEthereum, + BlockNumber: iterRefunded.Event.Raw.BlockNumber, + }) } if err := iterRefunded.Close(); err != nil { - return err + return nil, err } - return nil + return events, nil } func (e *Ethereum) parseLog(l types.Log) error { @@ -504,8 +513,18 @@ func (e *Ethereum) listen() { } case err := <-e.subLogs.Err(): e.err().Err(err).Msg("ethereum subscription error") + if websocket.IsCloseError(err, websocket.CloseAbnormalClosure) { + if err := e.reconnect(); err != nil { + e.err().Err(err).Msg("") + } + } case err := <-e.subHead.Err(): e.err().Err(err).Msg("ethereum subscription error") + if websocket.IsCloseError(err, websocket.CloseAbnormalClosure) { + if err := e.reconnect(); err != nil { + e.err().Err(err).Msg("") + } + } } } } @@ -526,17 +545,16 @@ func (e *Ethereum) handleInitiated(abi *abi.ABI, l types.Log, event *abi.Event, return nil } - e.initChan <- chain.InitEvent{ - Event: chain.Event{ - HashedSecret: hashedSecret, - Contract: e.cfg.EthAddress, - Chain: chain.ChainTypeEthereum, - }, - Participant: common.BytesToAddress(l.Topics[2].Bytes()).Hex(), - Initiator: args.Initiator.Hex(), - Amount: decimal.NewFromBigInt(args.Value, 0), - PayOff: decimal.NewFromBigInt(args.PayOff, 0), - RefundTime: time.Unix(args.RefundTimestamp.Int64(), 0), + e.events <- chain.InitEvent{ + HashedSecretHex: hashedSecret, + ContractAddress: e.cfg.EthAddress, + Chain: chain.ChainTypeEthereum, + BlockNumber: l.BlockNumber, + Participant: common.BytesToAddress(l.Topics[2].Bytes()).Hex(), + Initiator: args.Initiator.Hex(), + Amount: decimal.NewFromBigInt(args.Value, 0), + PayOff: decimal.NewFromBigInt(args.PayOff, 0), + RefundTime: time.Unix(args.RefundTimestamp.Int64(), 0), } case ContractTypeErc20: if len(l.Topics) != 4 { @@ -553,29 +571,27 @@ func (e *Ethereum) handleInitiated(abi *abi.ABI, l types.Log, event *abi.Event, return nil } - e.initChan <- chain.InitEvent{ - Event: chain.Event{ - HashedSecret: chain.Hex(l.Topics[1].Hex()[2:]), - Contract: e.cfg.Erc20Address, - Chain: chain.ChainTypeEthereum, - }, - Participant: l.Topics[3].Hex(), - Initiator: args.Initiator.Hex(), - Amount: decimal.NewFromBigInt(args.Value, 0), - PayOff: decimal.NewFromBigInt(args.PayOff, 0), - RefundTime: time.Unix(args.RefundTimestamp.Int64(), 0), + e.events <- chain.InitEvent{ + HashedSecretHex: chain.Hex(l.Topics[1].Hex()[2:]), + ContractAddress: e.cfg.Erc20Address, + Chain: chain.ChainTypeEthereum, + BlockNumber: l.BlockNumber, + Participant: l.Topics[3].Hex(), + Initiator: args.Initiator.Hex(), + Amount: decimal.NewFromBigInt(args.Value, 0), + PayOff: decimal.NewFromBigInt(args.PayOff, 0), + RefundTime: time.Unix(args.RefundTimestamp.Int64(), 0), } } return nil } func (e *Ethereum) handleRefunded(l types.Log) error { - e.refundChan <- chain.RefundEvent{ - Event: chain.Event{ - HashedSecret: chain.Hex(l.Topics[1].Hex()[2:]), - Chain: chain.ChainTypeEthereum, - Contract: l.Address.Hex(), - }, + e.events <- chain.RefundEvent{ + HashedSecretHex: chain.Hex(l.Topics[1].Hex()[2:]), + Chain: chain.ChainTypeEthereum, + ContractAddress: l.Address.Hex(), + BlockNumber: l.BlockNumber, } return nil } @@ -586,13 +602,12 @@ func (e *Ethereum) handleRedeemed(abi *abi.ABI, l types.Log, event *abi.Event) e return err } - e.redeemChan <- chain.RedeemEvent{ - Event: chain.Event{ - HashedSecret: chain.Hex(l.Topics[1].Hex()[2:]), - Chain: chain.ChainTypeEthereum, - Contract: l.Address.Hex(), - }, - Secret: chain.NewHexFromBytes32(args.Secret), + e.events <- chain.RedeemEvent{ + HashedSecretHex: chain.Hex(l.Topics[1].Hex()[2:]), + Chain: chain.ChainTypeEthereum, + ContractAddress: l.Address.Hex(), + BlockNumber: l.BlockNumber, + Secret: chain.NewHexFromBytes32(args.Secret), } return nil } diff --git a/internal/chain/hex.go b/internal/chain/hex.go index 927fa77..637f451 100644 --- a/internal/chain/hex.go +++ b/internal/chain/hex.go @@ -21,12 +21,15 @@ func NewHexFromBytes32(data [32]byte) Hex { // Bytes - func (h Hex) Bytes() ([]byte, error) { - return hex.DecodeString(string(h)) + if data, err := hex.DecodeString(string(h)); err == nil { + return data, nil + } + return []byte(h), nil } // Bytes32 - func (h Hex) Bytes32() ([32]byte, error) { - if len(h) != 64 { + if len(h) > 64 { return [32]byte{}, errors.Errorf("invalid hex length %d for string %s", len(h), h) } data, err := h.Bytes() diff --git a/internal/chain/tezos/chain.go b/internal/chain/tezos/chain.go index 0bf28b3..c62d750 100644 --- a/internal/chain/tezos/chain.go +++ b/internal/chain/tezos/chain.go @@ -26,19 +26,17 @@ import ( // Tezos - type Tezos struct { - cfg config.Tezos - rpc *rpc.Client - api *api.API - events *events.TzKT - key *keys.Key - bigMaps []api.BigMap - counter int64 - chainID string - minPayoff decimal.Decimal - - initChan chan chain.InitEvent - redeemChan chan chain.RedeemEvent - refundChan chan chain.RefundEvent + cfg config.Tezos + rpc *rpc.Client + api *api.API + eventsTzKT *events.TzKT + key *keys.Key + bigMaps []api.BigMap + counter int64 + chainID string + minPayoff decimal.Decimal + + events chan chain.Event operations chan chain.Operation stop chan struct{} @@ -81,10 +79,8 @@ func New(cfg config.Tezos) (*Tezos, error) { key: key, api: api.New(cfg.TzKT), chainID: block.ChainID, - events: events.NewTzKT(fmt.Sprintf("%s/v1/events", cfg.TzKT)), - initChan: make(chan chain.InitEvent, 1024), - redeemChan: make(chan chain.RedeemEvent, 1024), - refundChan: make(chan chain.RefundEvent, 1024), + eventsTzKT: events.NewTzKT(fmt.Sprintf("%s/v1/events", cfg.TzKT)), + events: make(chan chain.Event, 1024*16), operations: make(chan chain.Operation, 1024), stop: make(chan struct{}, 1), }, nil @@ -102,8 +98,9 @@ func (t *Tezos) err() *zerolog.Event { return log.Error().Str("blockchain", chain.ChainTypeTezos.String()) } -// Run - -func (t *Tezos) Run() error { +// Init - +func (t *Tezos) Init() error { + t.info().Msg("initializing...") _, counter, err := t.rpc.ContractCounter(rpc.ContractCounterInput{ BlockID: &rpc.BlockIDHead{}, ContractID: t.key.PubKey.GetAddress(), @@ -120,26 +117,31 @@ func (t *Tezos) Run() error { return err } t.bigMaps = bigMaps + return nil +} - if err := t.events.Connect(); err != nil { +// Run - +func (t *Tezos) Run() error { + t.info().Msg("running...") + if err := t.eventsTzKT.Connect(); err != nil { return err } t.wg.Add(1) go t.listen() - for _, bm := range bigMaps { - if err := t.events.SubscribeToBigMaps(&bm.Ptr, bm.Contract.Address, ""); err != nil { + for _, bm := range t.bigMaps { + if err := t.eventsTzKT.SubscribeToBigMaps(&bm.Ptr, bm.Contract.Address, ""); err != nil { return err } } - if err := t.events.SubscribeToOperations(t.cfg.Contract, events.KindTransaction); err != nil { + if err := t.eventsTzKT.SubscribeToOperations(t.cfg.Contract, events.KindTransaction); err != nil { return err } for i := range t.cfg.Tokens { - if err := t.events.SubscribeToOperations(t.cfg.Tokens[i], events.KindTransaction); err != nil { + if err := t.eventsTzKT.SubscribeToOperations(t.cfg.Tokens[i], events.KindTransaction); err != nil { return err } } @@ -153,27 +155,15 @@ func (t *Tezos) Close() error { t.stop <- struct{}{} t.wg.Wait() - close(t.initChan) - close(t.redeemChan) - close(t.refundChan) + close(t.events) close(t.operations) close(t.stop) return nil } -// InitEvents - -func (t *Tezos) InitEvents() <-chan chain.InitEvent { - return t.initChan -} - -// RedeemEvents - -func (t *Tezos) RedeemEvents() <-chan chain.RedeemEvent { - return t.redeemChan -} - -// RefundEvents - -func (t *Tezos) RefundEvents() <-chan chain.RefundEvent { - return t.refundChan +// Events - +func (t *Tezos) Events() <-chan chain.Event { + return t.events } // Operations - @@ -188,7 +178,7 @@ func (t *Tezos) listen() { select { case <-t.stop: return - case update := <-t.events.Listen(): + case update := <-t.eventsTzKT.Listen(): switch update.Channel { case events.ChannelBigMap: if err := t.handleBigMapChannel(update); err != nil { @@ -207,7 +197,8 @@ func (t *Tezos) listen() { // Redeem - func (t *Tezos) Redeem(hashedSecret, secret chain.Hex, contract string) error { - t.info().Msg("redeeming...") + t.info().Str("hashed_secret", hashedSecret.String()).Str("contract", contract).Msg("redeem") + value, err := json.Marshal(map[string]interface{}{ "bytes": secret, }) @@ -230,7 +221,7 @@ func (t *Tezos) Redeem(hashedSecret, secret chain.Hex, contract string) error { // Refund - func (t *Tezos) Refund(hashedSecret chain.Hex, contract string) error { - t.info().Str("hashed_secret", hashedSecret.String()).Msg("refunding...") + t.info().Str("hashed_secret", hashedSecret.String()).Str("contract", contract).Msg("refund") value, err := json.Marshal(map[string]interface{}{ "bytes": hashedSecret, @@ -260,7 +251,8 @@ func (t *Tezos) Restore() error { return err } } - t.info().Msg("restored") + + t.events <- chain.RestoredEvent{Chain: chain.ChainTypeTezos} return nil } @@ -420,19 +412,18 @@ func (t *Tezos) parseContractValueUpdate(bigMapUpdate BigMapUpdate) error { } event := chain.InitEvent{ - Event: chain.Event{ - HashedSecret: chain.Hex(bigMapUpdate.Content.Key), - Chain: chain.ChainTypeTezos, - Contract: bigMapUpdate.Contract.Address, - }, - Initiator: value.Initiator, - Participant: value.Participant, - RefundTime: refundTime, + HashedSecretHex: chain.Hex(bigMapUpdate.Content.Key), + Chain: chain.ChainTypeTezos, + ContractAddress: bigMapUpdate.Contract.Address, + BlockNumber: uint64(bigMapUpdate.Level), + Initiator: value.Initiator, + Participant: value.Participant, + RefundTime: refundTime, } if err := event.SetPayOff(value.Payoff, t.minPayoff); err != nil { if errors.Is(err, chain.ErrMinPayoff) { - t.warn().Str("hashed_secret", event.HashedSecret.String()).Msg("skip because of small pay off") + t.warn().Str("hashed_secret", event.HashedSecretHex.String()).Msg("skip because of small pay off") return nil } return err @@ -442,7 +433,7 @@ func (t *Tezos) parseContractValueUpdate(bigMapUpdate BigMapUpdate) error { return err } - t.initChan <- event + t.events <- event case BigMapActionUpdateKey: case BigMapActionRemoveKey: ops, err := t.api.GetTransactions(map[string]string{ @@ -469,22 +460,20 @@ func (t *Tezos) parseContractValueUpdate(bigMapUpdate BigMapUpdate) error { secret = chain.Hex(ops[i].Parameters.Value) } - t.redeemChan <- chain.RedeemEvent{ - Event: chain.Event{ - HashedSecret: chain.Hex(bigMapUpdate.Content.Key), - Chain: chain.ChainTypeTezos, - Contract: bigMapUpdate.Contract.Address, - }, - Secret: secret, + t.events <- chain.RedeemEvent{ + HashedSecretHex: chain.Hex(bigMapUpdate.Content.Key), + Chain: chain.ChainTypeTezos, + ContractAddress: bigMapUpdate.Contract.Address, + BlockNumber: uint64(bigMapUpdate.Level), + Secret: secret, } return nil case "refund": - t.refundChan <- chain.RefundEvent{ - Event: chain.Event{ - HashedSecret: chain.Hex(bigMapUpdate.Content.Key), - Chain: chain.ChainTypeTezos, - Contract: bigMapUpdate.Contract.Address, - }, + t.events <- chain.RefundEvent{ + HashedSecretHex: chain.Hex(bigMapUpdate.Content.Key), + Chain: chain.ChainTypeTezos, + ContractAddress: bigMapUpdate.Contract.Address, + BlockNumber: uint64(bigMapUpdate.Level), } return nil } @@ -507,19 +496,18 @@ func (t *Tezos) parseTokensValueUpdate(bigMapUpdate BigMapUpdate) error { return err } event := chain.InitEvent{ - Event: chain.Event{ - HashedSecret: chain.Hex(bigMapUpdate.Content.Key), - Chain: chain.ChainTypeTezos, - Contract: bigMapUpdate.Contract.Address, - }, - Initiator: value.Initiator, - Participant: value.Participant, - RefundTime: refundTime, + HashedSecretHex: chain.Hex(bigMapUpdate.Content.Key), + Chain: chain.ChainTypeTezos, + ContractAddress: bigMapUpdate.Contract.Address, + BlockNumber: uint64(bigMapUpdate.Level), + Initiator: value.Initiator, + Participant: value.Participant, + RefundTime: refundTime, } if err := event.SetPayOff(value.Payoff, t.minPayoff); err != nil { if errors.Is(err, chain.ErrMinPayoff) { - t.warn().Str("hashed_secret", event.HashedSecret.String()).Msg("skip because of small pay off") + t.warn().Str("hashed_secret", event.HashedSecretHex.String()).Msg("skip because of small pay off") return nil } return err @@ -529,7 +517,7 @@ func (t *Tezos) parseTokensValueUpdate(bigMapUpdate BigMapUpdate) error { return err } - t.initChan <- event + t.events <- event case BigMapActionUpdateKey: case BigMapActionRemoveKey: ops, err := t.api.GetTransactions(map[string]string{ @@ -556,22 +544,20 @@ func (t *Tezos) parseTokensValueUpdate(bigMapUpdate BigMapUpdate) error { secret = chain.Hex(ops[i].Parameters.Value) } - t.redeemChan <- chain.RedeemEvent{ - Event: chain.Event{ - HashedSecret: chain.Hex(bigMapUpdate.Content.Key), - Chain: chain.ChainTypeTezos, - Contract: bigMapUpdate.Contract.Address, - }, - Secret: secret, + t.events <- chain.RedeemEvent{ + HashedSecretHex: chain.Hex(bigMapUpdate.Content.Key), + Chain: chain.ChainTypeTezos, + ContractAddress: bigMapUpdate.Contract.Address, + BlockNumber: uint64(bigMapUpdate.Level), + Secret: secret, } return nil case "refund": - t.refundChan <- chain.RefundEvent{ - Event: chain.Event{ - HashedSecret: chain.Hex(bigMapUpdate.Content.Key), - Chain: chain.ChainTypeTezos, - Contract: bigMapUpdate.Contract.Address, - }, + t.events <- chain.RefundEvent{ + HashedSecretHex: chain.Hex(bigMapUpdate.Content.Key), + Chain: chain.ChainTypeTezos, + ContractAddress: bigMapUpdate.Contract.Address, + BlockNumber: uint64(bigMapUpdate.Level), } return nil } @@ -602,19 +588,18 @@ func (t *Tezos) parseContractValueKeys(key api.BigMapKey, contract string) error } event := chain.InitEvent{ - Event: chain.Event{ - HashedSecret: chain.Hex(key.Key), - Chain: chain.ChainTypeTezos, - Contract: contract, - }, - Initiator: value.Initiator, - Participant: value.Participant, - RefundTime: refundTime, + HashedSecretHex: chain.Hex(key.Key), + Chain: chain.ChainTypeTezos, + ContractAddress: contract, + BlockNumber: uint64(key.FirstLevel), + Initiator: value.Initiator, + Participant: value.Participant, + RefundTime: refundTime, } if err := event.SetPayOff(value.Payoff, t.minPayoff); err != nil { if errors.Is(err, chain.ErrMinPayoff) { - t.warn().Str("hashed_secret", event.HashedSecret.String()).Msg("skip because of small pay off") + t.warn().Str("hashed_secret", event.HashedSecretHex.String()).Msg("skip because of small pay off") return nil } return err @@ -624,7 +609,7 @@ func (t *Tezos) parseContractValueKeys(key api.BigMapKey, contract string) error return err } - t.initChan <- event + t.events <- event return nil } @@ -640,19 +625,18 @@ func (t *Tezos) parseTokensValueKeys(key api.BigMapKey, contract string) error { } event := chain.InitEvent{ - Event: chain.Event{ - HashedSecret: chain.Hex(key.Key), - Chain: chain.ChainTypeTezos, - Contract: contract, - }, - Initiator: value.Initiator, - Participant: value.Participant, - RefundTime: refundTime, + HashedSecretHex: chain.Hex(key.Key), + Chain: chain.ChainTypeTezos, + ContractAddress: contract, + BlockNumber: uint64(key.FirstLevel), + Initiator: value.Initiator, + Participant: value.Participant, + RefundTime: refundTime, } if err := event.SetPayOff(value.Payoff, t.minPayoff); err != nil { if errors.Is(err, chain.ErrMinPayoff) { - t.warn().Str("hashed_secret", event.HashedSecret.String()).Msg("skip because of small pay off") + t.warn().Str("hashed_secret", event.HashedSecretHex.String()).Msg("skip because of small pay off") return nil } return err @@ -662,7 +646,7 @@ func (t *Tezos) parseTokensValueKeys(key api.BigMapKey, contract string) error { return err } - t.initChan <- event + t.events <- event return nil }