Skip to content

Commit 4513f12

Browse files
committed
block-stm integration
patch tx response to fix tx index and log index
1 parent 2a9b5bf commit 4513f12

File tree

20 files changed

+337
-181
lines changed

20 files changed

+337
-181
lines changed

app/ante/handler_options.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ func newEthAnteHandler(ctx sdk.Context, options HandlerOptions, extra ...sdk.Ant
8686
NewEthGasConsumeDecorator(options.EvmKeeper, options.MaxTxGasWanted, ethCfg, evmDenom, baseFee),
8787
NewEthIncrementSenderSequenceDecorator(options.AccountKeeper), // innermost AnteDecorator.
8888
NewGasWantedDecorator(options.FeeMarketKeeper, ethCfg),
89-
NewEthEmitEventDecorator(options.EvmKeeper), // emit eth tx hash and index at the very last ante handler.
9089
}
9190
decorators = append(decorators, extra...)
9291
return sdk.ChainAnteDecorators(decorators...)

app/ante/interfaces.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ type EVMKeeper interface {
4141
DynamicFeeEVMKeeper
4242

4343
DeductTxCostsFromUserBalance(ctx sdk.Context, fees sdk.Coins, from common.Address) error
44-
ResetTransientGasUsed(ctx sdk.Context)
45-
GetTxIndexTransient(ctx sdk.Context) uint64
4644
}
4745

