From b18f7aacf3d29fe288c1b05819e854ff5230ca84 Mon Sep 17 00:00:00 2001 From: jackstar12 Date: Mon, 10 Feb 2025 13:11:34 +0100 Subject: [PATCH] feat: `BumpWalletTransaction` rpc --- docs/grpc.md | 36 + internal/cln/cln.go | 4 + internal/lnd/lnd.go | 4 + internal/macaroons/permissions.go | 4 + .../mocks/lightning/LightningNode_mock.go | 57 + internal/mocks/onchain/Wallet_mock.go | 57 + internal/onchain/onchain.go | 1 + internal/onchain/wallet/wallet.go | 182 ++- internal/onchain/wallet/wallet_test.go | 31 + internal/rpcserver/router.go | 12 + internal/rpcserver/rpcserver_test.go | 101 +- internal/test/test.go | 16 + pkg/boltzrpc/autoswaprpc/autoswaprpc.pb.go | 26 +- .../autoswaprpc/autoswaprpc_grpc.pb.go | 16 +- pkg/boltzrpc/boltzrpc.pb.go | 1030 ++++++++++------- pkg/boltzrpc/boltzrpc.pb.gw.go | 6 +- pkg/boltzrpc/boltzrpc.proto | 18 + pkg/boltzrpc/boltzrpc_grpc.pb.go | 89 +- pkg/boltzrpc/client/client.go | 4 + 19 files changed, 1139 insertions(+), 555 deletions(-) diff --git a/docs/grpc.md b/docs/grpc.md index fc6fa402..bf3ef5a8 100644 --- a/docs/grpc.md +++ b/docs/grpc.md @@ -197,6 +197,14 @@ Returns recent transactions from a wallet. | ------- | -------- | | [`ListWalletTransactionsRequest`](#listwallettransactionsrequest) | [`ListWalletTransactionsResponse`](#listwallettransactionsresponse) | +#### BumpWalletTransaction + +Increase the fee of a wallet transaction using RBF. + +| Request | Response | +| ------- | -------- | +| [`BumpWalletTransactionRequest`](#bumpwallettransactionrequest) | [`BumpWalletTransactionResponse`](#bumpwallettransactionresponse) | + #### GetWalletCredentials Returns the credentials of a wallet. The password will be required if the wallet is encrypted. @@ -395,6 +403,34 @@ Bakes a new macaroon with the specified permissions. The macaroon can also be re +#### BumpWalletTransactionRequest + + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `id` | [`uint64`](#uint64) | | id of the wallet which the transaction belongs to | +| `sat_per_vbyte` | [`double`](#double) | | fee rate for the new transaction | +| `tx_id` | [`string`](#string) | | id of the transaction to bump | + + + + + +#### BumpWalletTransactionResponse + + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `tx_id` | [`string`](#string) | | | + + + + + #### ChainSwapData diff --git a/internal/cln/cln.go b/internal/cln/cln.go index 0f545c37..69da1bdb 100755 --- a/internal/cln/cln.go +++ b/internal/cln/cln.go @@ -166,6 +166,10 @@ func (c *Cln) GetTransactions(limit, offset uint64) ([]*onchain.WalletTransactio return nil, errors.New("not implemented for cln") } +func (c *Cln) BumpTransactionFee(txId string, feeRate float64) (string, error) { + return "", errors.New("not implemented for cln") +} + func (c *Cln) SanityCheck() (string, error) { info, err := c.Client.Getinfo(context.Background(), &protos.GetinfoRequest{}) if err != nil { diff --git a/internal/lnd/lnd.go b/internal/lnd/lnd.go index f8b19d3b..ef679d68 100644 --- a/internal/lnd/lnd.go +++ b/internal/lnd/lnd.go @@ -225,6 +225,10 @@ func (lnd *LND) GetTransactions(limit, offset uint64) ([]*onchain.WalletTransact return nil, errors.New("not implemented for lnd") } +func (lnd *LND) BumpTransactionFee(txId string, feeRate float64) (string, error) { + return "", errors.New("not implemented for lnd") +} + func (lnd *LND) CreateInvoice(value uint64, preimage []byte, expiry int64, memo string) (*lightning.AddInvoiceResponse, error) { request := &lnrpc.Invoice{ Memo: memo, diff --git a/internal/macaroons/permissions.go b/internal/macaroons/permissions.go index f9a233cc..e3993e63 100644 --- a/internal/macaroons/permissions.go +++ b/internal/macaroons/permissions.go @@ -161,6 +161,10 @@ var ( Entity: "wallet", Action: "read", }}, + "/boltzrpc.Boltz/BumpWalletTransaction": {{ + Entity: "wallet", + Action: "write", + }}, "/boltzrpc.Boltz/GetWallet": {{ Entity: "wallet", Action: "read", diff --git a/internal/mocks/lightning/LightningNode_mock.go b/internal/mocks/lightning/LightningNode_mock.go index ccff25fe..4303e251 100644 --- a/internal/mocks/lightning/LightningNode_mock.go +++ b/internal/mocks/lightning/LightningNode_mock.go @@ -24,6 +24,63 @@ func (_m *MockLightningNode) EXPECT() *MockLightningNode_Expecter { return &MockLightningNode_Expecter{mock: &_m.Mock} } +// BumpTransactionFee provides a mock function with given fields: txId, satPerVbyte +func (_m *MockLightningNode) BumpTransactionFee(txId string, satPerVbyte float64) (string, error) { + ret := _m.Called(txId, satPerVbyte) + + if len(ret) == 0 { + panic("no return value specified for BumpTransactionFee") + } + + var r0 string + var r1 error + if rf, ok := ret.Get(0).(func(string, float64) (string, error)); ok { + return rf(txId, satPerVbyte) + } + if rf, ok := ret.Get(0).(func(string, float64) string); ok { + r0 = rf(txId, satPerVbyte) + } else { + r0 = ret.Get(0).(string) + } + + if rf, ok := ret.Get(1).(func(string, float64) error); ok { + r1 = rf(txId, satPerVbyte) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockLightningNode_BumpTransactionFee_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BumpTransactionFee' +type MockLightningNode_BumpTransactionFee_Call struct { + *mock.Call +} + +// BumpTransactionFee is a helper method to define mock.On call +// - txId string +// - satPerVbyte float64 +func (_e *MockLightningNode_Expecter) BumpTransactionFee(txId interface{}, satPerVbyte interface{}) *MockLightningNode_BumpTransactionFee_Call { + return &MockLightningNode_BumpTransactionFee_Call{Call: _e.mock.On("BumpTransactionFee", txId, satPerVbyte)} +} + +func (_c *MockLightningNode_BumpTransactionFee_Call) Run(run func(txId string, satPerVbyte float64)) *MockLightningNode_BumpTransactionFee_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(string), args[1].(float64)) + }) + return _c +} + +func (_c *MockLightningNode_BumpTransactionFee_Call) Return(_a0 string, _a1 error) *MockLightningNode_BumpTransactionFee_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockLightningNode_BumpTransactionFee_Call) RunAndReturn(run func(string, float64) (string, error)) *MockLightningNode_BumpTransactionFee_Call { + _c.Call.Return(run) + return _c +} + // CheckInvoicePaid provides a mock function with given fields: paymentHash func (_m *MockLightningNode) CheckInvoicePaid(paymentHash []byte) (bool, error) { ret := _m.Called(paymentHash) diff --git a/internal/mocks/onchain/Wallet_mock.go b/internal/mocks/onchain/Wallet_mock.go index db40a364..f1be4651 100644 --- a/internal/mocks/onchain/Wallet_mock.go +++ b/internal/mocks/onchain/Wallet_mock.go @@ -20,6 +20,63 @@ func (_m *MockWallet) EXPECT() *MockWallet_Expecter { return &MockWallet_Expecter{mock: &_m.Mock} } +// BumpTransactionFee provides a mock function with given fields: txId, satPerVbyte +func (_m *MockWallet) BumpTransactionFee(txId string, satPerVbyte float64) (string, error) { + ret := _m.Called(txId, satPerVbyte) + + if len(ret) == 0 { + panic("no return value specified for BumpTransactionFee") + } + + var r0 string + var r1 error + if rf, ok := ret.Get(0).(func(string, float64) (string, error)); ok { + return rf(txId, satPerVbyte) + } + if rf, ok := ret.Get(0).(func(string, float64) string); ok { + r0 = rf(txId, satPerVbyte) + } else { + r0 = ret.Get(0).(string) + } + + if rf, ok := ret.Get(1).(func(string, float64) error); ok { + r1 = rf(txId, satPerVbyte) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockWallet_BumpTransactionFee_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BumpTransactionFee' +type MockWallet_BumpTransactionFee_Call struct { + *mock.Call +} + +// BumpTransactionFee is a helper method to define mock.On call +// - txId string +// - satPerVbyte float64 +func (_e *MockWallet_Expecter) BumpTransactionFee(txId interface{}, satPerVbyte interface{}) *MockWallet_BumpTransactionFee_Call { + return &MockWallet_BumpTransactionFee_Call{Call: _e.mock.On("BumpTransactionFee", txId, satPerVbyte)} +} + +func (_c *MockWallet_BumpTransactionFee_Call) Run(run func(txId string, satPerVbyte float64)) *MockWallet_BumpTransactionFee_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(string), args[1].(float64)) + }) + return _c +} + +func (_c *MockWallet_BumpTransactionFee_Call) Return(_a0 string, _a1 error) *MockWallet_BumpTransactionFee_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockWallet_BumpTransactionFee_Call) RunAndReturn(run func(string, float64) (string, error)) *MockWallet_BumpTransactionFee_Call { + _c.Call.Return(run) + return _c +} + // Disconnect provides a mock function with given fields: func (_m *MockWallet) Disconnect() error { ret := _m.Called() diff --git a/internal/onchain/onchain.go b/internal/onchain/onchain.go index 51042155..1d20908a 100644 --- a/internal/onchain/onchain.go +++ b/internal/onchain/onchain.go @@ -94,6 +94,7 @@ type Wallet interface { GetWalletInfo() WalletInfo Disconnect() error GetTransactions(limit, offset uint64) ([]*WalletTransaction, error) + BumpTransactionFee(txId string, satPerVbyte float64) (string, error) } type ElectrumOptions struct { diff --git a/internal/onchain/wallet/wallet.go b/internal/onchain/wallet/wallet.go index 6910102f..ca86834b 100644 --- a/internal/onchain/wallet/wallet.go +++ b/internal/onchain/wallet/wallet.go @@ -692,17 +692,19 @@ func (wallet *Wallet) createTransaction(address string, amount uint64, satPerVby return nil, err } - // Disable RBF - for asset, current := range outputs.Unspent { - if len(current) > int(config.MaxInputs) { - if sendAll { - outputs.Unspent[asset] = current[:config.MaxInputs] - } else { - return nil, errors.New("too many inputs") + // Disable RBF on liquid + if wallet.Currency == boltz.CurrencyLiquid { + for asset, current := range outputs.Unspent { + if len(current) > int(config.MaxInputs) { + if sendAll { + outputs.Unspent[asset] = current[:config.MaxInputs] + } else { + return nil, errors.New("too many inputs") + } + } + for _, output := range current { + output["sequence"] = wire.MaxTxInSequenceNum - 1 } - } - for _, output := range current { - output["sequence"] = wire.MaxTxInSequenceNum - 1 } } @@ -738,35 +740,10 @@ func (wallet *Wallet) createTransaction(address string, amount uint64, satPerVby return result, nil } -func (wallet *Wallet) GetSendFee(address string, amount uint64, satPerVbyte float64, sendAll bool) (send uint64, fee uint64, err error) { - result, err := wallet.createTransaction(address, amount, satPerVbyte, sendAll) - if err != nil { - return 0, 0, err - } - var createTx struct { - Fee uint64 - Addressees []struct { - Satoshi uint64 - } - Error string - } - if err := mapstructure.Decode(result, &createTx); err != nil { - return 0, 0, err - } - if createTx.Error != "" { - return 0, 0, errors.New(createTx.Error) - } - return createTx.Addressees[0].Satoshi, createTx.Fee, nil -} - -func (wallet *Wallet) SendToAddress(address string, amount uint64, satPerVbyte float64, sendAll bool) (tx string, err error) { - result, err := wallet.createTransaction(address, amount, satPerVbyte, sendAll) - if err != nil { - return "", err - } - +func (wallet *Wallet) broadcastTransaction(transaction any) (tx string, err error) { handler := new(AuthHandler) - params, free := toJson(result) + params, free := toJson(transaction) + var result map[string]any if err := withAuthHandler(C.GA_blind_transaction(wallet.session, params, handler), handler, &result); err != nil { return "", err } @@ -799,7 +776,37 @@ func (wallet *Wallet) SendToAddress(address string, amount uint64, satPerVbyte f return sendTx.TxHash, nil } -func (wallet *Wallet) GetTransactions(limit, offset uint64) ([]*onchain.WalletTransaction, error) { +func (wallet *Wallet) GetSendFee(address string, amount uint64, satPerVbyte float64, sendAll bool) (send uint64, fee uint64, err error) { + result, err := wallet.createTransaction(address, amount, satPerVbyte, sendAll) + if err != nil { + return 0, 0, err + } + var createTx struct { + Fee uint64 + Addressees []struct { + Satoshi uint64 + } + Error string + } + if err := mapstructure.Decode(result, &createTx); err != nil { + return 0, 0, err + } + if createTx.Error != "" { + return 0, 0, errors.New(createTx.Error) + } + return createTx.Addressees[0].Satoshi, createTx.Fee, nil +} + +func (wallet *Wallet) SendToAddress(address string, amount uint64, satPerVbyte float64, sendAll bool) (tx string, err error) { + result, err := wallet.createTransaction(address, amount, satPerVbyte, sendAll) + if err != nil { + return "", err + } + + return wallet.broadcastTransaction(result) +} + +func (wallet *Wallet) getTransactions(limit, offset uint64) ([]map[string]any, error) { if wallet.subaccount == nil { return nil, ErrSubAccountNotSet } @@ -817,27 +824,19 @@ func (wallet *Wallet) GetTransactions(limit, offset uint64) ([]*onchain.WalletTr defer free() handler := new(AuthHandler) var result struct { - Transactions []struct { - BlockHeight uint32 `json:"block_height"` - TxId string `json:"txhash"` - Inputs []struct { - Address string `json:"address"` - Satoshi uint64 `json:"satoshi"` - IsRelevant bool `json:"is_relevant"` - } - Outputs []struct { - Address string `json:"address"` - Satoshi uint64 `json:"satoshi"` - IsRelevant bool `json:"is_relevant"` - } - Timestamp int64 `json:"created_at_ts"` - Type string `json:"type"` - Satoshi map[string]int64 `json:"satoshi"` - } `json:"transactions"` + Transactions []map[string]any `json:"transactions"` } if err := withAuthHandler(C.GA_get_transactions(wallet.session, params, handler), handler, &result); err != nil { return nil, err } + return result.Transactions, nil +} + +func (wallet *Wallet) GetTransactions(limit, offset uint64) ([]*onchain.WalletTransaction, error) { + result, err := wallet.getTransactions(limit, offset) + if err != nil { + return nil, err + } asset := "btc" if wallet.Currency == boltz.CurrencyLiquid { @@ -845,7 +844,27 @@ func (wallet *Wallet) GetTransactions(limit, offset uint64) ([]*onchain.WalletTr } var transactions []*onchain.WalletTransaction - for _, tx := range result.Transactions { + for _, rawTx := range result { + var tx struct { + BlockHeight uint32 `mapstructure:"block_height"` + TxId string `mapstructure:"txhash"` + Inputs []struct { + Address string `mapstructure:"address"` + Satoshi uint64 `mapstructure:"satoshi"` + IsRelevant bool `mapstructure:"is_relevant"` + } + Outputs []struct { + Address string `mapstructure:"address"` + Satoshi uint64 `mapstructure:"satoshi"` + IsRelevant bool `mapstructure:"is_relevant"` + } + Timestamp int64 `mapstructure:"created_at_ts"` + Type string `mapstructure:"type"` + Satoshi map[string]int64 `mapstructure:"satoshi"` + } + if err := mapstructure.Decode(rawTx, &tx); err != nil { + return nil, err + } var outputs []onchain.TransactionOutput for _, out := range tx.Outputs { outputs = append(outputs, onchain.TransactionOutput{ @@ -867,6 +886,55 @@ func (wallet *Wallet) GetTransactions(limit, offset uint64) ([]*onchain.WalletTr return transactions, nil } +func (wallet *Wallet) BumpTransactionFee(txId string, satPerVbyte float64) (string, error) { + if wallet.subaccount == nil { + return "", ErrSubAccountNotSet + } + outputs, err := wallet.getUnspentOutputs(*wallet.subaccount, false) + if err != nil { + return "", err + } + + var limit uint64 = 30 + var offset uint64 + var found any + for { + result, err := wallet.getTransactions(limit, offset) + if err != nil { + return "", err + } + for _, tx := range result { + if tx["txhash"] == txId { + found = tx + break + } + } + if len(result) < int(limit) { + break + } + offset += limit + } + if found == nil { + return "", errors.New("previous transaction not found") + } + + transactionDetails, free := toJson(map[string]any{ + // gdk uses sat/kVB + "fee_rate": satPerVbyte * 1000, + "utxos": outputs.Unspent, + "previous_transaction": found, + }) + defer free() + + handler := new(AuthHandler) + var result any + if err := withAuthHandler(C.GA_create_transaction(wallet.session, transactionDetails, handler), handler, &result); err != nil { + return "", err + } + + return wallet.broadcastTransaction(result) +} + func (wallet *Wallet) Ready() bool { //return wallet.connected && wallet.subaccount != nil return wallet.connected diff --git a/internal/onchain/wallet/wallet_test.go b/internal/onchain/wallet/wallet_test.go index 01933361..4b13a88f 100644 --- a/internal/onchain/wallet/wallet_test.go +++ b/internal/onchain/wallet/wallet_test.go @@ -231,6 +231,37 @@ func TestAutoConsolidate(t *testing.T) { } +func TestWallet_BumpTransactionFee(t *testing.T) { + getTransaction := func(txId string) *onchain.WalletTransaction { + test.WaitWalletTx(t, txId) + txs, err := wallet.GetTransactions(0, 0) + require.NoError(t, err) + for _, tx := range txs { + if tx.Id == txId { + return tx + } + } + require.Fail(t, "transaction not found") + return nil + } + + someAddress := test.GetNewAddress(test.BtcCli) + amount := int64(1000) + + txId, err := wallet.SendToAddress(someAddress, uint64(amount), 1, false) + require.NoError(t, err) + tx := getTransaction(txId) + + newTxId, err := wallet.BumpTransactionFee(txId, 2) + require.NoError(t, err) + test.WaitWalletTx(t, newTxId) + newTx := getTransaction(newTxId) + + oldFee := tx.BalanceChange + amount + newFee := newTx.BalanceChange + amount + require.Equal(t, 2*oldFee, newFee) +} + func TestConfig_Validate(t *testing.T) { tests := []struct { name string diff --git a/internal/rpcserver/router.go b/internal/rpcserver/router.go index a8b3eec9..5b861980 100644 --- a/internal/rpcserver/router.go +++ b/internal/rpcserver/router.go @@ -1614,6 +1614,18 @@ func (server *routedBoltzServer) ListWalletTransactions(ctx context.Context, req return response, nil } +func (server *routedBoltzServer) BumpWalletTransaction(ctx context.Context, request *boltzrpc.BumpWalletTransactionRequest) (*boltzrpc.BumpWalletTransactionResponse, error) { + wallet, err := server.getWallet(ctx, onchain.WalletChecker{Id: &request.Id, AllowReadonly: false}) + if err != nil { + return nil, err + } + tx, err := wallet.BumpTransactionFee(request.TxId, request.GetSatPerVbyte()) + if err != nil { + return nil, err + } + return &boltzrpc.BumpWalletTransactionResponse{TxId: tx}, nil +} + func (server *routedBoltzServer) serializeWallet(wal onchain.Wallet) (*boltzrpc.Wallet, error) { info := wal.GetWalletInfo() result := &boltzrpc.Wallet{ diff --git a/internal/rpcserver/rpcserver_test.go b/internal/rpcserver/rpcserver_test.go index 5f4d06d7..12178809 100644 --- a/internal/rpcserver/rpcserver_test.go +++ b/internal/rpcserver/rpcserver_test.go @@ -7,6 +7,7 @@ import ( "context" "crypto/sha256" "encoding/hex" + "errors" "fmt" "github.com/BoltzExchange/boltz-client/v2/internal/test" "github.com/BoltzExchange/boltz-client/v2/pkg/boltzrpc/serializers" @@ -1349,19 +1350,7 @@ func waitWalletTx(t *testing.T, client client.Boltz, txId string) { } } } - notifier := wallet.TransactionNotifier.Get() - defer wallet.TransactionNotifier.Remove(notifier) - timeout := time.After(30 * time.Second) - for { - select { - case notification := <-notifier: - if notification.TxId == txId || txId == "" { - return - } - case <-timeout: - require.Fail(t, "timed out while waiting for tx") - } - } + test.WaitWalletTx(t, txId) } func TestWalletTransactions(t *testing.T) { @@ -1485,6 +1474,92 @@ func TestWalletTransactions(t *testing.T) { test.MineBlock() } +func TestBumpWalletTransaction(t *testing.T) { + chain := getOnchain(t, loadConfig(t)) + client, _, stop := setup(t, setupOptions{chain: chain}) + defer stop() + + request := &boltzrpc.BumpWalletTransactionRequest{ + Id: 1234, + TxId: "transaction", + SatPerVbyte: 10, + } + newTxId := "newTransaction" + + tests := []struct { + desc string + setupWallet func(mock *onchainmock.MockWallet) + wantErr string + }{ + { + desc: "Success", + setupWallet: func(mock *onchainmock.MockWallet) { + mock.EXPECT().GetWalletInfo().Return(onchain.WalletInfo{ + Id: request.Id, + Readonly: false, + TenantId: database.DefaultTenantId, + }) + mock.EXPECT().BumpTransactionFee(request.TxId, request.SatPerVbyte).Return(newTxId, nil) + }, + }, + { + desc: "Error", + setupWallet: func(mock *onchainmock.MockWallet) { + mock.EXPECT().GetWalletInfo().Return(onchain.WalletInfo{ + Id: request.Id, + Readonly: false, + TenantId: database.DefaultTenantId, + }) + mock.EXPECT().BumpTransactionFee(request.TxId, request.SatPerVbyte).Return("", errors.New("error")) + }, + wantErr: "error", + }, + { + desc: "Not Found", + setupWallet: func(mock *onchainmock.MockWallet) { + mock.EXPECT().GetWalletInfo().Return(onchain.WalletInfo{ + Id: 12342, + Readonly: false, + TenantId: database.DefaultTenantId, + }) + }, + wantErr: "not found", + }, + { + desc: "Readonly", + setupWallet: func(mock *onchainmock.MockWallet) { + mock.EXPECT().GetWalletInfo().Return(onchain.WalletInfo{ + Id: request.Id, + Readonly: true, + TenantId: database.DefaultTenantId, + }) + }, + wantErr: "not found", + }, + } + + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + mockWallet := onchainmock.NewMockWallet(t) + mockWallet.EXPECT().Ready().Return(true) + tc.setupWallet(mockWallet) + + chain.AddWallet(mockWallet) + t.Cleanup(func() { + chain.RemoveWallet(mockWallet.GetWalletInfo().Id) + }) + + _, err := client.BumpWalletTransaction(request) + if tc.wantErr != "" { + require.Error(t, err) + require.Contains(t, err.Error(), tc.wantErr) + } else { + require.NoError(t, err) + } + }) + } +} + func TestWallet(t *testing.T) { client, _, stop := setup(t, setupOptions{}) defer stop() diff --git a/internal/test/test.go b/internal/test/test.go index cfafa0ea..6db8288d 100644 --- a/internal/test/test.go +++ b/internal/test/test.go @@ -234,3 +234,19 @@ func PastDate(duration time.Duration) time.Time { func PrintBackendLogs() { fmt.Println(bash("docker logs boltz-backend")) } + +func WaitWalletTx(t *testing.T, txId string) { + notifier := wallet.TransactionNotifier.Get() + defer wallet.TransactionNotifier.Remove(notifier) + timeout := time.After(30 * time.Second) + for { + select { + case notification := <-notifier: + if notification.TxId == txId { + return + } + case <-timeout: + require.Fail(t, "timed out while waiting for tx") + } + } +} diff --git a/pkg/boltzrpc/autoswaprpc/autoswaprpc.pb.go b/pkg/boltzrpc/autoswaprpc/autoswaprpc.pb.go index 88a9e90a..300c30ba 100644 --- a/pkg/boltzrpc/autoswaprpc/autoswaprpc.pb.go +++ b/pkg/boltzrpc/autoswaprpc/autoswaprpc.pb.go @@ -1,17 +1,17 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.30.0 -// protoc v5.26.0 +// protoc v4.25.1 // source: autoswaprpc/autoswaprpc.proto package autoswaprpc import ( boltzrpc "github.com/BoltzExchange/boltz-client/v2/pkg/boltzrpc" - empty "github.com/golang/protobuf/ptypes/empty" - field_mask "google.golang.org/genproto/protobuf/field_mask" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" reflect "reflect" sync "sync" ) @@ -826,9 +826,9 @@ type UpdateLightningConfigRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Config *LightningConfig `protobuf:"bytes,1,opt,name=config,proto3,oneof" json:"config,omitempty"` - FieldMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=field_mask,json=fieldMask,proto3" json:"field_mask,omitempty"` - Reset_ *bool `protobuf:"varint,3,opt,name=reset,proto3,oneof" json:"reset,omitempty"` + Config *LightningConfig `protobuf:"bytes,1,opt,name=config,proto3,oneof" json:"config,omitempty"` + FieldMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=field_mask,json=fieldMask,proto3" json:"field_mask,omitempty"` + Reset_ *bool `protobuf:"varint,3,opt,name=reset,proto3,oneof" json:"reset,omitempty"` } func (x *UpdateLightningConfigRequest) Reset() { @@ -870,7 +870,7 @@ func (x *UpdateLightningConfigRequest) GetConfig() *LightningConfig { return nil } -func (x *UpdateLightningConfigRequest) GetFieldMask() *field_mask.FieldMask { +func (x *UpdateLightningConfigRequest) GetFieldMask() *fieldmaskpb.FieldMask { if x != nil { return x.FieldMask } @@ -889,9 +889,9 @@ type UpdateChainConfigRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Config *ChainConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` - FieldMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=field_mask,json=fieldMask,proto3,oneof" json:"field_mask,omitempty"` - Reset_ *bool `protobuf:"varint,3,opt,name=reset,proto3,oneof" json:"reset,omitempty"` + Config *ChainConfig `protobuf:"bytes,1,opt,name=config,proto3" json:"config,omitempty"` + FieldMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=field_mask,json=fieldMask,proto3,oneof" json:"field_mask,omitempty"` + Reset_ *bool `protobuf:"varint,3,opt,name=reset,proto3,oneof" json:"reset,omitempty"` } func (x *UpdateChainConfigRequest) Reset() { @@ -933,7 +933,7 @@ func (x *UpdateChainConfigRequest) GetConfig() *ChainConfig { return nil } -func (x *UpdateChainConfigRequest) GetFieldMask() *field_mask.FieldMask { +func (x *UpdateChainConfigRequest) GetFieldMask() *fieldmaskpb.FieldMask { if x != nil { return x.FieldMask } @@ -1604,9 +1604,9 @@ var file_autoswaprpc_autoswaprpc_proto_goTypes = []interface{}{ (*boltzrpc.LightningChannel)(nil), // 20: boltzrpc.LightningChannel (*boltzrpc.Balance)(nil), // 21: boltzrpc.Balance (*boltzrpc.SwapStats)(nil), // 22: boltzrpc.SwapStats - (*field_mask.FieldMask)(nil), // 23: google.protobuf.FieldMask + (*fieldmaskpb.FieldMask)(nil), // 23: google.protobuf.FieldMask (boltzrpc.Currency)(0), // 24: boltzrpc.Currency - (*empty.Empty)(nil), // 25: google.protobuf.Empty + (*emptypb.Empty)(nil), // 25: google.protobuf.Empty } var file_autoswaprpc_autoswaprpc_proto_depIdxs = []int32{ 19, // 0: autoswaprpc.LightningSwap.type:type_name -> boltzrpc.SwapType diff --git a/pkg/boltzrpc/autoswaprpc/autoswaprpc_grpc.pb.go b/pkg/boltzrpc/autoswaprpc/autoswaprpc_grpc.pb.go index b43d22d5..dbde42c3 100644 --- a/pkg/boltzrpc/autoswaprpc/autoswaprpc_grpc.pb.go +++ b/pkg/boltzrpc/autoswaprpc/autoswaprpc_grpc.pb.go @@ -1,17 +1,17 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.0 +// - protoc v4.25.1 // source: autoswaprpc/autoswaprpc.proto package autoswaprpc import ( context "context" - empty "github.com/golang/protobuf/ptypes/empty" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" ) // This is a compile-time assertion to ensure that this generated file @@ -53,7 +53,7 @@ type AutoSwapClient interface { GetConfig(ctx context.Context, in *GetConfigRequest, opts ...grpc.CallOption) (*Config, error) // //Reloads the configuration from disk. - ReloadConfig(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*Config, error) + ReloadConfig(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*Config, error) } type autoSwapClient struct { @@ -118,7 +118,7 @@ func (c *autoSwapClient) GetConfig(ctx context.Context, in *GetConfigRequest, op return out, nil } -func (c *autoSwapClient) ReloadConfig(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*Config, error) { +func (c *autoSwapClient) ReloadConfig(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*Config, error) { out := new(Config) err := c.cc.Invoke(ctx, AutoSwap_ReloadConfig_FullMethodName, in, out, opts...) if err != nil { @@ -151,7 +151,7 @@ type AutoSwapServer interface { GetConfig(context.Context, *GetConfigRequest) (*Config, error) // //Reloads the configuration from disk. - ReloadConfig(context.Context, *empty.Empty) (*Config, error) + ReloadConfig(context.Context, *emptypb.Empty) (*Config, error) mustEmbedUnimplementedAutoSwapServer() } @@ -177,7 +177,7 @@ func (UnimplementedAutoSwapServer) UpdateChainConfig(context.Context, *UpdateCha func (UnimplementedAutoSwapServer) GetConfig(context.Context, *GetConfigRequest) (*Config, error) { return nil, status.Errorf(codes.Unimplemented, "method GetConfig not implemented") } -func (UnimplementedAutoSwapServer) ReloadConfig(context.Context, *empty.Empty) (*Config, error) { +func (UnimplementedAutoSwapServer) ReloadConfig(context.Context, *emptypb.Empty) (*Config, error) { return nil, status.Errorf(codes.Unimplemented, "method ReloadConfig not implemented") } func (UnimplementedAutoSwapServer) mustEmbedUnimplementedAutoSwapServer() {} @@ -302,7 +302,7 @@ func _AutoSwap_GetConfig_Handler(srv interface{}, ctx context.Context, dec func( } func _AutoSwap_ReloadConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) + in := new(emptypb.Empty) if err := dec(in); err != nil { return nil, err } @@ -314,7 +314,7 @@ func _AutoSwap_ReloadConfig_Handler(srv interface{}, ctx context.Context, dec fu FullMethod: AutoSwap_ReloadConfig_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AutoSwapServer).ReloadConfig(ctx, req.(*empty.Empty)) + return srv.(AutoSwapServer).ReloadConfig(ctx, req.(*emptypb.Empty)) } return interceptor(ctx, in, info, handler) } diff --git a/pkg/boltzrpc/boltzrpc.pb.go b/pkg/boltzrpc/boltzrpc.pb.go index 282754fb..7c9a85da 100644 --- a/pkg/boltzrpc/boltzrpc.pb.go +++ b/pkg/boltzrpc/boltzrpc.pb.go @@ -1,15 +1,15 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.30.0 -// protoc v5.26.0 +// protoc v4.25.1 // source: boltzrpc.proto package boltzrpc import ( - empty "github.com/golang/protobuf/ptypes/empty" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" reflect "reflect" sync "sync" ) @@ -5133,6 +5133,119 @@ func (x *WalletTransaction) GetInfos() []*TransactionInfo { return nil } +type BumpWalletTransactionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id of the wallet which the transaction belongs to + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + // fee rate for the new transaction + SatPerVbyte float64 `protobuf:"fixed64,2,opt,name=sat_per_vbyte,json=satPerVbyte,proto3" json:"sat_per_vbyte,omitempty"` + // id of the transaction to bump + TxId string `protobuf:"bytes,3,opt,name=tx_id,json=txId,proto3" json:"tx_id,omitempty"` +} + +func (x *BumpWalletTransactionRequest) Reset() { + *x = BumpWalletTransactionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_boltzrpc_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BumpWalletTransactionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BumpWalletTransactionRequest) ProtoMessage() {} + +func (x *BumpWalletTransactionRequest) ProtoReflect() protoreflect.Message { + mi := &file_boltzrpc_proto_msgTypes[63] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BumpWalletTransactionRequest.ProtoReflect.Descriptor instead. +func (*BumpWalletTransactionRequest) Descriptor() ([]byte, []int) { + return file_boltzrpc_proto_rawDescGZIP(), []int{63} +} + +func (x *BumpWalletTransactionRequest) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *BumpWalletTransactionRequest) GetSatPerVbyte() float64 { + if x != nil { + return x.SatPerVbyte + } + return 0 +} + +func (x *BumpWalletTransactionRequest) GetTxId() string { + if x != nil { + return x.TxId + } + return "" +} + +type BumpWalletTransactionResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TxId string `protobuf:"bytes,1,opt,name=tx_id,json=txId,proto3" json:"tx_id,omitempty"` +} + +func (x *BumpWalletTransactionResponse) Reset() { + *x = BumpWalletTransactionResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_boltzrpc_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BumpWalletTransactionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BumpWalletTransactionResponse) ProtoMessage() {} + +func (x *BumpWalletTransactionResponse) ProtoReflect() protoreflect.Message { + mi := &file_boltzrpc_proto_msgTypes[64] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BumpWalletTransactionResponse.ProtoReflect.Descriptor instead. +func (*BumpWalletTransactionResponse) Descriptor() ([]byte, []int) { + return file_boltzrpc_proto_rawDescGZIP(), []int{64} +} + +func (x *BumpWalletTransactionResponse) GetTxId() string { + if x != nil { + return x.TxId + } + return "" +} + type TransactionInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -5146,7 +5259,7 @@ type TransactionInfo struct { func (x *TransactionInfo) Reset() { *x = TransactionInfo{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[63] + mi := &file_boltzrpc_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5159,7 +5272,7 @@ func (x *TransactionInfo) String() string { func (*TransactionInfo) ProtoMessage() {} func (x *TransactionInfo) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[63] + mi := &file_boltzrpc_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5172,7 +5285,7 @@ func (x *TransactionInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionInfo.ProtoReflect.Descriptor instead. func (*TransactionInfo) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{63} + return file_boltzrpc_proto_rawDescGZIP(), []int{65} } func (x *TransactionInfo) GetSwapId() string { @@ -5203,7 +5316,7 @@ type TransactionOutput struct { func (x *TransactionOutput) Reset() { *x = TransactionOutput{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[64] + mi := &file_boltzrpc_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5216,7 +5329,7 @@ func (x *TransactionOutput) String() string { func (*TransactionOutput) ProtoMessage() {} func (x *TransactionOutput) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[64] + mi := &file_boltzrpc_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5229,7 +5342,7 @@ func (x *TransactionOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionOutput.ProtoReflect.Descriptor instead. func (*TransactionOutput) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{64} + return file_boltzrpc_proto_rawDescGZIP(), []int{66} } func (x *TransactionOutput) GetAddress() string { @@ -5264,7 +5377,7 @@ type ListWalletTransactionsResponse struct { func (x *ListWalletTransactionsResponse) Reset() { *x = ListWalletTransactionsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[65] + mi := &file_boltzrpc_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5277,7 +5390,7 @@ func (x *ListWalletTransactionsResponse) String() string { func (*ListWalletTransactionsResponse) ProtoMessage() {} func (x *ListWalletTransactionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[65] + mi := &file_boltzrpc_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5290,7 +5403,7 @@ func (x *ListWalletTransactionsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWalletTransactionsResponse.ProtoReflect.Descriptor instead. func (*ListWalletTransactionsResponse) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{65} + return file_boltzrpc_proto_rawDescGZIP(), []int{67} } func (x *ListWalletTransactionsResponse) GetTransactions() []*WalletTransaction { @@ -5312,7 +5425,7 @@ type GetWalletCredentialsRequest struct { func (x *GetWalletCredentialsRequest) Reset() { *x = GetWalletCredentialsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[66] + mi := &file_boltzrpc_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5325,7 +5438,7 @@ func (x *GetWalletCredentialsRequest) String() string { func (*GetWalletCredentialsRequest) ProtoMessage() {} func (x *GetWalletCredentialsRequest) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[66] + mi := &file_boltzrpc_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5338,7 +5451,7 @@ func (x *GetWalletCredentialsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWalletCredentialsRequest.ProtoReflect.Descriptor instead. func (*GetWalletCredentialsRequest) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{66} + return file_boltzrpc_proto_rawDescGZIP(), []int{68} } func (x *GetWalletCredentialsRequest) GetId() uint64 { @@ -5366,7 +5479,7 @@ type RemoveWalletRequest struct { func (x *RemoveWalletRequest) Reset() { *x = RemoveWalletRequest{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[67] + mi := &file_boltzrpc_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5379,7 +5492,7 @@ func (x *RemoveWalletRequest) String() string { func (*RemoveWalletRequest) ProtoMessage() {} func (x *RemoveWalletRequest) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[67] + mi := &file_boltzrpc_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5392,7 +5505,7 @@ func (x *RemoveWalletRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveWalletRequest.ProtoReflect.Descriptor instead. func (*RemoveWalletRequest) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{67} + return file_boltzrpc_proto_rawDescGZIP(), []int{69} } func (x *RemoveWalletRequest) GetId() uint64 { @@ -5422,7 +5535,7 @@ type WalletSendRequest struct { func (x *WalletSendRequest) Reset() { *x = WalletSendRequest{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[68] + mi := &file_boltzrpc_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5435,7 +5548,7 @@ func (x *WalletSendRequest) String() string { func (*WalletSendRequest) ProtoMessage() {} func (x *WalletSendRequest) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[68] + mi := &file_boltzrpc_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5448,7 +5561,7 @@ func (x *WalletSendRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WalletSendRequest.ProtoReflect.Descriptor instead. func (*WalletSendRequest) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{68} + return file_boltzrpc_proto_rawDescGZIP(), []int{70} } func (x *WalletSendRequest) GetId() uint64 { @@ -5504,7 +5617,7 @@ type WalletSendResponse struct { func (x *WalletSendResponse) Reset() { *x = WalletSendResponse{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[69] + mi := &file_boltzrpc_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5517,7 +5630,7 @@ func (x *WalletSendResponse) String() string { func (*WalletSendResponse) ProtoMessage() {} func (x *WalletSendResponse) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[69] + mi := &file_boltzrpc_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5530,7 +5643,7 @@ func (x *WalletSendResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WalletSendResponse.ProtoReflect.Descriptor instead. func (*WalletSendResponse) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{69} + return file_boltzrpc_proto_rawDescGZIP(), []int{71} } func (x *WalletSendResponse) GetTxId() string { @@ -5551,7 +5664,7 @@ type WalletReceiveRequest struct { func (x *WalletReceiveRequest) Reset() { *x = WalletReceiveRequest{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[70] + mi := &file_boltzrpc_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5564,7 +5677,7 @@ func (x *WalletReceiveRequest) String() string { func (*WalletReceiveRequest) ProtoMessage() {} func (x *WalletReceiveRequest) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[70] + mi := &file_boltzrpc_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5577,7 +5690,7 @@ func (x *WalletReceiveRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WalletReceiveRequest.ProtoReflect.Descriptor instead. func (*WalletReceiveRequest) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{70} + return file_boltzrpc_proto_rawDescGZIP(), []int{72} } func (x *WalletReceiveRequest) GetId() uint64 { @@ -5598,7 +5711,7 @@ type WalletReceiveResponse struct { func (x *WalletReceiveResponse) Reset() { *x = WalletReceiveResponse{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[71] + mi := &file_boltzrpc_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5611,7 +5724,7 @@ func (x *WalletReceiveResponse) String() string { func (*WalletReceiveResponse) ProtoMessage() {} func (x *WalletReceiveResponse) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[71] + mi := &file_boltzrpc_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5624,7 +5737,7 @@ func (x *WalletReceiveResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WalletReceiveResponse.ProtoReflect.Descriptor instead. func (*WalletReceiveResponse) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{71} + return file_boltzrpc_proto_rawDescGZIP(), []int{73} } func (x *WalletReceiveResponse) GetAddress() string { @@ -5650,7 +5763,7 @@ type Wallet struct { func (x *Wallet) Reset() { *x = Wallet{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[72] + mi := &file_boltzrpc_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5663,7 +5776,7 @@ func (x *Wallet) String() string { func (*Wallet) ProtoMessage() {} func (x *Wallet) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[72] + mi := &file_boltzrpc_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5676,7 +5789,7 @@ func (x *Wallet) ProtoReflect() protoreflect.Message { // Deprecated: Use Wallet.ProtoReflect.Descriptor instead. func (*Wallet) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{72} + return file_boltzrpc_proto_rawDescGZIP(), []int{74} } func (x *Wallet) GetId() uint64 { @@ -5732,7 +5845,7 @@ type Wallets struct { func (x *Wallets) Reset() { *x = Wallets{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[73] + mi := &file_boltzrpc_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5745,7 +5858,7 @@ func (x *Wallets) String() string { func (*Wallets) ProtoMessage() {} func (x *Wallets) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[73] + mi := &file_boltzrpc_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5758,7 +5871,7 @@ func (x *Wallets) ProtoReflect() protoreflect.Message { // Deprecated: Use Wallets.ProtoReflect.Descriptor instead. func (*Wallets) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{73} + return file_boltzrpc_proto_rawDescGZIP(), []int{75} } func (x *Wallets) GetWallets() []*Wallet { @@ -5781,7 +5894,7 @@ type Balance struct { func (x *Balance) Reset() { *x = Balance{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[74] + mi := &file_boltzrpc_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5794,7 +5907,7 @@ func (x *Balance) String() string { func (*Balance) ProtoMessage() {} func (x *Balance) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[74] + mi := &file_boltzrpc_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5807,7 +5920,7 @@ func (x *Balance) ProtoReflect() protoreflect.Message { // Deprecated: Use Balance.ProtoReflect.Descriptor instead. func (*Balance) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{74} + return file_boltzrpc_proto_rawDescGZIP(), []int{76} } func (x *Balance) GetTotal() uint64 { @@ -5845,7 +5958,7 @@ type Subaccount struct { func (x *Subaccount) Reset() { *x = Subaccount{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[75] + mi := &file_boltzrpc_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5858,7 +5971,7 @@ func (x *Subaccount) String() string { func (*Subaccount) ProtoMessage() {} func (x *Subaccount) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[75] + mi := &file_boltzrpc_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5871,7 +5984,7 @@ func (x *Subaccount) ProtoReflect() protoreflect.Message { // Deprecated: Use Subaccount.ProtoReflect.Descriptor instead. func (*Subaccount) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{75} + return file_boltzrpc_proto_rawDescGZIP(), []int{77} } func (x *Subaccount) GetBalance() *Balance { @@ -5911,7 +6024,7 @@ type RemoveWalletResponse struct { func (x *RemoveWalletResponse) Reset() { *x = RemoveWalletResponse{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[76] + mi := &file_boltzrpc_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5924,7 +6037,7 @@ func (x *RemoveWalletResponse) String() string { func (*RemoveWalletResponse) ProtoMessage() {} func (x *RemoveWalletResponse) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[76] + mi := &file_boltzrpc_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5937,7 +6050,7 @@ func (x *RemoveWalletResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveWalletResponse.ProtoReflect.Descriptor instead. func (*RemoveWalletResponse) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{76} + return file_boltzrpc_proto_rawDescGZIP(), []int{78} } type UnlockRequest struct { @@ -5951,7 +6064,7 @@ type UnlockRequest struct { func (x *UnlockRequest) Reset() { *x = UnlockRequest{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[77] + mi := &file_boltzrpc_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5964,7 +6077,7 @@ func (x *UnlockRequest) String() string { func (*UnlockRequest) ProtoMessage() {} func (x *UnlockRequest) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[77] + mi := &file_boltzrpc_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5977,7 +6090,7 @@ func (x *UnlockRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UnlockRequest.ProtoReflect.Descriptor instead. func (*UnlockRequest) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{77} + return file_boltzrpc_proto_rawDescGZIP(), []int{79} } func (x *UnlockRequest) GetPassword() string { @@ -5998,7 +6111,7 @@ type VerifyWalletPasswordRequest struct { func (x *VerifyWalletPasswordRequest) Reset() { *x = VerifyWalletPasswordRequest{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[78] + mi := &file_boltzrpc_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6011,7 +6124,7 @@ func (x *VerifyWalletPasswordRequest) String() string { func (*VerifyWalletPasswordRequest) ProtoMessage() {} func (x *VerifyWalletPasswordRequest) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[78] + mi := &file_boltzrpc_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6024,7 +6137,7 @@ func (x *VerifyWalletPasswordRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VerifyWalletPasswordRequest.ProtoReflect.Descriptor instead. func (*VerifyWalletPasswordRequest) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{78} + return file_boltzrpc_proto_rawDescGZIP(), []int{80} } func (x *VerifyWalletPasswordRequest) GetPassword() string { @@ -6045,7 +6158,7 @@ type VerifyWalletPasswordResponse struct { func (x *VerifyWalletPasswordResponse) Reset() { *x = VerifyWalletPasswordResponse{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[79] + mi := &file_boltzrpc_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6058,7 +6171,7 @@ func (x *VerifyWalletPasswordResponse) String() string { func (*VerifyWalletPasswordResponse) ProtoMessage() {} func (x *VerifyWalletPasswordResponse) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[79] + mi := &file_boltzrpc_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6071,7 +6184,7 @@ func (x *VerifyWalletPasswordResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VerifyWalletPasswordResponse.ProtoReflect.Descriptor instead. func (*VerifyWalletPasswordResponse) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{79} + return file_boltzrpc_proto_rawDescGZIP(), []int{81} } func (x *VerifyWalletPasswordResponse) GetCorrect() bool { @@ -6093,7 +6206,7 @@ type ChangeWalletPasswordRequest struct { func (x *ChangeWalletPasswordRequest) Reset() { *x = ChangeWalletPasswordRequest{} if protoimpl.UnsafeEnabled { - mi := &file_boltzrpc_proto_msgTypes[80] + mi := &file_boltzrpc_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6106,7 +6219,7 @@ func (x *ChangeWalletPasswordRequest) String() string { func (*ChangeWalletPasswordRequest) ProtoMessage() {} func (x *ChangeWalletPasswordRequest) ProtoReflect() protoreflect.Message { - mi := &file_boltzrpc_proto_msgTypes[80] + mi := &file_boltzrpc_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6119,7 +6232,7 @@ func (x *ChangeWalletPasswordRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeWalletPasswordRequest.ProtoReflect.Descriptor instead. func (*ChangeWalletPasswordRequest) Descriptor() ([]byte, []int) { - return file_boltzrpc_proto_rawDescGZIP(), []int{80} + return file_boltzrpc_proto_rawDescGZIP(), []int{82} } func (x *ChangeWalletPasswordRequest) GetOld() string { @@ -6913,297 +7026,314 @@ var file_boltzrpc_proto_rawDesc = []byte{ 0x68, 0x74, 0x12, 0x2f, 0x0a, 0x05, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x69, 0x6e, - 0x66, 0x6f, 0x73, 0x22, 0x6a, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x07, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x73, 0x77, 0x61, 0x70, 0x49, - 0x64, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x69, 0x64, 0x22, - 0x6b, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x6f, 0x75, 0x72, - 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, - 0x69, 0x73, 0x4f, 0x75, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x61, 0x0a, 0x1e, - 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, - 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, - 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x5b, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, - 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x88, 0x01, 0x01, 0x42, - 0x0b, 0x0a, 0x09, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x25, 0x0a, 0x13, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x66, 0x6f, 0x73, 0x22, 0x67, 0x0a, 0x1c, 0x42, 0x75, 0x6d, 0x70, 0x57, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x02, 0x69, 0x64, 0x22, 0xfe, 0x01, 0x0a, 0x11, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, - 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0d, 0x73, - 0x61, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x76, 0x62, 0x79, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x61, 0x74, 0x50, 0x65, 0x72, 0x56, 0x62, 0x79, 0x74, - 0x65, 0x88, 0x01, 0x01, 0x12, 0x1e, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x6c, 0x6c, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x41, 0x6c, - 0x6c, 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0f, 0x69, 0x73, 0x5f, 0x73, 0x77, 0x61, 0x70, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x48, 0x02, 0x52, - 0x0d, 0x69, 0x73, 0x53, 0x77, 0x61, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x88, 0x01, - 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x61, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x76, 0x62, - 0x79, 0x74, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x6c, 0x6c, - 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x69, 0x73, 0x5f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x22, 0x29, 0x0a, 0x12, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, - 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, - 0x26, 0x0a, 0x14, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0x31, 0x0a, 0x15, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x06, 0x57, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x62, 0x6f, - 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x52, - 0x08, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61, - 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, - 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x12, 0x2b, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, + 0x02, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x61, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x76, + 0x62, 0x79, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x73, 0x61, 0x74, 0x50, + 0x65, 0x72, 0x56, 0x62, 0x79, 0x74, 0x65, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x34, 0x0a, 0x1d, + 0x42, 0x75, 0x6d, 0x70, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x13, 0x0a, + 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, + 0x49, 0x64, 0x22, 0x6a, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x07, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x73, 0x77, 0x61, 0x70, 0x49, 0x64, + 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x19, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x69, 0x64, 0x22, 0x6b, + 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x6f, 0x75, 0x72, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, + 0x73, 0x4f, 0x75, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x61, 0x0a, 0x1e, 0x4c, + 0x69, 0x73, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, + 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x5b, + 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, + 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0b, + 0x0a, 0x09, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x25, 0x0a, 0x13, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, + 0x69, 0x64, 0x22, 0xfe, 0x01, 0x0a, 0x11, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6e, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0d, 0x73, 0x61, + 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x76, 0x62, 0x79, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x01, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x61, 0x74, 0x50, 0x65, 0x72, 0x56, 0x62, 0x79, 0x74, 0x65, + 0x88, 0x01, 0x01, 0x12, 0x1e, 0x0a, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x6c, 0x6c, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x07, 0x73, 0x65, 0x6e, 0x64, 0x41, 0x6c, 0x6c, + 0x88, 0x01, 0x01, 0x12, 0x2b, 0x0a, 0x0f, 0x69, 0x73, 0x5f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x48, 0x02, 0x52, 0x0d, + 0x69, 0x73, 0x53, 0x77, 0x61, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x88, 0x01, 0x01, + 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x61, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x76, 0x62, 0x79, + 0x74, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x61, 0x6c, 0x6c, 0x42, + 0x12, 0x0a, 0x10, 0x5f, 0x69, 0x73, 0x5f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x22, 0x29, 0x0a, 0x12, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6e, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x26, + 0x0a, 0x14, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0x31, 0x0a, 0x15, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x06, 0x57, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x62, 0x6f, 0x6c, + 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x08, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, + 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, + 0x6f, 0x6e, 0x6c, 0x79, 0x12, 0x2b, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, + 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x35, + 0x0a, 0x07, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x77, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x62, 0x6f, 0x6c, + 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x07, 0x77, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x5f, 0x0a, 0x07, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x22, 0x89, 0x01, 0x0a, 0x0a, 0x53, 0x75, 0x62, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, - 0x35, 0x0a, 0x07, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x77, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x62, 0x6f, - 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x07, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x5f, 0x0a, 0x07, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x6e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x65, 0x64, 0x22, 0x89, 0x01, 0x0a, 0x0a, 0x53, 0x75, 0x62, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, - 0x70, 0x63, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x6f, 0x72, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x0a, 0x0d, 0x55, - 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x39, 0x0a, 0x1b, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x79, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x22, 0x38, 0x0a, 0x1c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x57, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x22, 0x41, 0x0a, - 0x1b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x6c, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x6e, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6e, 0x65, 0x77, - 0x2a, 0x25, 0x0a, 0x0e, 0x4d, 0x61, 0x63, 0x61, 0x72, 0x6f, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, - 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x2a, 0x62, 0x0a, 0x09, 0x53, 0x77, 0x61, 0x70, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, - 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x46, 0x55, 0x4c, 0x10, - 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, - 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x0c, - 0x0a, 0x08, 0x52, 0x45, 0x46, 0x55, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, - 0x41, 0x42, 0x41, 0x4e, 0x44, 0x4f, 0x4e, 0x45, 0x44, 0x10, 0x05, 0x2a, 0x1d, 0x0a, 0x08, 0x43, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x07, 0x0a, 0x03, 0x42, 0x54, 0x43, 0x10, 0x00, - 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x42, 0x54, 0x43, 0x10, 0x01, 0x2a, 0x31, 0x0a, 0x08, 0x53, 0x77, - 0x61, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, 0x42, 0x4d, 0x41, 0x52, - 0x49, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, - 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x2a, 0x2d, 0x0a, - 0x0c, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x77, 0x61, 0x70, 0x73, 0x12, 0x07, 0x0a, - 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, - 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x02, 0x2a, 0x54, 0x0a, 0x0f, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, - 0x4c, 0x4f, 0x43, 0x4b, 0x55, 0x50, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x46, 0x55, - 0x4e, 0x44, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x10, 0x03, 0x12, - 0x11, 0x0a, 0x0d, 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x10, 0x04, 0x32, 0xd6, 0x14, 0x0a, 0x05, 0x42, 0x6f, 0x6c, 0x74, 0x7a, 0x12, 0x3e, 0x0a, 0x07, - 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, - 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x19, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0e, - 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, + 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, + 0x72, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x0a, 0x0d, 0x55, 0x6e, + 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x39, 0x0a, 0x1b, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x79, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x22, 0x38, 0x0a, 0x1c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x57, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x22, 0x41, 0x0a, 0x1b, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6f, + 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x6c, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x6e, 0x65, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6e, 0x65, 0x77, 0x2a, + 0x25, 0x0a, 0x0e, 0x4d, 0x61, 0x63, 0x61, 0x72, 0x6f, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x57, + 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x2a, 0x62, 0x0a, 0x09, 0x53, 0x77, 0x61, 0x70, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x00, + 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x46, 0x55, 0x4c, 0x10, 0x01, + 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x53, + 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x0c, 0x0a, + 0x08, 0x52, 0x45, 0x46, 0x55, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x41, + 0x42, 0x41, 0x4e, 0x44, 0x4f, 0x4e, 0x45, 0x44, 0x10, 0x05, 0x2a, 0x1d, 0x0a, 0x08, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x07, 0x0a, 0x03, 0x42, 0x54, 0x43, 0x10, 0x00, 0x12, + 0x08, 0x0a, 0x04, 0x4c, 0x42, 0x54, 0x43, 0x10, 0x01, 0x2a, 0x31, 0x0a, 0x08, 0x53, 0x77, 0x61, + 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, 0x42, 0x4d, 0x41, 0x52, 0x49, + 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, 0x10, + 0x01, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x2a, 0x2d, 0x0a, 0x0c, + 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x77, 0x61, 0x70, 0x73, 0x12, 0x07, 0x0a, 0x03, + 0x41, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x10, + 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x02, 0x2a, 0x54, 0x0a, 0x0f, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, + 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4c, + 0x4f, 0x43, 0x4b, 0x55, 0x50, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x46, 0x55, 0x4e, + 0x44, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x10, 0x03, 0x12, 0x11, + 0x0a, 0x0d, 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, + 0x04, 0x32, 0xc0, 0x15, 0x0a, 0x05, 0x42, 0x6f, 0x6c, 0x74, 0x7a, 0x12, 0x3e, 0x0a, 0x07, 0x47, + 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, + 0x63, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x19, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0e, 0x47, + 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1f, 0x2e, + 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x20, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x3f, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x61, 0x69, - 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, - 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x50, - 0x61, 0x69, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3e, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x50, 0x61, - 0x69, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x62, 0x6f, - 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x69, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x53, - 0x77, 0x61, 0x70, 0x73, 0x12, 0x1a, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, - 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x62, 0x6f, 0x6c, 0x74, - 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x48, 0x0a, 0x0a, 0x52, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x53, 0x77, 0x61, 0x70, 0x12, 0x1b, - 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, 0x75, 0x6e, 0x64, - 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x62, 0x6f, - 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x53, 0x77, 0x61, 0x70, 0x73, 0x12, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, - 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, - 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, - 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x52, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x30, 0x01, 0x12, 0x43, 0x0a, 0x07, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x18, - 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, - 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x47, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x53, 0x77, 0x61, 0x70, 0x12, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, - 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x12, 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x3f, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x61, 0x69, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, + 0x47, 0x65, 0x74, 0x50, 0x61, 0x69, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, + 0x69, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3e, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x50, 0x61, 0x69, + 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x62, 0x6f, 0x6c, + 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x69, 0x72, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x77, + 0x61, 0x70, 0x73, 0x12, 0x1a, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, + 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x08, + 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, + 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, + 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x48, 0x0a, 0x0a, 0x52, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x53, 0x77, 0x61, 0x70, 0x12, 0x1b, 0x2e, + 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x53, + 0x77, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, + 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x53, 0x77, 0x61, 0x70, 0x73, 0x12, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, + 0x70, 0x63, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, + 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x77, + 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, + 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x12, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, + 0x65, 0x74, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, + 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x30, 0x01, 0x12, 0x43, 0x0a, 0x07, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x12, 0x18, 0x2e, + 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, + 0x70, 0x63, 0x2e, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x47, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x53, 0x77, 0x61, 0x70, 0x12, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x5c, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x53, 0x77, 0x61, 0x70, 0x12, 0x22, 0x2e, 0x62, 0x6f, 0x6c, - 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x65, - 0x72, 0x73, 0x65, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, - 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x53, 0x77, 0x61, 0x70, 0x12, 0x20, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, - 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x77, 0x61, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, - 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x4d, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x12, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3f, 0x0a, 0x0c, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x12, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x10, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x12, 0x45, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, - 0x74, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x75, - 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, - 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x62, 0x6f, 0x6c, - 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x62, 0x6f, - 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, - 0x0a, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x62, 0x6f, - 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, - 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x09, 0x47, - 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, - 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, - 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x48, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x65, 0x65, 0x12, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, - 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, + 0x12, 0x52, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x12, 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x03, 0x88, 0x02, 0x01, 0x12, 0x5c, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x76, 0x65, 0x72, 0x73, 0x65, 0x53, 0x77, 0x61, 0x70, 0x12, 0x22, 0x2e, 0x62, 0x6f, 0x6c, 0x74, + 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x65, 0x72, + 0x73, 0x65, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, + 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x53, 0x77, 0x61, 0x70, 0x12, 0x20, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, - 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x65, 0x65, - 0x12, 0x6b, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x62, 0x6f, 0x6c, - 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, - 0x14, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x25, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, - 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x62, - 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x4d, 0x0a, 0x0c, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, - 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, - 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x57, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, - 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x50, 0x0a, 0x0d, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x12, 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x39, 0x0a, 0x06, 0x55, - 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x17, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, - 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x65, 0x0a, 0x14, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, - 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, + 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x77, 0x61, 0x70, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x4d, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x12, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3f, 0x0a, 0x0c, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, + 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, + 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, + 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x12, 0x45, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x74, + 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x14, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x75, 0x62, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x75, + 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x62, 0x6f, 0x6c, 0x74, + 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x62, 0x6f, 0x6c, + 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0a, + 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, + 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, + 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x09, 0x47, 0x65, + 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, + 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x48, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x65, 0x65, 0x12, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, + 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, + 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x65, 0x65, 0x12, + 0x6b, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x62, 0x6f, 0x6c, 0x74, + 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x15, + 0x42, 0x75, 0x6d, 0x70, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, + 0x2e, 0x42, 0x75, 0x6d, 0x70, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, + 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x6d, 0x70, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x25, + 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, + 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x73, 0x12, 0x4d, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x12, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x12, + 0x1b, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, + 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x53, 0x65, + 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x0d, 0x57, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x12, 0x1e, 0x2e, 0x62, 0x6f, + 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x62, 0x6f, + 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, + 0x53, 0x74, 0x6f, 0x70, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x39, 0x0a, 0x06, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x17, + 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x65, 0x0a, 0x14, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, + 0x70, 0x63, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, - 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, - 0x14, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, - 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x25, + 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, + 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x1d, 0x2e, + 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x62, + 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x4a, + 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x1c, 0x2e, + 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x62, 0x6f, + 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x47, 0x65, + 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x1a, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, + 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x54, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x73, 0x12, 0x1c, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x39, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x1a, - 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x62, 0x6f, 0x6c, - 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0c, - 0x42, 0x61, 0x6b, 0x65, 0x4d, 0x61, 0x63, 0x61, 0x72, 0x6f, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x62, - 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x61, 0x6b, 0x65, 0x4d, 0x61, 0x63, 0x61, - 0x72, 0x6f, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x62, 0x6f, - 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x61, 0x6b, 0x65, 0x4d, 0x61, 0x63, 0x61, 0x72, - 0x6f, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x37, 0x5a, 0x35, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x6f, 0x6c, 0x74, 0x7a, 0x45, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x2f, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x2d, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x62, 0x6f, 0x6c, 0x74, - 0x7a, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0c, 0x42, 0x61, 0x6b, 0x65, 0x4d, 0x61, 0x63, + 0x61, 0x72, 0x6f, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, + 0x2e, 0x42, 0x61, 0x6b, 0x65, 0x4d, 0x61, 0x63, 0x61, 0x72, 0x6f, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x2e, + 0x42, 0x61, 0x6b, 0x65, 0x4d, 0x61, 0x63, 0x61, 0x72, 0x6f, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x37, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x42, 0x6f, 0x6c, 0x74, 0x7a, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x2f, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x2d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x32, + 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x62, 0x6f, 0x6c, 0x74, 0x7a, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -7219,7 +7349,7 @@ func file_boltzrpc_proto_rawDescGZIP() []byte { } var file_boltzrpc_proto_enumTypes = make([]protoimpl.EnumInfo, 6) -var file_boltzrpc_proto_msgTypes = make([]protoimpl.MessageInfo, 81) +var file_boltzrpc_proto_msgTypes = make([]protoimpl.MessageInfo, 83) var file_boltzrpc_proto_goTypes = []interface{}{ (MacaroonAction)(0), // 0: boltzrpc.MacaroonAction (SwapState)(0), // 1: boltzrpc.SwapState @@ -7290,25 +7420,27 @@ var file_boltzrpc_proto_goTypes = []interface{}{ (*WalletSendFee)(nil), // 66: boltzrpc.WalletSendFee (*ListWalletTransactionsRequest)(nil), // 67: boltzrpc.ListWalletTransactionsRequest (*WalletTransaction)(nil), // 68: boltzrpc.WalletTransaction - (*TransactionInfo)(nil), // 69: boltzrpc.TransactionInfo - (*TransactionOutput)(nil), // 70: boltzrpc.TransactionOutput - (*ListWalletTransactionsResponse)(nil), // 71: boltzrpc.ListWalletTransactionsResponse - (*GetWalletCredentialsRequest)(nil), // 72: boltzrpc.GetWalletCredentialsRequest - (*RemoveWalletRequest)(nil), // 73: boltzrpc.RemoveWalletRequest - (*WalletSendRequest)(nil), // 74: boltzrpc.WalletSendRequest - (*WalletSendResponse)(nil), // 75: boltzrpc.WalletSendResponse - (*WalletReceiveRequest)(nil), // 76: boltzrpc.WalletReceiveRequest - (*WalletReceiveResponse)(nil), // 77: boltzrpc.WalletReceiveResponse - (*Wallet)(nil), // 78: boltzrpc.Wallet - (*Wallets)(nil), // 79: boltzrpc.Wallets - (*Balance)(nil), // 80: boltzrpc.Balance - (*Subaccount)(nil), // 81: boltzrpc.Subaccount - (*RemoveWalletResponse)(nil), // 82: boltzrpc.RemoveWalletResponse - (*UnlockRequest)(nil), // 83: boltzrpc.UnlockRequest - (*VerifyWalletPasswordRequest)(nil), // 84: boltzrpc.VerifyWalletPasswordRequest - (*VerifyWalletPasswordResponse)(nil), // 85: boltzrpc.VerifyWalletPasswordResponse - (*ChangeWalletPasswordRequest)(nil), // 86: boltzrpc.ChangeWalletPasswordRequest - (*empty.Empty)(nil), // 87: google.protobuf.Empty + (*BumpWalletTransactionRequest)(nil), // 69: boltzrpc.BumpWalletTransactionRequest + (*BumpWalletTransactionResponse)(nil), // 70: boltzrpc.BumpWalletTransactionResponse + (*TransactionInfo)(nil), // 71: boltzrpc.TransactionInfo + (*TransactionOutput)(nil), // 72: boltzrpc.TransactionOutput + (*ListWalletTransactionsResponse)(nil), // 73: boltzrpc.ListWalletTransactionsResponse + (*GetWalletCredentialsRequest)(nil), // 74: boltzrpc.GetWalletCredentialsRequest + (*RemoveWalletRequest)(nil), // 75: boltzrpc.RemoveWalletRequest + (*WalletSendRequest)(nil), // 76: boltzrpc.WalletSendRequest + (*WalletSendResponse)(nil), // 77: boltzrpc.WalletSendResponse + (*WalletReceiveRequest)(nil), // 78: boltzrpc.WalletReceiveRequest + (*WalletReceiveResponse)(nil), // 79: boltzrpc.WalletReceiveResponse + (*Wallet)(nil), // 80: boltzrpc.Wallet + (*Wallets)(nil), // 81: boltzrpc.Wallets + (*Balance)(nil), // 82: boltzrpc.Balance + (*Subaccount)(nil), // 83: boltzrpc.Subaccount + (*RemoveWalletResponse)(nil), // 84: boltzrpc.RemoveWalletResponse + (*UnlockRequest)(nil), // 85: boltzrpc.UnlockRequest + (*VerifyWalletPasswordRequest)(nil), // 86: boltzrpc.VerifyWalletPasswordRequest + (*VerifyWalletPasswordResponse)(nil), // 87: boltzrpc.VerifyWalletPasswordResponse + (*ChangeWalletPasswordRequest)(nil), // 88: boltzrpc.ChangeWalletPasswordRequest + (*emptypb.Empty)(nil), // 89: google.protobuf.Empty } var file_boltzrpc_proto_depIdxs = []int32{ 10, // 0: boltzrpc.ListTenantsResponse.tenants:type_name -> boltzrpc.Tenant @@ -7371,21 +7503,21 @@ var file_boltzrpc_proto_depIdxs = []int32{ 55, // 57: boltzrpc.ImportWalletRequest.credentials:type_name -> boltzrpc.WalletCredentials 56, // 58: boltzrpc.ImportWalletRequest.params:type_name -> boltzrpc.WalletParams 56, // 59: boltzrpc.CreateWalletRequest.params:type_name -> boltzrpc.WalletParams - 78, // 60: boltzrpc.CreateWalletResponse.wallet:type_name -> boltzrpc.Wallet - 81, // 61: boltzrpc.GetSubaccountsResponse.subaccounts:type_name -> boltzrpc.Subaccount + 80, // 60: boltzrpc.CreateWalletResponse.wallet:type_name -> boltzrpc.Wallet + 83, // 61: boltzrpc.GetSubaccountsResponse.subaccounts:type_name -> boltzrpc.Subaccount 2, // 62: boltzrpc.GetWalletsRequest.currency:type_name -> boltzrpc.Currency - 70, // 63: boltzrpc.WalletTransaction.outputs:type_name -> boltzrpc.TransactionOutput - 69, // 64: boltzrpc.WalletTransaction.infos:type_name -> boltzrpc.TransactionInfo + 72, // 63: boltzrpc.WalletTransaction.outputs:type_name -> boltzrpc.TransactionOutput + 71, // 64: boltzrpc.WalletTransaction.infos:type_name -> boltzrpc.TransactionInfo 5, // 65: boltzrpc.TransactionInfo.type:type_name -> boltzrpc.TransactionType 68, // 66: boltzrpc.ListWalletTransactionsResponse.transactions:type_name -> boltzrpc.WalletTransaction 2, // 67: boltzrpc.Wallet.currency:type_name -> boltzrpc.Currency - 80, // 68: boltzrpc.Wallet.balance:type_name -> boltzrpc.Balance - 78, // 69: boltzrpc.Wallets.wallets:type_name -> boltzrpc.Wallet - 80, // 70: boltzrpc.Subaccount.balance:type_name -> boltzrpc.Balance + 82, // 68: boltzrpc.Wallet.balance:type_name -> boltzrpc.Balance + 80, // 69: boltzrpc.Wallets.wallets:type_name -> boltzrpc.Wallet + 82, // 70: boltzrpc.Subaccount.balance:type_name -> boltzrpc.Balance 22, // 71: boltzrpc.Boltz.GetInfo:input_type -> boltzrpc.GetInfoRequest 29, // 72: boltzrpc.Boltz.GetServiceInfo:input_type -> boltzrpc.GetServiceInfoRequest 16, // 73: boltzrpc.Boltz.GetPairInfo:input_type -> boltzrpc.GetPairInfoRequest - 87, // 74: boltzrpc.Boltz.GetPairs:input_type -> google.protobuf.Empty + 89, // 74: boltzrpc.Boltz.GetPairs:input_type -> google.protobuf.Empty 32, // 75: boltzrpc.Boltz.ListSwaps:input_type -> boltzrpc.ListSwapsRequest 34, // 76: boltzrpc.Boltz.GetStats:input_type -> boltzrpc.GetStatsRequest 36, // 77: boltzrpc.Boltz.RefundSwap:input_type -> boltzrpc.RefundSwapRequest @@ -7403,57 +7535,59 @@ var file_boltzrpc_proto_depIdxs = []int32{ 61, // 89: boltzrpc.Boltz.GetSubaccounts:input_type -> boltzrpc.GetSubaccountsRequest 64, // 90: boltzrpc.Boltz.GetWallets:input_type -> boltzrpc.GetWalletsRequest 65, // 91: boltzrpc.Boltz.GetWallet:input_type -> boltzrpc.GetWalletRequest - 74, // 92: boltzrpc.Boltz.GetWalletSendFee:input_type -> boltzrpc.WalletSendRequest + 76, // 92: boltzrpc.Boltz.GetWalletSendFee:input_type -> boltzrpc.WalletSendRequest 67, // 93: boltzrpc.Boltz.ListWalletTransactions:input_type -> boltzrpc.ListWalletTransactionsRequest - 72, // 94: boltzrpc.Boltz.GetWalletCredentials:input_type -> boltzrpc.GetWalletCredentialsRequest - 73, // 95: boltzrpc.Boltz.RemoveWallet:input_type -> boltzrpc.RemoveWalletRequest - 74, // 96: boltzrpc.Boltz.WalletSend:input_type -> boltzrpc.WalletSendRequest - 76, // 97: boltzrpc.Boltz.WalletReceive:input_type -> boltzrpc.WalletReceiveRequest - 87, // 98: boltzrpc.Boltz.Stop:input_type -> google.protobuf.Empty - 83, // 99: boltzrpc.Boltz.Unlock:input_type -> boltzrpc.UnlockRequest - 84, // 100: boltzrpc.Boltz.VerifyWalletPassword:input_type -> boltzrpc.VerifyWalletPasswordRequest - 86, // 101: boltzrpc.Boltz.ChangeWalletPassword:input_type -> boltzrpc.ChangeWalletPasswordRequest - 6, // 102: boltzrpc.Boltz.CreateTenant:input_type -> boltzrpc.CreateTenantRequest - 7, // 103: boltzrpc.Boltz.ListTenants:input_type -> boltzrpc.ListTenantsRequest - 9, // 104: boltzrpc.Boltz.GetTenant:input_type -> boltzrpc.GetTenantRequest - 12, // 105: boltzrpc.Boltz.BakeMacaroon:input_type -> boltzrpc.BakeMacaroonRequest - 23, // 106: boltzrpc.Boltz.GetInfo:output_type -> boltzrpc.GetInfoResponse - 30, // 107: boltzrpc.Boltz.GetServiceInfo:output_type -> boltzrpc.GetServiceInfoResponse - 17, // 108: boltzrpc.Boltz.GetPairInfo:output_type -> boltzrpc.PairInfo - 26, // 109: boltzrpc.Boltz.GetPairs:output_type -> boltzrpc.GetPairsResponse - 33, // 110: boltzrpc.Boltz.ListSwaps:output_type -> boltzrpc.ListSwapsResponse - 35, // 111: boltzrpc.Boltz.GetStats:output_type -> boltzrpc.GetStatsResponse - 40, // 112: boltzrpc.Boltz.RefundSwap:output_type -> boltzrpc.GetSwapInfoResponse - 38, // 113: boltzrpc.Boltz.ClaimSwaps:output_type -> boltzrpc.ClaimSwapsResponse - 40, // 114: boltzrpc.Boltz.GetSwapInfo:output_type -> boltzrpc.GetSwapInfoResponse - 40, // 115: boltzrpc.Boltz.GetSwapInfoStream:output_type -> boltzrpc.GetSwapInfoResponse - 42, // 116: boltzrpc.Boltz.Deposit:output_type -> boltzrpc.DepositResponse - 44, // 117: boltzrpc.Boltz.CreateSwap:output_type -> boltzrpc.CreateSwapResponse - 44, // 118: boltzrpc.Boltz.CreateChannel:output_type -> boltzrpc.CreateSwapResponse - 47, // 119: boltzrpc.Boltz.CreateReverseSwap:output_type -> boltzrpc.CreateReverseSwapResponse - 49, // 120: boltzrpc.Boltz.CreateChainSwap:output_type -> boltzrpc.ChainSwapInfo - 59, // 121: boltzrpc.Boltz.CreateWallet:output_type -> boltzrpc.CreateWalletResponse - 78, // 122: boltzrpc.Boltz.ImportWallet:output_type -> boltzrpc.Wallet - 81, // 123: boltzrpc.Boltz.SetSubaccount:output_type -> boltzrpc.Subaccount - 62, // 124: boltzrpc.Boltz.GetSubaccounts:output_type -> boltzrpc.GetSubaccountsResponse - 79, // 125: boltzrpc.Boltz.GetWallets:output_type -> boltzrpc.Wallets - 78, // 126: boltzrpc.Boltz.GetWallet:output_type -> boltzrpc.Wallet - 66, // 127: boltzrpc.Boltz.GetWalletSendFee:output_type -> boltzrpc.WalletSendFee - 71, // 128: boltzrpc.Boltz.ListWalletTransactions:output_type -> boltzrpc.ListWalletTransactionsResponse - 55, // 129: boltzrpc.Boltz.GetWalletCredentials:output_type -> boltzrpc.WalletCredentials - 82, // 130: boltzrpc.Boltz.RemoveWallet:output_type -> boltzrpc.RemoveWalletResponse - 75, // 131: boltzrpc.Boltz.WalletSend:output_type -> boltzrpc.WalletSendResponse - 77, // 132: boltzrpc.Boltz.WalletReceive:output_type -> boltzrpc.WalletReceiveResponse - 87, // 133: boltzrpc.Boltz.Stop:output_type -> google.protobuf.Empty - 87, // 134: boltzrpc.Boltz.Unlock:output_type -> google.protobuf.Empty - 85, // 135: boltzrpc.Boltz.VerifyWalletPassword:output_type -> boltzrpc.VerifyWalletPasswordResponse - 87, // 136: boltzrpc.Boltz.ChangeWalletPassword:output_type -> google.protobuf.Empty - 10, // 137: boltzrpc.Boltz.CreateTenant:output_type -> boltzrpc.Tenant - 8, // 138: boltzrpc.Boltz.ListTenants:output_type -> boltzrpc.ListTenantsResponse - 10, // 139: boltzrpc.Boltz.GetTenant:output_type -> boltzrpc.Tenant - 13, // 140: boltzrpc.Boltz.BakeMacaroon:output_type -> boltzrpc.BakeMacaroonResponse - 106, // [106:141] is the sub-list for method output_type - 71, // [71:106] is the sub-list for method input_type + 69, // 94: boltzrpc.Boltz.BumpWalletTransaction:input_type -> boltzrpc.BumpWalletTransactionRequest + 74, // 95: boltzrpc.Boltz.GetWalletCredentials:input_type -> boltzrpc.GetWalletCredentialsRequest + 75, // 96: boltzrpc.Boltz.RemoveWallet:input_type -> boltzrpc.RemoveWalletRequest + 76, // 97: boltzrpc.Boltz.WalletSend:input_type -> boltzrpc.WalletSendRequest + 78, // 98: boltzrpc.Boltz.WalletReceive:input_type -> boltzrpc.WalletReceiveRequest + 89, // 99: boltzrpc.Boltz.Stop:input_type -> google.protobuf.Empty + 85, // 100: boltzrpc.Boltz.Unlock:input_type -> boltzrpc.UnlockRequest + 86, // 101: boltzrpc.Boltz.VerifyWalletPassword:input_type -> boltzrpc.VerifyWalletPasswordRequest + 88, // 102: boltzrpc.Boltz.ChangeWalletPassword:input_type -> boltzrpc.ChangeWalletPasswordRequest + 6, // 103: boltzrpc.Boltz.CreateTenant:input_type -> boltzrpc.CreateTenantRequest + 7, // 104: boltzrpc.Boltz.ListTenants:input_type -> boltzrpc.ListTenantsRequest + 9, // 105: boltzrpc.Boltz.GetTenant:input_type -> boltzrpc.GetTenantRequest + 12, // 106: boltzrpc.Boltz.BakeMacaroon:input_type -> boltzrpc.BakeMacaroonRequest + 23, // 107: boltzrpc.Boltz.GetInfo:output_type -> boltzrpc.GetInfoResponse + 30, // 108: boltzrpc.Boltz.GetServiceInfo:output_type -> boltzrpc.GetServiceInfoResponse + 17, // 109: boltzrpc.Boltz.GetPairInfo:output_type -> boltzrpc.PairInfo + 26, // 110: boltzrpc.Boltz.GetPairs:output_type -> boltzrpc.GetPairsResponse + 33, // 111: boltzrpc.Boltz.ListSwaps:output_type -> boltzrpc.ListSwapsResponse + 35, // 112: boltzrpc.Boltz.GetStats:output_type -> boltzrpc.GetStatsResponse + 40, // 113: boltzrpc.Boltz.RefundSwap:output_type -> boltzrpc.GetSwapInfoResponse + 38, // 114: boltzrpc.Boltz.ClaimSwaps:output_type -> boltzrpc.ClaimSwapsResponse + 40, // 115: boltzrpc.Boltz.GetSwapInfo:output_type -> boltzrpc.GetSwapInfoResponse + 40, // 116: boltzrpc.Boltz.GetSwapInfoStream:output_type -> boltzrpc.GetSwapInfoResponse + 42, // 117: boltzrpc.Boltz.Deposit:output_type -> boltzrpc.DepositResponse + 44, // 118: boltzrpc.Boltz.CreateSwap:output_type -> boltzrpc.CreateSwapResponse + 44, // 119: boltzrpc.Boltz.CreateChannel:output_type -> boltzrpc.CreateSwapResponse + 47, // 120: boltzrpc.Boltz.CreateReverseSwap:output_type -> boltzrpc.CreateReverseSwapResponse + 49, // 121: boltzrpc.Boltz.CreateChainSwap:output_type -> boltzrpc.ChainSwapInfo + 59, // 122: boltzrpc.Boltz.CreateWallet:output_type -> boltzrpc.CreateWalletResponse + 80, // 123: boltzrpc.Boltz.ImportWallet:output_type -> boltzrpc.Wallet + 83, // 124: boltzrpc.Boltz.SetSubaccount:output_type -> boltzrpc.Subaccount + 62, // 125: boltzrpc.Boltz.GetSubaccounts:output_type -> boltzrpc.GetSubaccountsResponse + 81, // 126: boltzrpc.Boltz.GetWallets:output_type -> boltzrpc.Wallets + 80, // 127: boltzrpc.Boltz.GetWallet:output_type -> boltzrpc.Wallet + 66, // 128: boltzrpc.Boltz.GetWalletSendFee:output_type -> boltzrpc.WalletSendFee + 73, // 129: boltzrpc.Boltz.ListWalletTransactions:output_type -> boltzrpc.ListWalletTransactionsResponse + 70, // 130: boltzrpc.Boltz.BumpWalletTransaction:output_type -> boltzrpc.BumpWalletTransactionResponse + 55, // 131: boltzrpc.Boltz.GetWalletCredentials:output_type -> boltzrpc.WalletCredentials + 84, // 132: boltzrpc.Boltz.RemoveWallet:output_type -> boltzrpc.RemoveWalletResponse + 77, // 133: boltzrpc.Boltz.WalletSend:output_type -> boltzrpc.WalletSendResponse + 79, // 134: boltzrpc.Boltz.WalletReceive:output_type -> boltzrpc.WalletReceiveResponse + 89, // 135: boltzrpc.Boltz.Stop:output_type -> google.protobuf.Empty + 89, // 136: boltzrpc.Boltz.Unlock:output_type -> google.protobuf.Empty + 87, // 137: boltzrpc.Boltz.VerifyWalletPassword:output_type -> boltzrpc.VerifyWalletPasswordResponse + 89, // 138: boltzrpc.Boltz.ChangeWalletPassword:output_type -> google.protobuf.Empty + 10, // 139: boltzrpc.Boltz.CreateTenant:output_type -> boltzrpc.Tenant + 8, // 140: boltzrpc.Boltz.ListTenants:output_type -> boltzrpc.ListTenantsResponse + 10, // 141: boltzrpc.Boltz.GetTenant:output_type -> boltzrpc.Tenant + 13, // 142: boltzrpc.Boltz.BakeMacaroon:output_type -> boltzrpc.BakeMacaroonResponse + 107, // [107:143] is the sub-list for method output_type + 71, // [71:107] is the sub-list for method input_type 71, // [71:71] is the sub-list for extension type_name 71, // [71:71] is the sub-list for extension extendee 0, // [0:71] is the sub-list for field type_name @@ -8222,7 +8356,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionInfo); i { + switch v := v.(*BumpWalletTransactionRequest); i { case 0: return &v.state case 1: @@ -8234,7 +8368,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransactionOutput); i { + switch v := v.(*BumpWalletTransactionResponse); i { case 0: return &v.state case 1: @@ -8246,7 +8380,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListWalletTransactionsResponse); i { + switch v := v.(*TransactionInfo); i { case 0: return &v.state case 1: @@ -8258,7 +8392,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetWalletCredentialsRequest); i { + switch v := v.(*TransactionOutput); i { case 0: return &v.state case 1: @@ -8270,7 +8404,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemoveWalletRequest); i { + switch v := v.(*ListWalletTransactionsResponse); i { case 0: return &v.state case 1: @@ -8282,7 +8416,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WalletSendRequest); i { + switch v := v.(*GetWalletCredentialsRequest); i { case 0: return &v.state case 1: @@ -8294,7 +8428,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WalletSendResponse); i { + switch v := v.(*RemoveWalletRequest); i { case 0: return &v.state case 1: @@ -8306,7 +8440,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WalletReceiveRequest); i { + switch v := v.(*WalletSendRequest); i { case 0: return &v.state case 1: @@ -8318,7 +8452,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WalletReceiveResponse); i { + switch v := v.(*WalletSendResponse); i { case 0: return &v.state case 1: @@ -8330,7 +8464,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Wallet); i { + switch v := v.(*WalletReceiveRequest); i { case 0: return &v.state case 1: @@ -8342,7 +8476,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Wallets); i { + switch v := v.(*WalletReceiveResponse); i { case 0: return &v.state case 1: @@ -8354,7 +8488,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Balance); i { + switch v := v.(*Wallet); i { case 0: return &v.state case 1: @@ -8366,7 +8500,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Subaccount); i { + switch v := v.(*Wallets); i { case 0: return &v.state case 1: @@ -8378,7 +8512,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemoveWalletResponse); i { + switch v := v.(*Balance); i { case 0: return &v.state case 1: @@ -8390,7 +8524,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnlockRequest); i { + switch v := v.(*Subaccount); i { case 0: return &v.state case 1: @@ -8402,7 +8536,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VerifyWalletPasswordRequest); i { + switch v := v.(*RemoveWalletResponse); i { case 0: return &v.state case 1: @@ -8414,7 +8548,7 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VerifyWalletPasswordResponse); i { + switch v := v.(*UnlockRequest); i { case 0: return &v.state case 1: @@ -8426,6 +8560,30 @@ func file_boltzrpc_proto_init() { } } file_boltzrpc_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VerifyWalletPasswordRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_boltzrpc_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VerifyWalletPasswordResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_boltzrpc_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChangeWalletPasswordRequest); i { case 0: return &v.state @@ -8470,16 +8628,16 @@ func file_boltzrpc_proto_init() { file_boltzrpc_proto_msgTypes[58].OneofWrappers = []interface{}{} file_boltzrpc_proto_msgTypes[59].OneofWrappers = []interface{}{} file_boltzrpc_proto_msgTypes[61].OneofWrappers = []interface{}{} - file_boltzrpc_proto_msgTypes[63].OneofWrappers = []interface{}{} - file_boltzrpc_proto_msgTypes[66].OneofWrappers = []interface{}{} + file_boltzrpc_proto_msgTypes[65].OneofWrappers = []interface{}{} file_boltzrpc_proto_msgTypes[68].OneofWrappers = []interface{}{} + file_boltzrpc_proto_msgTypes[70].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_boltzrpc_proto_rawDesc, NumEnums: 6, - NumMessages: 81, + NumMessages: 83, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/boltzrpc/boltzrpc.pb.gw.go b/pkg/boltzrpc/boltzrpc.pb.gw.go index 48de889c..8317fcad 100644 --- a/pkg/boltzrpc/boltzrpc.pb.gw.go +++ b/pkg/boltzrpc/boltzrpc.pb.gw.go @@ -13,7 +13,6 @@ import ( "io" "net/http" - "github.com/golang/protobuf/ptypes/empty" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" "google.golang.org/grpc" @@ -22,6 +21,7 @@ import ( "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/emptypb" ) // Suppress "imported and not used" errors @@ -69,7 +69,7 @@ func local_request_Boltz_GetServiceInfo_0(ctx context.Context, marshaler runtime } func request_Boltz_GetPairs_0(ctx context.Context, marshaler runtime.Marshaler, client BoltzClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata msg, err := client.GetPairs(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -78,7 +78,7 @@ func request_Boltz_GetPairs_0(ctx context.Context, marshaler runtime.Marshaler, } func local_request_Boltz_GetPairs_0(ctx context.Context, marshaler runtime.Marshaler, server BoltzServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty + var protoReq emptypb.Empty var metadata runtime.ServerMetadata msg, err := server.GetPairs(ctx, &protoReq) diff --git a/pkg/boltzrpc/boltzrpc.proto b/pkg/boltzrpc/boltzrpc.proto index 0843d6eb..cceb9e72 100644 --- a/pkg/boltzrpc/boltzrpc.proto +++ b/pkg/boltzrpc/boltzrpc.proto @@ -133,6 +133,11 @@ service Boltz { */ rpc ListWalletTransactions (ListWalletTransactionsRequest) returns (ListWalletTransactionsResponse); + /* + Increase the fee of a wallet transaction using RBF. + */ + rpc BumpWalletTransaction (BumpWalletTransactionRequest) returns (BumpWalletTransactionResponse); + /* Returns the credentials of a wallet. The password will be required if the wallet is encrypted. */ @@ -796,6 +801,19 @@ message WalletTransaction { repeated TransactionInfo infos = 7; } +message BumpWalletTransactionRequest { + // id of the wallet which the transaction belongs to + uint64 id = 1; + // fee rate for the new transaction + double sat_per_vbyte = 2; + // id of the transaction to bump + string tx_id = 3; +} + +message BumpWalletTransactionResponse { + string tx_id = 1; +} + message TransactionInfo { // will be populated for LOCKUP, REFUND and CLAIM optional string swap_id = 1; diff --git a/pkg/boltzrpc/boltzrpc_grpc.pb.go b/pkg/boltzrpc/boltzrpc_grpc.pb.go index 2aeeda28..75aee7f7 100644 --- a/pkg/boltzrpc/boltzrpc_grpc.pb.go +++ b/pkg/boltzrpc/boltzrpc_grpc.pb.go @@ -1,17 +1,17 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.0 +// - protoc v4.25.1 // source: boltzrpc.proto package boltzrpc import ( context "context" - empty "github.com/golang/protobuf/ptypes/empty" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" ) // This is a compile-time assertion to ensure that this generated file @@ -43,6 +43,7 @@ const ( Boltz_GetWallet_FullMethodName = "/boltzrpc.Boltz/GetWallet" Boltz_GetWalletSendFee_FullMethodName = "/boltzrpc.Boltz/GetWalletSendFee" Boltz_ListWalletTransactions_FullMethodName = "/boltzrpc.Boltz/ListWalletTransactions" + Boltz_BumpWalletTransaction_FullMethodName = "/boltzrpc.Boltz/BumpWalletTransaction" Boltz_GetWalletCredentials_FullMethodName = "/boltzrpc.Boltz/GetWalletCredentials" Boltz_RemoveWallet_FullMethodName = "/boltzrpc.Boltz/RemoveWallet" Boltz_WalletSend_FullMethodName = "/boltzrpc.Boltz/WalletSend" @@ -71,7 +72,7 @@ type BoltzClient interface { // Fetches information about a specific pair for a chain swap. GetPairInfo(ctx context.Context, in *GetPairInfoRequest, opts ...grpc.CallOption) (*PairInfo, error) // Fetches all available pairs for submarine and reverse swaps. - GetPairs(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*GetPairsResponse, error) + GetPairs(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*GetPairsResponse, error) // Returns a list of all swaps, reverse swaps, and chain swaps in the database. ListSwaps(ctx context.Context, in *ListSwapsRequest, opts ...grpc.CallOption) (*ListSwapsResponse, error) // Returns stats of all swaps, reverse swaps, and chain swaps in the database. @@ -124,6 +125,8 @@ type BoltzClient interface { GetWalletSendFee(ctx context.Context, in *WalletSendRequest, opts ...grpc.CallOption) (*WalletSendFee, error) // Returns recent transactions from a wallet. ListWalletTransactions(ctx context.Context, in *ListWalletTransactionsRequest, opts ...grpc.CallOption) (*ListWalletTransactionsResponse, error) + // Increase the fee of a wallet transaction using RBF. + BumpWalletTransaction(ctx context.Context, in *BumpWalletTransactionRequest, opts ...grpc.CallOption) (*BumpWalletTransactionResponse, error) // Returns the credentials of a wallet. The password will be required if the wallet is encrypted. GetWalletCredentials(ctx context.Context, in *GetWalletCredentialsRequest, opts ...grpc.CallOption) (*WalletCredentials, error) // Removes a wallet. @@ -133,13 +136,13 @@ type BoltzClient interface { // Get a new address of the wallet. WalletReceive(ctx context.Context, in *WalletReceiveRequest, opts ...grpc.CallOption) (*WalletReceiveResponse, error) // Gracefully stops the daemon. - Stop(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) + Stop(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) // Unlocks the server. This will be required on startup if there are any encrypted wallets. - Unlock(ctx context.Context, in *UnlockRequest, opts ...grpc.CallOption) (*empty.Empty, error) + Unlock(ctx context.Context, in *UnlockRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // Check if the password is correct. VerifyWalletPassword(ctx context.Context, in *VerifyWalletPasswordRequest, opts ...grpc.CallOption) (*VerifyWalletPasswordResponse, error) // Changes the password for wallet encryption. - ChangeWalletPassword(ctx context.Context, in *ChangeWalletPasswordRequest, opts ...grpc.CallOption) (*empty.Empty, error) + ChangeWalletPassword(ctx context.Context, in *ChangeWalletPasswordRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // Creates a new tenant which can be used to bake restricted macaroons. CreateTenant(ctx context.Context, in *CreateTenantRequest, opts ...grpc.CallOption) (*Tenant, error) // Returns all tenants. @@ -189,7 +192,7 @@ func (c *boltzClient) GetPairInfo(ctx context.Context, in *GetPairInfoRequest, o return out, nil } -func (c *boltzClient) GetPairs(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*GetPairsResponse, error) { +func (c *boltzClient) GetPairs(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*GetPairsResponse, error) { out := new(GetPairsResponse) err := c.cc.Invoke(ctx, Boltz_GetPairs_FullMethodName, in, out, opts...) if err != nil { @@ -394,6 +397,15 @@ func (c *boltzClient) ListWalletTransactions(ctx context.Context, in *ListWallet return out, nil } +func (c *boltzClient) BumpWalletTransaction(ctx context.Context, in *BumpWalletTransactionRequest, opts ...grpc.CallOption) (*BumpWalletTransactionResponse, error) { + out := new(BumpWalletTransactionResponse) + err := c.cc.Invoke(ctx, Boltz_BumpWalletTransaction_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *boltzClient) GetWalletCredentials(ctx context.Context, in *GetWalletCredentialsRequest, opts ...grpc.CallOption) (*WalletCredentials, error) { out := new(WalletCredentials) err := c.cc.Invoke(ctx, Boltz_GetWalletCredentials_FullMethodName, in, out, opts...) @@ -430,8 +442,8 @@ func (c *boltzClient) WalletReceive(ctx context.Context, in *WalletReceiveReques return out, nil } -func (c *boltzClient) Stop(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *boltzClient) Stop(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, Boltz_Stop_FullMethodName, in, out, opts...) if err != nil { return nil, err @@ -439,8 +451,8 @@ func (c *boltzClient) Stop(ctx context.Context, in *empty.Empty, opts ...grpc.Ca return out, nil } -func (c *boltzClient) Unlock(ctx context.Context, in *UnlockRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *boltzClient) Unlock(ctx context.Context, in *UnlockRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, Boltz_Unlock_FullMethodName, in, out, opts...) if err != nil { return nil, err @@ -457,8 +469,8 @@ func (c *boltzClient) VerifyWalletPassword(ctx context.Context, in *VerifyWallet return out, nil } -func (c *boltzClient) ChangeWalletPassword(ctx context.Context, in *ChangeWalletPasswordRequest, opts ...grpc.CallOption) (*empty.Empty, error) { - out := new(empty.Empty) +func (c *boltzClient) ChangeWalletPassword(ctx context.Context, in *ChangeWalletPasswordRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) err := c.cc.Invoke(ctx, Boltz_ChangeWalletPassword_FullMethodName, in, out, opts...) if err != nil { return nil, err @@ -516,7 +528,7 @@ type BoltzServer interface { // Fetches information about a specific pair for a chain swap. GetPairInfo(context.Context, *GetPairInfoRequest) (*PairInfo, error) // Fetches all available pairs for submarine and reverse swaps. - GetPairs(context.Context, *empty.Empty) (*GetPairsResponse, error) + GetPairs(context.Context, *emptypb.Empty) (*GetPairsResponse, error) // Returns a list of all swaps, reverse swaps, and chain swaps in the database. ListSwaps(context.Context, *ListSwapsRequest) (*ListSwapsResponse, error) // Returns stats of all swaps, reverse swaps, and chain swaps in the database. @@ -569,6 +581,8 @@ type BoltzServer interface { GetWalletSendFee(context.Context, *WalletSendRequest) (*WalletSendFee, error) // Returns recent transactions from a wallet. ListWalletTransactions(context.Context, *ListWalletTransactionsRequest) (*ListWalletTransactionsResponse, error) + // Increase the fee of a wallet transaction using RBF. + BumpWalletTransaction(context.Context, *BumpWalletTransactionRequest) (*BumpWalletTransactionResponse, error) // Returns the credentials of a wallet. The password will be required if the wallet is encrypted. GetWalletCredentials(context.Context, *GetWalletCredentialsRequest) (*WalletCredentials, error) // Removes a wallet. @@ -578,13 +592,13 @@ type BoltzServer interface { // Get a new address of the wallet. WalletReceive(context.Context, *WalletReceiveRequest) (*WalletReceiveResponse, error) // Gracefully stops the daemon. - Stop(context.Context, *empty.Empty) (*empty.Empty, error) + Stop(context.Context, *emptypb.Empty) (*emptypb.Empty, error) // Unlocks the server. This will be required on startup if there are any encrypted wallets. - Unlock(context.Context, *UnlockRequest) (*empty.Empty, error) + Unlock(context.Context, *UnlockRequest) (*emptypb.Empty, error) // Check if the password is correct. VerifyWalletPassword(context.Context, *VerifyWalletPasswordRequest) (*VerifyWalletPasswordResponse, error) // Changes the password for wallet encryption. - ChangeWalletPassword(context.Context, *ChangeWalletPasswordRequest) (*empty.Empty, error) + ChangeWalletPassword(context.Context, *ChangeWalletPasswordRequest) (*emptypb.Empty, error) // Creates a new tenant which can be used to bake restricted macaroons. CreateTenant(context.Context, *CreateTenantRequest) (*Tenant, error) // Returns all tenants. @@ -612,7 +626,7 @@ func (UnimplementedBoltzServer) GetServiceInfo(context.Context, *GetServiceInfoR func (UnimplementedBoltzServer) GetPairInfo(context.Context, *GetPairInfoRequest) (*PairInfo, error) { return nil, status.Errorf(codes.Unimplemented, "method GetPairInfo not implemented") } -func (UnimplementedBoltzServer) GetPairs(context.Context, *empty.Empty) (*GetPairsResponse, error) { +func (UnimplementedBoltzServer) GetPairs(context.Context, *emptypb.Empty) (*GetPairsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetPairs not implemented") } func (UnimplementedBoltzServer) ListSwaps(context.Context, *ListSwapsRequest) (*ListSwapsResponse, error) { @@ -672,6 +686,9 @@ func (UnimplementedBoltzServer) GetWalletSendFee(context.Context, *WalletSendReq func (UnimplementedBoltzServer) ListWalletTransactions(context.Context, *ListWalletTransactionsRequest) (*ListWalletTransactionsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListWalletTransactions not implemented") } +func (UnimplementedBoltzServer) BumpWalletTransaction(context.Context, *BumpWalletTransactionRequest) (*BumpWalletTransactionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method BumpWalletTransaction not implemented") +} func (UnimplementedBoltzServer) GetWalletCredentials(context.Context, *GetWalletCredentialsRequest) (*WalletCredentials, error) { return nil, status.Errorf(codes.Unimplemented, "method GetWalletCredentials not implemented") } @@ -684,16 +701,16 @@ func (UnimplementedBoltzServer) WalletSend(context.Context, *WalletSendRequest) func (UnimplementedBoltzServer) WalletReceive(context.Context, *WalletReceiveRequest) (*WalletReceiveResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method WalletReceive not implemented") } -func (UnimplementedBoltzServer) Stop(context.Context, *empty.Empty) (*empty.Empty, error) { +func (UnimplementedBoltzServer) Stop(context.Context, *emptypb.Empty) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Stop not implemented") } -func (UnimplementedBoltzServer) Unlock(context.Context, *UnlockRequest) (*empty.Empty, error) { +func (UnimplementedBoltzServer) Unlock(context.Context, *UnlockRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Unlock not implemented") } func (UnimplementedBoltzServer) VerifyWalletPassword(context.Context, *VerifyWalletPasswordRequest) (*VerifyWalletPasswordResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method VerifyWalletPassword not implemented") } -func (UnimplementedBoltzServer) ChangeWalletPassword(context.Context, *ChangeWalletPasswordRequest) (*empty.Empty, error) { +func (UnimplementedBoltzServer) ChangeWalletPassword(context.Context, *ChangeWalletPasswordRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method ChangeWalletPassword not implemented") } func (UnimplementedBoltzServer) CreateTenant(context.Context, *CreateTenantRequest) (*Tenant, error) { @@ -776,7 +793,7 @@ func _Boltz_GetPairInfo_Handler(srv interface{}, ctx context.Context, dec func(i } func _Boltz_GetPairs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) + in := new(emptypb.Empty) if err := dec(in); err != nil { return nil, err } @@ -788,7 +805,7 @@ func _Boltz_GetPairs_Handler(srv interface{}, ctx context.Context, dec func(inte FullMethod: Boltz_GetPairs_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(BoltzServer).GetPairs(ctx, req.(*empty.Empty)) + return srv.(BoltzServer).GetPairs(ctx, req.(*emptypb.Empty)) } return interceptor(ctx, in, info, handler) } @@ -1138,6 +1155,24 @@ func _Boltz_ListWalletTransactions_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _Boltz_BumpWalletTransaction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BumpWalletTransactionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BoltzServer).BumpWalletTransaction(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Boltz_BumpWalletTransaction_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BoltzServer).BumpWalletTransaction(ctx, req.(*BumpWalletTransactionRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Boltz_GetWalletCredentials_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetWalletCredentialsRequest) if err := dec(in); err != nil { @@ -1211,7 +1246,7 @@ func _Boltz_WalletReceive_Handler(srv interface{}, ctx context.Context, dec func } func _Boltz_Stop_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) + in := new(emptypb.Empty) if err := dec(in); err != nil { return nil, err } @@ -1223,7 +1258,7 @@ func _Boltz_Stop_Handler(srv interface{}, ctx context.Context, dec func(interfac FullMethod: Boltz_Stop_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(BoltzServer).Stop(ctx, req.(*empty.Empty)) + return srv.(BoltzServer).Stop(ctx, req.(*emptypb.Empty)) } return interceptor(ctx, in, info, handler) } @@ -1449,6 +1484,10 @@ var Boltz_ServiceDesc = grpc.ServiceDesc{ MethodName: "ListWalletTransactions", Handler: _Boltz_ListWalletTransactions_Handler, }, + { + MethodName: "BumpWalletTransaction", + Handler: _Boltz_BumpWalletTransaction_Handler, + }, { MethodName: "GetWalletCredentials", Handler: _Boltz_GetWalletCredentials_Handler, diff --git a/pkg/boltzrpc/client/client.go b/pkg/boltzrpc/client/client.go index 5fb30433..7430bd71 100644 --- a/pkg/boltzrpc/client/client.go +++ b/pkg/boltzrpc/client/client.go @@ -107,6 +107,10 @@ func (boltz *Boltz) ListWalletTransactions(request *boltzrpc.ListWalletTransacti return boltz.Client.ListWalletTransactions(boltz.Ctx, request) } +func (boltz *Boltz) BumpWalletTransaction(request *boltzrpc.BumpWalletTransactionRequest) (*boltzrpc.BumpWalletTransactionResponse, error) { + return boltz.Client.BumpWalletTransaction(boltz.Ctx, request) +} + func (boltz *Boltz) ImportWallet(params *boltzrpc.WalletParams, credentials *boltzrpc.WalletCredentials) (*boltzrpc.Wallet, error) { return boltz.Client.ImportWallet(boltz.Ctx, &boltzrpc.ImportWalletRequest{Params: params, Credentials: credentials}) }