4846
type protoTxProvider interface {

app/ante/setup.go

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package ante
1818
import (
1919
"errors"
2020
"math/big"
21-
"strconv"
2221

2322
errorsmod "cosmossdk.io/errors"
2423
sdkmath "cosmossdk.io/math"
@@ -53,46 +52,9 @@ func (esc EthSetupContextDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simul
5352
newCtx = ctx.WithGasMeter(storetypes.NewInfiniteGasMeter()).
5453
WithKVGasConfig(storetypes.GasConfig{}).
5554
WithTransientKVGasConfig(storetypes.GasConfig{})
56-
57-
// Reset transient gas used to prepare the execution of current cosmos tx.
58-
// Transient gas-used is necessary to sum the gas-used of cosmos tx, when it contains multiple eth msgs.
59-
esc.evmKeeper.ResetTransientGasUsed(ctx)
6055
return next(newCtx, tx, simulate)
6156
}
6257

63-
// EthEmitEventDecorator emit events in ante handler in case of tx execution failed (out of block gas limit).
64-
type EthEmitEventDecorator struct {
65-
evmKeeper EVMKeeper
66-
}
67-
68-
// NewEthEmitEventDecorator creates a new EthEmitEventDecorator
69-
func NewEthEmitEventDecorator(evmKeeper EVMKeeper) EthEmitEventDecorator {
70-
return EthEmitEventDecorator{evmKeeper}
71-
}
72-
73-
// AnteHandle emits some basic events for the eth messages
74-
func (eeed EthEmitEventDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) {
75-
// After eth tx passed ante handler, the fee is deducted and nonce increased, it shouldn't be ignored by json-rpc,
76-
// we need to emit some basic events at the very end of ante handler to be indexed by tendermint.
77-
txIndex := eeed.evmKeeper.GetTxIndexTransient(ctx)
78-
for i, msg := range tx.GetMsgs() {
79-
msgEthTx, ok := msg.(*evmtypes.MsgEthereumTx)
80-
if !ok {
81-
return ctx, errorsmod.Wrapf(errortypes.ErrUnknownRequest, "invalid message type %T, expected %T", msg, (*evmtypes.MsgEthereumTx)(nil))
82-
}
83-
84-
// emit ethereum tx hash as an event so that it can be indexed by Tendermint for query purposes
85-
// it's emitted in ante handler, so we can query failed transaction (out of block gas limit).
86-
ctx.EventManager().EmitEvent(sdk.NewEvent(
87-
evmtypes.EventTypeEthereumTx,
88-
sdk.NewAttribute(evmtypes.AttributeKeyEthereumTxHash, msgEthTx.Hash),
89-
sdk.NewAttribute(evmtypes.AttributeKeyTxIndex, strconv.FormatUint(txIndex+uint64(i), 10)),
90-
))
91-
}
92-
93-
return next(ctx, tx, simulate)
94-
}
95-
9658
// EthValidateBasicDecorator is adapted from ValidateBasicDecorator from cosmos-sdk, it ignores ErrNoSignatures
9759
type EthValidateBasicDecorator struct {
9860
evmParams *evmtypes.Params

app/app.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"net/http"
2424
"os"
2525
"path/filepath"
26+
"sort"
2627

2728
autocliv1 "cosmossdk.io/api/cosmos/autocli/v1"
2829
reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1"
@@ -341,6 +342,16 @@ func NewEthermintApp(
341342
memKeys: memKeys,
342343
}
343344

345+
app.SetDisableBlockGasMeter(true)
346+
347+
executor := cast.ToString(appOpts.Get(srvflags.EVMBlockExecutor))
348+
if executor == "block-stm" {
349+
workers := cast.ToInt(appOpts.Get(srvflags.EVMBlockSTMWorkers))
350+
app.SetTxExecutor(STMTxExecutor(app.GetStoreKeys(), workers))
351+
} else {
352+
app.SetTxExecutor(DefaultTxExecutor)
353+
}
354+
344355
// init params keeper and subspaces
345356
app.ParamsKeeper = initParamsKeeper(appCodec, cdc, keys[paramstypes.StoreKey], tkeys[paramstypes.TStoreKey])
346357

@@ -951,6 +962,22 @@ func (app *EthermintApp) GetMemKey(storeKey string) *storetypes.MemoryStoreKey {
951962
return app.memKeys[storeKey]
952963
}
953964

965+
// GetStoreKeys returns all the stored store keys.
966+
func (app *EthermintApp) GetStoreKeys() []storetypes.StoreKey {
967+
keys := make([]storetypes.StoreKey, 0, len(app.keys))
968+
for _, key := range app.keys {
969+
keys = append(keys, key)
970+
}
971+
for _, key := range app.tkeys {
972+
keys = append(keys, key)
973+
}
974+
for _, key := range app.memKeys {
975+
keys = append(keys, key)
976+
}
977+
sort.SliceStable(keys, func(i, j int) bool { return keys[i].Name() < keys[j].Name() })
978+
return keys
979+
}
980+
954981
// GetSubspace returns a param subspace for a given module name.
955982
//
956983
// NOTE: This is solely to be used for testing purposes.

app/executor.go

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
package app
2+
3+
import (
4+
"context"
5+
"io"
6+
7+
"cosmossdk.io/store/cachekv"
8+
"cosmossdk.io/store/cachemulti"
9+
"cosmossdk.io/store/tracekv"
10+
storetypes "cosmossdk.io/store/types"
11+
abci "github.com/cometbft/cometbft/abci/types"
12+
"github.com/cosmos/cosmos-sdk/baseapp"
13+
evmtypes "github.com/evmos/ethermint/x/evm/types"
14+
block_stm "github.com/yihuang/go-block-stm"
15+
)
16+
17+
func DefaultTxExecutor(ctx context.Context,
18+
blockSize int,
19+
ms storetypes.MultiStore,
20+
deliverTxWithMultiStore func(int, storetypes.MultiStore) *abci.ExecTxResult,
21+
) ([]*abci.ExecTxResult, error) {
22+
results := make([]*abci.ExecTxResult, blockSize)
23+
for i := 0; i < blockSize; i++ {
24+
results[i] = deliverTxWithMultiStore(i, ms)
25+
}
26+
return evmtypes.PatchTxResponses(results), nil
27+
}
28+
29+
func STMTxExecutor(stores []storetypes.StoreKey, workers int) baseapp.TxExecutor {
30+
return func(
31+
ctx context.Context,
32+
blockSize int,
33+
ms storetypes.MultiStore,
34+
deliverTxWithMultiStore func(int, storetypes.MultiStore) *abci.ExecTxResult,
35+
) ([]*abci.ExecTxResult, error) {
36+
if blockSize == 0 {
37+
return nil, nil
38+
}
39+
results := make([]*abci.ExecTxResult, blockSize)
40+
if err := block_stm.ExecuteBlock(
41+
ctx,
42+
blockSize,
43+
stores,
44+
stmMultiStoreWrapper{ms},
45+
workers,
46+
func(txn block_stm.TxnIndex, ms block_stm.MultiStore) {
47+
result := deliverTxWithMultiStore(int(txn), newMultiStoreWrapper(ms, stores))
48+
results[txn] = result
49+
},
50+
); err != nil {
51+
return nil, err
52+
}
53+
54+
return evmtypes.PatchTxResponses(results), nil
55+
}
56+
}
57+
58+
type storeWrapper struct {
59+
block_stm.KVStore
60+
}
61+
62+
var (
63+
_ storetypes.Store = storeWrapper{}
64+
_ storetypes.KVStore = storeWrapper{}
65+
)
66+
67+
func (s storeWrapper) GetStoreType() storetypes.StoreType {
68+
return storetypes.StoreTypeIAVL
69+
}
70+
71+
func (s storeWrapper) CacheWrap() storetypes.CacheWrap {
72+
return cachekv.NewStore(storetypes.KVStore(s))
73+
}
74+
75+
func (s storeWrapper) CacheWrapWithTrace(w io.Writer, tc storetypes.TraceContext) storetypes.CacheWrap {
76+
return cachekv.NewStore(tracekv.NewStore(s, w, tc))
77+
}
78+
79+
type msWrapper struct {
80+
block_stm.MultiStore
81+
stores []storetypes.StoreKey
82+
keysByName map[string]storetypes.StoreKey
83+
}
84+
85+
var _ storetypes.MultiStore = msWrapper{}
86+
87+
func newMultiStoreWrapper(ms block_stm.MultiStore, stores []storetypes.StoreKey) msWrapper {
88+
keysByName := make(map[string]storetypes.StoreKey)
89+
for _, k := range stores {
90+
keysByName[k.Name()] = k
91+
}
92+
return msWrapper{ms, stores, keysByName}
93+
}
94+
95+
func (ms msWrapper) GetStore(key storetypes.StoreKey) storetypes.Store {
96+
return storetypes.Store(ms.GetKVStore(key))
97+
}
98+
99+
func (ms msWrapper) GetKVStore(key storetypes.StoreKey) storetypes.KVStore {
100+
return storeWrapper{ms.MultiStore.GetKVStore(key)}
101+
}
102+
103+
func (ms msWrapper) CacheMultiStore() storetypes.CacheMultiStore {
104+
stores := make(map[storetypes.StoreKey]storetypes.CacheWrapper)
105+
for _, k := range ms.stores {
106+
store := ms.GetKVStore(k)
107+
stores[k] = store
108+
}
109+
return cachemulti.NewStore(nil, stores, ms.keysByName, nil, nil)
110+
}
111+
112+
func (ms msWrapper) CacheMultiStoreWithVersion(_ int64) (storetypes.CacheMultiStore, error) {
113+
panic("cannot branch cached multi-store with a version")
114+
}
115+
116+
// Implements CacheWrapper.
117+
func (ms msWrapper) CacheWrap() storetypes.CacheWrap {
118+
return ms.CacheMultiStore().(storetypes.CacheWrap)
119+
}
120+
121+
// CacheWrapWithTrace implements the CacheWrapper interface.
122+
func (ms msWrapper) CacheWrapWithTrace(_ io.Writer, _ storetypes.TraceContext) storetypes.CacheWrap {
123+
return ms.CacheWrap()
124+
}
125+
126+
// GetStoreType returns the type of the store.
127+
func (ms msWrapper) GetStoreType() storetypes.StoreType {
128+
return storetypes.StoreTypeMulti
129+
}
130+
131+
// LatestVersion returns the branch version of the store
132+
func (ms msWrapper) LatestVersion() int64 {
133+
panic("cannot get latest version from branch cached multi-store")
134+
}
135+
136+
// Implements interface MultiStore
137+
func (ms msWrapper) SetTracer(w io.Writer) storetypes.MultiStore {
138+
return nil
139+
}
140+
141+
// Implements interface MultiStore
142+
func (ms msWrapper) SetTracingContext(storetypes.TraceContext) storetypes.MultiStore {
143+
return nil
144+
}
145+
146+
// Implements interface MultiStore
147+
func (ms msWrapper) TracingEnabled() bool {
148+
return false
149+
}
150+
151+
type stmMultiStoreWrapper struct {
152+
inner storetypes.MultiStore
153+
}
154+
155+
var _ block_stm.MultiStore = stmMultiStoreWrapper{}
156+
157+
func (ms stmMultiStoreWrapper) GetKVStore(key storetypes.StoreKey) block_stm.KVStore {
158+
return block_stm.KVStore(ms.inner.GetKVStore(key))
159+
}

go.mod

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ require (
4949
github.com/tidwall/gjson v1.14.4
5050
github.com/tidwall/sjson v1.2.5
5151
github.com/tyler-smith/go-bip39 v1.1.0
52+
github.com/yihuang/go-block-stm v0.0.0-20240304045905-48d16c0e4681
5253
golang.org/x/net v0.21.0
5354
golang.org/x/sync v0.6.0
5455
golang.org/x/text v0.14.0
@@ -219,12 +220,12 @@ require (
219220
go.opentelemetry.io/otel/metric v1.22.0 // indirect
220221
go.opentelemetry.io/otel/trace v1.22.0 // indirect
221222
go.uber.org/multierr v1.11.0 // indirect
222-
golang.org/x/crypto v0.21.0 // indirect
223+
golang.org/x/crypto v0.19.0 // indirect
223224
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect
224225
golang.org/x/mod v0.15.0 // indirect
225-
golang.org/x/oauth2 v0.17.0 // indirect
226-
golang.org/x/sys v0.18.0 // indirect
227-
golang.org/x/term v0.18.0 // indirect
226+
golang.org/x/oauth2 v0.16.0 // indirect
227+
golang.org/x/sys v0.17.0 // indirect
228+
golang.org/x/term v0.17.0 // indirect
228229
golang.org/x/time v0.5.0 // indirect
229230
golang.org/x/tools v0.18.0 // indirect
230231
google.golang.org/api v0.162.0 // indirect
@@ -243,10 +244,12 @@ replace (
243244
// use cosmos keyring
244245
github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0
245246
github.com/cockroachdb/pebble => github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811
247+
github.com/cosmos/cosmos-sdk => github.com/yihuang/cosmos-sdk v0.43.0-beta1.0.20240308010925-23e7ac6fc2d4
246248
github.com/ethereum/go-ethereum => github.com/crypto-org-chain/go-ethereum v1.10.20-0.20231207063621-43cf32d91c3e
247249
// Fix upstream GHSA-h395-qcrw-5vmq vulnerability.
248250
// TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409
249251
github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.7.0
250252
github.com/linxGnu/grocksdb => github.com/linxGnu/grocksdb v1.8.0
251253
github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7
254+
github.com/tidwall/btree => github.com/yihuang/btree v0.0.0-20240215071918-6726a9b22e40
252255
)

go.sum

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -381,8 +381,6 @@ github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAK
381381
github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA=
382382
github.com/cosmos/cosmos-proto v1.0.0-beta.4 h1:aEL7tU/rLOmxZQ9z4i7mzxcLbSCY48OdY7lIWTLG7oU=
383383
github.com/cosmos/cosmos-proto v1.0.0-beta.4/go.mod h1:oeB+FyVzG3XrQJbJng0EnV8Vljfk9XvTIpGILNU/9Co=
384-
github.com/cosmos/cosmos-sdk v0.50.5-0.20240307161517-f9041cde5c86 h1:EV7Dczm4q19ZaAE4n4XmCfSFBhz/ol+jDuNU2ov/IOs=
385-
github.com/cosmos/cosmos-sdk v0.50.5-0.20240307161517-f9041cde5c86/go.mod h1:XDxLZycgyFXEBpgCdxOfYt5//bHCK6Z7b5FqkX6eV7M=
386384
github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY=
387385
github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw=
388386
github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE=
@@ -1093,8 +1091,8 @@ github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70
10931091
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc=
10941092
github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E=
10951093
github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME=
1096-
github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI=
1097-
github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=
1094+
github.com/test-go/testify v1.1.4 h1:Tf9lntrKUMHiXQ07qBScBTSA0dhYQlu83hswqelv1iE=
1095+
github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU=
10981096
github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
10991097
github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM=
11001098
github.com/tidwall/gjson v1.14.4/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
@@ -1127,6 +1125,12 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q
11271125
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
11281126
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
11291127
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
1128+
github.com/yihuang/btree v0.0.0-20240215071918-6726a9b22e40 h1:FPcNbZSQgK2d/Oj5tD4TwJM8ealdG4DLYvETLV9D5EE=
1129+
github.com/yihuang/btree v0.0.0-20240215071918-6726a9b22e40/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=
1130+
github.com/yihuang/cosmos-sdk v0.43.0-beta1.0.20240308010925-23e7ac6fc2d4 h1:CHVMLAI4QgXH9TL0sCH5SlLbkPRdygjMq84cdiC1WSY=
1131+
github.com/yihuang/cosmos-sdk v0.43.0-beta1.0.20240308010925-23e7ac6fc2d4/go.mod h1:XDxLZycgyFXEBpgCdxOfYt5//bHCK6Z7b5FqkX6eV7M=
1132+
github.com/yihuang/go-block-stm v0.0.0-20240304045905-48d16c0e4681 h1:NRTXt16IYNBL0TXA5ctE+lwc49xQuMrozff/PZtnLH0=
1133+
github.com/yihuang/go-block-stm v0.0.0-20240304045905-48d16c0e4681/go.mod h1:EMX4xUF9OcXC9iS9d3TkEkT1Cv5bw5gVwGJB5BKRVyI=
11301134
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
11311135
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
11321136
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -1191,8 +1195,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
11911195
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
11921196
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
11931197
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
1194-
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
1195-
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
1198+
golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo=
1199+
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
11961200
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
11971201
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
11981202
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -1321,8 +1325,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri
13211325
golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
13221326
golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
13231327
golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A=
1324-
golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ=
1325-
golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA=
1328+
golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ=
1329+
golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o=
13261330
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
13271331
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
13281332
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1437,13 +1441,13 @@ golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBc
14371441
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
14381442
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
14391443
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
1440-
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
1441-
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
1444+
golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
1445+
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
14421446
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
14431447
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
14441448
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
1445-
golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
1446-
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
1449+
golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U=
1450+
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
14471451
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
14481452
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
14491453
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

0 commit comments

Comments
 (0)